日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

1 《Undocumented Windows 2000 Secrets》翻譯 --- 第三章

第三章 編寫內核模式驅動程序
翻譯: Kendiv
更新: Monday, February 07, 2005
在下一章中,我們會經常訪問那些僅在內核模式下才有效的系統資源 。大量的示例代碼都被設計為內核驅動例程( Kernel-mode driver routine ) 。因此,需要有關開發(fā)此種軟件的基本知識 。因為我不能假定所有讀者都有這方面的經驗,我會在此簡要地介紹一下內核模式驅動程序編程,不過這僅集中在如何使用驅動開發(fā)向導(在本書光盤上) 。
本章還將討論 Windows 2000 服務控制管理器( Service Control Manager,SCM )的基本知識,這包括 SCM 如何允許在運行時加載、控制和卸載驅動程序,resulting in wonderfully short change-build-test turnaround cycles。本章的題目或許會讓人有些誤解,驅動一詞通常與控制硬件的底層軟件相關 。事實上,很多內核程序員每天都在做這些事情 。不過,Windows 2000 的驅動程序分層模式允許做比這更多的事情 。內核驅動程序可以完成任意復雜的任務,若不考慮它們運行于更高的 CPU 特權級別上而且使用不同的開發(fā)接口,那它們很像用戶模式下的 DLL。在此,我們將使用這種強大的開發(fā)技術來偵測 Windows 2000 的內部秘密,使用內核驅動程序就像駕駛從狹小的用戶模式飛往 Windows 2000 內核的太空飛船 。
創(chuàng)建一個驅動程序的骨架
即使長時間開發(fā) Win32 應用程序和庫的開發(fā)人員,在首次編寫內核驅動程序時,也會感覺像是一個絕對的初學者 。這是因為,內核模式下的代碼運行在一個完全不同的操作系統環(huán)境中 。Win32 開發(fā)人員的工作僅局限在屬于 Windows 2000 Win32 子系統的幾個系統組件上 。其他開發(fā)人員可能編寫 POSI 或 OS/2 應用程序,Windows 2000 的附加子系統為它們提供支持 。感謝子系統這個概念,Windows 2000 就像一個變色龍 --- 它可通過這些子系統(前面提及的)導出不同的應用程序開發(fā)接口來模擬不同的操作系統 。與此相反,內核模式的代碼可以看到“真實”的 Windows 2000 操作系統 。它們使用的接口可以稱之為“最終邊界” 。當然,這并不是說,內核模式完全擺脫了子系統 。在第二章中,我們看到 win32k.sys 就是 Win32 GUI 和窗口管理器在內核模式下的分支,將它們放在內核是出于性能考慮 。然而,win32k.sys 導出的 API 函數集合中只有一小部分出現在了 gdi32.dll 和 user32.dll 中,這也意味著只有這一小部分函數可以作為 Win32 API 函數來使用,因此,Win32K 決不只是 Win32 踏入內核世界的一腳,實際上,應把它看作是一個高性能的內核模式的圖形引擎 。
Windows 2000 DDK ( Device Driver Kit )
由于內核模式下的編程使用了不同的系統接口,在 Win32 編程中經常使用的頭文件和庫都將無法在內核模式下使用 。針對 Win32 開發(fā),微軟提供了 Platform Software Development Kit ( SDK ) 。而與內核模式的驅動開發(fā)相關的是,Windows 2000 Device Driver Kit ( DDK ) 。隨文檔一起,DDK 還提供了特殊的頭文件和導入庫,這些都是 Windows 2000 內核模塊必須的接口 。安裝完 DDK 之后,接下來你應該打開 Visual C/C,把 DDK 的路徑加入到編譯器和鏈接器的目錄列表中 。在主菜單中選擇 Tools à Options,然后單擊 DirectorIEs。在目錄選擇下拉列表中選擇 Include files,然后將 DDK 的適當路徑加入,如 圖 3-1 所示 。默認情況下,DDK 將安裝到 NTDDK 目錄下,included 文件位于 NTDDKinc 子目錄中 。需要注意的是,請將新添加的路徑置于原有路徑的上方,這樣就會使用新的頭文件或者庫 。
圖 3-1 添加 DDK 頭文件路徑
圖 3-2 添加 DDK 導入庫路徑
在添加完 DDK 頭文件路徑后,用同樣的方法添加導入庫的路徑 。DDK 包含兩組導入庫,一組叫做 free ( release ) builds,另一組叫做 checked ( debug ) builds。其對應的目錄為: NTDDKlibfrei386 和 NTDDKlibchki386,參見 圖 3-2。

推薦閱讀