Monday, September 03, 2007

Windows Driver programming[1]

Windows Driver programming 是我在 rxxltxk 被冷凍時(2006/07~2006/12)無聊研究的題材。 當時剛好有顆 IC 要出來,剛好最會寫 driver 的人走了,剛好被冷凍,只好自己玩玩 Windows Driver。

需要的工具

1. 編譯工具

  • Windows Driver Development Kit(DDK):這個去 Microsoft 官方網站抓,不過要錢。現在加入 Microsoft 的測試計畫可以免費下載。
  • Soft -Ice內建在 DriverStudio 中,去 Compuware 公司抓,這也要錢。 不過當你的 driver 在某個地方一定會讓系統整個當掉的時候,你會發現 Soft-Ice 真的很好用。 Microsoft 有個 kernel mode debugger,不過它只支援 remote debug,這表示你得透過 com port,用另外一台電腦 debug, 雖然它支援 USB remote debug,不過一樣很麻煩,光設定就要人命了。 不過 Soft-Ice也不是萬能的,至少它在執行的時候,會把整個系統停住,這會導致一些很奇怪的現象。 另外,Soft-Ice 跟某些 CPU 會很不合,一開就死。如果你的 CPU 支援 hyper-threading,最好把這個功能關掉。 以上都是鬼扯....SoftIce 的相容性相當不好,導致只好改用 Windows debugging tool,結果發覺意外的好用。當時覺得不好用是因為,公司不給我另外一台機器啊(被冷凍的人還要機器幹嘛?)。windows debugger tool 不用錢喔。而且它還可以分析 kernel dump file,然後跟你的 source code 作連結,幾乎都可以抓出程式死在哪裡。
  • DbgView:當你的 driver 呼叫 DbgPrint()/KdPrint() 時,它會把字串轉到 DbgView 的視窗中,這個在 local debug 的時候很有用。你可以在 http://www.sysinternals.com/Utilities/DebugView.html 下載,不用錢。

2. 書

  • Programming the microsoft windows driver model:這本書一定要看,雖然很難看得懂。你也可以在寫完第一隻 Driver(當然是很爛的 driver)之後再去看,會受益良多。這本書的內容只包含 WDM driver,所以如果你要寫 NDIS driver或 Kernel stream driver,嘿嘿,DDK 繼續 K 吧。
  • Microsoft Windows Internals, Fourth Edition:這算是 OS 參考書,有一些概念是很值得看的。
  • Advanced Windows Debugging:大部分介紹如何使用 Windows Debugging Tools,很實用的一本書。

No comments:

codeblock