WDK

(Windows Driver Kit)是一種完全集成的驅動程式開發系統,它包含Windows Driver Development Kit (DDK),用於測試 Windows 驅動器的可靠性和穩定性。

基本介紹

  • 外文名:Windows Driver Kit
  • 縮寫:WDK
  • 屬性:一種驅動程式開發系統
  • 類型:完全集成
WDK,WDK的使用:,一、原始碼編譯,二、sys 檔案安裝,三、調試,WDK+WIN7+VS的使用,

WDK

(Windows Driver Kit)是一種完全集成的驅動程式開發系統,它包含Windows Driver Device Kit (DDK),用於測試 Windows 驅動器的可靠性和穩定性。
目前微軟最新版本為Windows Driver Kit 8 Consumer Preview 支持 Windows 8, Windows 7,和 Windows Vista.
包括:
Windows 驅動程式基礎 (WDF) 簡化了 Windows 驅動程式的開發和支持。
頭檔案重構(Windows Vista 和更高版本)通過提供更簡單的目錄結構、避免聲明衝突以及對所有支持的 Windows 版本使用單一頭檔案集,減小頭檔案的複雜性。
可安裝檔案系統 (IFS) 工具包將頭、庫、示例以及文檔作為 WDK 的一部分分發。
驗證程式和靜態分析工具(如 PREfast 和靜態驅動程式驗證程式)幫助您在編譯時查找 bug。

WDK的使用:

一、原始碼編譯

在微軟官網上下載 WDK 開發包,裡面有 WDK 編譯器,連結器,配置工具,如NMAKE。然後,用記事本寫 C 或 C++ 檔案,編譯,連結就 OK 了。WDK 庫是一定要的,否則頭檔案,導入庫都沒有,就無法編譯了。至於編譯器和連線器,其實就是普通的 cl.exe 和 link.exe 兩個工具,和 VS 中的 VC 編譯連結器是同一個。編譯的方法是:在自己的目錄如 c:\wdkdemo 中有個待編譯的 wdkdemo.c ,那么需要在這個目錄里加入兩個檔案,一個是 makefile (無後綴名)的固定檔案名稱,內容也是固定的:INCLUDE $(NTMAKEENV)\makefile.def另外一個檔案是 sources (無後綴名)的固定檔案名稱,內容為:targettype=drivertargetname=objsources=wdkdemo.c這兩個檔案都是讓nmake 工具配置用的,最終調用合適的編譯器和連結器開關來編譯出 sys 。WDK包有個 build 命令行工具,當配置好了以上兩個檔案後。雙擊 build 工具,進入到 c:\wdkdemo 目錄,輸入命令 build 回車,然後只要 wdkdemo.c 原始碼正確,就會生成 sys 檔案了。

二、sys 檔案安裝

在網上下載個免費的驅動安裝工具,這個不難吧,一般調試用的驅動,建議在安裝的時候,千萬記得要選擇手動模式,因為自啟動模式,如果驅動有BUG ,會導致藍屏,重啟機器後,驅動因自啟動又被載入,導致再次藍屏。

三、調試

在微軟官網下個 windbg ,但 windbg 需要調試機和被調試機模式,因此 windbg 最好配合 vmware 來使用。我感覺,sys 檔案編譯是很麻煩的。不如編譯應用程式,只要一個 VS 可以搞定大部分的事情。驅動開發需要很多關於其他工具的知識。譬如,用記事本或者NOTEPAD++編輯原始碼感覺很吃力,因為 VS 沒有驅動開發的項目,因此 VS 不直接支持驅動開發,當然,可以進行配置,但 VS 配置驅動是很麻煩的。另外, windbg 有很多的調試命令,當然常規的命令一般4、5個就夠用了。VMWARE 的配置也是很麻煩的,當初,我自己研究了很長時間,網上雖然有教程,但都是講得不全面,譬如要配置10個地方,網上都是只說7、8個,導致 VMWARE 配置不成功。驅動開發還有 DRIVER STUDIO 這么一個 IDE 可以使用,另外還有 IRPTRACE ,DEVICE TREE , DEBUG VIEWER 等工具。我開發驅動的工具是 VMWARE + VS2010 + WDK + WINDBG + WINOBJ + IRPTRACE + DEBUG VIEWER 這幾個。

WDK+WIN7+VS的使用

  • 首先,新建一個WIN32控制台工程,選擇空項目。然後新建一個.cpp檔案。接下去所有的項目屬性不要修改,需要修改的地方如下,至於有些修改的含義,就不多說了,一說又一大堆。VS 中配置 WDK 選項:(假定 WDK 安裝目錄為 C:\WinDDK\7600.16385.1,機器上的配置如下
    一、C/C++
  • 1.常規*附加包含目錄:編輯添加3個路徑,分別對應WDK安裝目錄\INC子目錄中的三個目錄:crt,api,ddk。最終在附加包含目錄的內容為:C:\WinDDK\7600.16385.1\inc\api;C:\WinDDK\7600.16385.1\inc\ddk;C:\WinDDK\7600.16385.1\inc\crt調試信息格式:C7兼容 /Z7
  • 2.預處理器*WIN32;DBG;_X86_;WINVER=0x0501
  • 3.代碼生成*啟用最小重新生成:否*基本運行時檢查:默認值運行庫:多執行緒調試(/MTd)*緩衝區安全檢查:否(/GS-)
  • 4.高級調用約定:__stdcall (/Gz)
    二、連結器
  • 1.常規輸出檔案:$(OutDir)\$(ProjectName).sys*啟用增量連結:否(/INCREMENTAL:NO)附加庫目錄:編輯添加1個路徑,對應WDK安裝目錄\LIB\WXP\I386,最終的附加庫目錄的內容為:C:\WinDDK\7600.16385.1\lib\wxp\i386。注意,如果是WIN7系統,子目錄把 WXP 改成WIN7
  • 2.輸入*附加依賴項:ntoskrnl.lib*忽略所有默認庫:是(/NODEFAULTLIB)
  • 3.清單檔案清單檔案:否
  • 4.系統子系統:本機(/SUBSYSTEM:NATIVE)*驅動程式:驅動程式(/DRIVER)。注意,如果是WDM類型驅動,改成 WDM (/DRIVER:WDM)。
  • 5.高級入口點:DriverEntry隨機地址:默認值數據執行保護(DEP):默認值以上帶 * 的意識為,內容可以根據項目的具體分化,可以有所變動。當然啦,變動,肯定是基於你對該選項的理解基礎上進行變更的。譬如附加依賴項一般需要ntoskrnl.lib ,如果使用了第三方庫里的函式,那需要再添加其他的 lib 庫。譬如想啟用緩衝區安全檢查,那除了開關設定以外,必須在附加依賴項開關加上 bufferoverflowU.lib 這個庫,因為安全檢查函式由 bufferoverflowU.lib 導出。

相關詞條

熱門詞條

聯絡我們