Windows デバイス ドライバーの開発を始めるのに役立つ書籍やチュートリアルはありますか?
プレーンな Win32/GUI 開発では、Petzold の本が不可欠なリファレンスのようです。ドライバーにそのようなものはありますか?
私は実際にハードウェアについて話しているわけではないことに注意したいと思います。実際にはソフトウェアでハードウェアをエミュレートしたいのですが、最初に一般的にどのように機能するかを確認したいと思います。
ビリー3
注意すべきことの 1 つは、デバイス ドライバーの開発 (アーキテクチャとツール) が Win32 の開発よりも大きく変化することです...そのため、1990 年代の Petzold の本は Win32 に適していて、時代を超越した古典と見なされるかもしれませんが、多くの種類のドライバーのアーキテクチャ (プリンター ドライバー、ネットワーク ドライバーなど) は、さまざまな O/S リリースで異なります。
これは、さまざまな本をレビューするブログ エントリです: Windows Device Drivers Book Reviews。
DDK に含まれているマイクロソフトのドキュメントを忘れないでください。最も重要なのは、DDK に含まれているサンプル ドライバー (ソース コード) です。たとえば、シリアル ポート ドライバのモックを書きたいと思ったとき、サンプルのシリアル ドライバのドキュメントと DDK のドキュメントを組み合わせると非常に価値がある (そして十分である) ことがわかりました。
カーネル開発についてよく学ぶには:
a. 多くのサンプル カーネル プログラム:
Windows DDK サンプル:
WDK のサンプル:
http://msdn.microsoft.com/en-us/windows/hardware/gg487428
または単に検索してください:
http://www.google.com/search?q=windows+ddk+samples
(上記の URL は変更される可能性がありますが、Google は最も適切で到達可能な URL を返す可能性が高いため)
b. 多くのデバッグ手法がありますが、その中で私が見つけた最高のものは、VMware (または VirtualBox) + windbg + シリアル ポートのデバッグです。
http://www.google.com/search?q=windbg+vmware+kernel+debug
このペーパーは、VMWare + windbg (Lord of the Ring0) を使用するための古典的なものです。
http://silverstr.ufies.org/lotr0/windbg-vmware.html
c. 他の人が構築したシステム管理ツールと同様に:
http://technet.microsoft.com/en-us/sysinternals/bb545021
(以前は、「Windows Internal」の共著者である Mark Russinovich によって構築された SysInternals と呼ばれていました - 必読!!)
http://technet.microsoft.com/en-us/sysinternals/bb963901
これらのツールから得られる膨大なデバッグ オプションがあります。
d. OSR メーリング リストに参加してください (特に ntdev は非常に活発ですが、windbg のようなものもあります)。
http://www.osronline.com/page.cfm?name=ListServer
e. チャネル 9 で Windows + カーネルに関連する多くのビデオをご覧ください (Google は 1000 以上のリンクを返しました)。
http://www.google.com/search?q=site:channel9.msdn.com+kernel+video&num=100
f. 次のようなディスカッション フォーラム:
http://social.microsoft.com/Forums/en-us/kernel/threads
http://social.msdn.microsoft.com/Forums/en-US/wdk/threads
無料の OSR マガジンも購読しました (ハードコピー)。私は1998年から今まで私のものを受け取りました - そしてそれは地球の半分に届けられます!
個人的に開発を開始する最良の方法は、実際の露出によるものです。これを念頭に置いて、私はこの本をお勧めします
「何か」を実行するコードを実行し始めるには十分なはずです。その後、全体像を把握した後、次のようなトピックについて詳しく説明します。-Buffered / None/Directメソッドの違いとそれらに関連する特性。
「Windowsドライバーモデルのプログラミング、第2版」は、特定のトピックに関する詳細が必要な場合にも非常に役立ちます。しかし、最初に最も重要なことは、物事を文脈に入れて、それを基に構築することだと思います。
おそらく、古い WDM フレームワークではなく、ごく最近の Windows Driver Foundation (WDF) フレームワークを使用する必要があります。出発点として、 WDF の概要 Word 文書を読むことをお勧めします。
本を読みたい場合は、「Windows Driver Foundation によるドライバーの開発」が最適です。
このような豊富な例を含むチュートリアルを検索します。Windows ドライバー開発の本質は、レイヤーと IRP、IRQL について理解し、フィルター ドライバーなどの用語を理解することです。サンプル コードをお探しの場合は、ここに私の Spodek ドライバー コードを示します: sf.net リンク。フィルター ドライバー (キーボード用、keyb.c)、カーネル スペース キュー (queue.c)、およびシステム内の存在を隠すための手法が含まれています。ただし、これはレガシー(sys)ドライバーです。