Windows カーネルドライバプログラミング
ウィンドウズカーネルドライバプログラミング
- 著者:
- Pavel Yosifovich / 吉川 邦夫(パヴェル ヨシフォヴィチ / ヨシカワ クニオ)
- 出版社:
- 翔泳社
- 出版日:
- 2021年05月19日頃
- ISBN:
- 9784798170824
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
Windows カーネルを活用するドライバ開発に必要な環境構築と
カーネルドライバ開発の最初の取っ掛かりを提供する
【本書の内容】
本書は
Pavel Yosifovich, "Windows Kernel Programming",
Leanpub Publishing, 2019
の邦訳です。
本書は Windows 用のカーネルドライバの開発方法について解説した書籍です。
カーネルドライバは、ハードウェアを扱うのではなく、プロセスやスレッド、
モジュール、レジストリなど、Windows 特有のシステム自体を扱います。
そのため、注意深く目を配らなければならない範囲は広大です。
とはいえ、Visual Studio とデバッガーをはじめとする数種類のツールの使いかた
さえ理解できれば、Windows カーネルが持っているパワーを最大限に活用できる
ドライバのプログラミングは難しいことではありません。
『Windows カーネルドライバプログラミング』は、プログラミングをはじめるに
あたって必要となる環境構築と、システムを構成するオブジェクト群を解説し、
重要なイベントの監視やイベントの抑制などに役立つ、フィルタードライバの開発
まで紹介します。
【本書のポイント】
・フィルタードライバ開発に向けた最短距離
・必要最小限の API 解説
・プログラムコードは C/C++
【読者が得られること】
・カーネルドライバ開発の概要がわかる
・カーネルドライバ開発に入門できる
・各種ツールを扱えるようになる
・Windows システムが理解できるようになる
・ハッカーを気取れる
【著者について】
・Pavel Yosifovich (パーベル・ヨシフォビッチ) は、開発者、トレーナー、著者、
講演者です。共著に『インサイド Windows 第 7 版 システムアーキテクチャ、プロセス、
スレッド、メモリ管理、他』 (日経 BP、2018 年 4 月)、著書に
"Windows Presentation Foundation 4.5 Cookbook"(Packt Publishing、2012 年 9 月)、
"Windows 10 System Programming,Part1"(Independently published、2020 年 4 月)
などがあります。Pavel はソフトウェア全般を愛しており、古い Commodore 64 が今でも
大好きです。
技書の森解説
Windows のカーネルの中で動くプログラムを、環境の準備から自分で書いて動かすところまで導くのが『Windows カーネルドライバプログラミング』 (Pavel Yosifovich 著、吉川 邦夫 訳、翔泳社、2021 年 5 月刊) です。原書は Pavel Yosifovich の Windows Kernel Programming (Leanpub Publishing、2019 年) で、版元はその邦訳と案内しています。版元の紹介文によれば、本書が扱うカーネルドライバーはハードウェアを扱うものではなく、プロセスやスレッド、モジュール、レジストリなど Windows 特有のシステムそのものを扱うドライバーです。サンプルのプログラムコードは C/C++ で書かれています。著者は、版元の紹介によれば『インサイド Windows 第 7 版』の共著者でもあります。
全 11 章の構成、内部機構の概要からその他の話題まで
第 1 章「Windows 内部機構の概要」は、プロセス、仮想メモリ、スレッド、システムサービス、システム全体のアーキテクチャ、ハンドルとオブジェクトを順に整理する章です。第 2 章でツールのインストールとドライバプロジェクトの作成、DriverEntry と Unload のルーチン、ドライバーの配置と単純なトレースまでを一通り体験し、第 3 章「カーネルプログラミングの基礎」でカーネル API、文字列、動的なメモリ割り当て、ドライバオブジェクトとデバイスオブジェクトといった土台を固めます。第 4 章「ドライバを作る (始めから終わりまで)」はクライアントのコードを含めた 1 本のドライバーを最後まで仕上げる章で、第 5 章「デバッグ」では WinDbg によるカーネルデバッグを扱います。第 6 章「カーネルの機構」と第 7 章「I/O 要求パケット」を経て、後半は第 8 章「プロセスとスレッドの通知」、第 9 章「オブジェクトとレジストリの通知」、第 10 章「ファイルシステムミニフィルター」と、システムの出来事を捉えて手を加えるドライバーへ進みます。第 11 章「その他の話題」はドライバーの署名、ドライバーの検証ツール、ネイティブ API、フィルタードライバー、ドライバフッキングなどを取り上げます。第 2 章や第 8 章から第 10 章には課題の節も置かれています。
カーネルモードで書くことの難しさと本書の手順
ユーザーモードのアプリケーションは、OS の機能を システムコール を通じて呼び出し、不正なメモリアクセスをしても落ちるのはそのプロセスだけです。カーネルドライバーはこの境界の内側で動くため、1 つの誤りがシステム全体の停止につながります。加えて、割り込み要求レベル (IRQL) によって呼び出してよい関数や触れてよいメモリが変わる、遅延プロシージャコール (DPC) のように実行の文脈が自分のスレッドとは限らない、といったユーザーモードには無い規則があり、ミューテックス のような同期の道具も使える条件が限られます。本書は第 6 章で割り込み要求レベルとスレッド同期、システムクラッシュを扱ったうえで、第 8 章以降の通知とミニフィルターへ進みます。版元が「必要最小限の API 解説」と案内しているとおり、題材は網羅より、フィルタードライバーの開発に必要な部分へ絞られています。
C/C++ の経験と刊行時点の開発環境の前提
コードは C と C++ で書かれているため、ポインターやメモリの確保と解放を自分で扱えることが読み進める前提になります。版元は、Visual Studio とデバッガーをはじめとする数種類のツールの使い方さえ理解できれば、ドライバーのプログラミングは難しいことではないと案内しています。本書が前提とする Windows の版とドライバー開発キット (WDK)、Visual Studio の版は刊行時点のものです。カーネルの開発では、検証は仮想マシンなど手元の作業環境とは切り離した環境で行うのが一般的で、第 5 章のカーネルデバッグもその用意があると試しやすくなります。
監視や保護のツールを作りたい開発者に向く理由
版元は、重要なイベントの監視やイベントの抑制などに役立つフィルタードライバーの開発までを紹介すると案内しています。第 9 章のプロセス保護ドライバーや第 10 章の削除保護ドライバー、ファイルバックアップドライバーのように、目次には実用の形をしたドライバーが並んでいます。プロセスの起動やファイルの削除を捉える仕組みを自分の手で実装したい開発者、セキュリティ製品や運用ツールがカーネルの中で何をしているのかを確かめたい人には、題材と目的がよく合います。一方で、USB や PCI の機器のように物理的なデバイスを制御するドライバーを書くことが目的なら、版元の説明する範囲とは外れるため、そちらを主題にした資料を選ぶほうが近道です。C/C++ に慣れていて、Windows の内部をコードで確かめたい人にとって、カーネルドライバー開発の最初の一冊として選びやすい本です。
言及した記事 (2 件)
この本に興味がある方におすすめ
関連する本
Pavel Yosifovich の他の書籍
関連記事
技術書の知識を定着させる間隔反復法 - 読んだのに忘れる問題を解決する
技術書を読んでも内容を忘れてしまう原因を認知科学の観点から分析し、間隔反復法を使って知識を長期記憶に定着させる具体的な方法を紹介します。
技術書を読む順番の戦略 - 複数冊を組み合わせて理解を加速させる
技術書を 1 冊ずつ読むのではなく、複数冊を戦略的に組み合わせることで、1 冊では届かない理解の深さと広さに達する方法を解説します。
Linux 本ガイド - コマンドライン / しくみ / 性能の 3 層で選ぶ技術書
Linux を学ぶ技術書の選び方を 3 層 (コマンドラインの操作 → カーネルのしくみ → 性能と運用) で整理。新しい Linux の教科書や [試して理解] Linux のしくみなどの定番書の使い分けと、学ぶ順番を解説します。