標籤:
本文是對Win7(64)+VS2010+WDK7.1.0(WinDDK\7600.16385.1)開發驅動的小結。
一、系統工具
1、Win7(amd64位)系統
註:已裝系統後,管理員身份運行cmd命令,查看bcdedit /set testsigning true、bcdedit /debug on 等命令是否運行成功。若失敗,請將bcdedit命令所在檔案夾boot對應的盤(一般C盤)設定為活動狀態;若依然失敗,請修複C盤下的Boot(系統引導檔案所在),或重裝系統。
2、VS2010
3、WDK7.1.0(WinDDK\7600.16385.1)
地址:https://msdn.microsoft.com/en-us/windows/hardware/hh852365 該地址還串連 Windbg 調試工具 和Windows Symbols ,可以下載下來備後續調試時用。
4、WinDbg
地址:http://www.microsoft.com/whdc/devtools/debugging/default.mspx
Symbols:
地址:https://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx
註:Symbol檔案是從微軟的網站上http://msdl.microsoft.com/download/symbols下載而來,這個網址是不可以用IE直接開啟的,WinDbg->File->Symbol File Path介面中輸入SRV*C:\WINDOWS\Symbols*http://msdl.microsoft.com/download/symbols; 並選擇Reload,WinDbg會自動幫你下載,關鍵是勾選reload。
5、InstDrv軟體(用於安裝、啟動、停止、卸載驅動)
註:srvinstw.exe 也可以安裝、卸載sys檔案,但需要在cmd命令視窗下執行net start 驅動名、net stop 驅動名來啟動、停止服務。
6、64Signer-V1.2(Win7 64位 私人測試數位簽章軟體)
7、DbgWiew.exe (查看核心模組的輸出資訊)
地址:https://technet.microsoft.com/en-us/sysinternals/bb896647.aspx
8、虛擬機器(WMware10.0供雙機調試)
地址:http://www.microsoft.com/zh-CN/download/confirmation.aspx?id=8002
9、其他軟體: 虛擬光碟機DAEMON Tools Lite、EasyBCD(系統引導檔案修複工具)、PartitionManager(將C盤設定為使用中的磁碟分割)等
二、配置VS2010 64位開發環境
1、在VS中VisualC++下建立 空項目
添加Driver類,將標頭檔刪除,將Driver.cpp檔案修改為Driver.c檔案,內容如下:
#include "ntddk.h"
// 提供一個Unload函數只是為了
VOID DriverUnload1(PDRIVER_OBJECT driver)
{
// 但是實際上我們什麼都不做,只列印一句話:
DbgPrint("MyDriver: Our driver is unloading…\r\n");
}
NTSTATUS
DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
DbgPrint("MyDriver: Hello, my salary!");
DriverObject->DriverUnload = DriverUnload1;
return STATUS_UNSUCCESSFUL;
}
註:添加類後,在屬性中顯示出C/C++項,供配置屬性。
2、點擊VS中的解決方案配置的下按鈕(即debug所處的下拉框按鈕),點擊組態管理員,點擊活動方案配置,點擊建立,輸入DriverDebug64、預設空,解決方案平台:選X64。
建成後的效果
3、點擊VS中視圖->其他視窗->屬性管理員
4、右擊屬性管理員中的DriverDebug64,選擇屬性,在彈出的表單中進行必要的設定。
(此處的設定都是必須的, 對複雜些的驅動開發也許還要額外另加設定)
註:WDK7.1.0預設安裝在C:\WinDDK\7600.16385.1檔案夾下
1)常規
目標檔案副檔名:.sys
2)VC++目錄
可執行檔目錄(編譯器路徑):C:\WinDDK\7600.16385.1\bin\amd64
註:Xp系統64位如下:
----------C:\WinDDK\7600.16385.1\bin\x86\amd64
----------C:\WinDDK\7600.16385.1\bin\x86
包含目錄:C:\WinDDK\7600.16385.1\inc\api
C:\WinDDK\7600.16385.1\inc\crt
C:\WinDDK\7600.16385.1\inc\ddk
庫目錄:C:\WinDDK\7600.16385.1\lib\win7\amd64
3)C/C++
前置處理器->前置處理器定義:
_AMD64_=1,AMD64=1,STD_CALL=1,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,_DEBUG =1
進階->呼叫慣例:__stdcall (/Gz)
4)連接器
輸入->附加依賴項:ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB;%(AdditionalDependencies)
輸入->忽略所有串連庫:是 (/NODEFAULTLIB)
資訊清單檔->啟用使用者賬戶控制(UAC):否 (/MANIFESTUAC:NO)
系統->子系統:控制台 (/SUBSYSTEM:CONSOLE)
系統->驅動程式:驅動程式 (/Driver)
系統->堆棧保留大小:4194304(可修改)
系統->堆棧提交大小:4096 (可修改)
進階->進入點:DriverEntry
進階->基址:0x10000
註:參考C:\WinDDK\7600.16385.1檔案夾的ia64、X86等路徑,進行修改可以配置為ia64、32位系統。
5、編譯若通過,則配置成功,並生產.sys等檔案。
三、調試
配置調試機
1、將Win7設定為可調試狀態
1)以管理員身份開啟cmd命令視窗:Win + R 開啟運行輸入框,輸入cmd;或滑鼠點擊系統開始表徵圖,在輸入框中輸入cmd,右擊上方搜尋顯示出的cmd.exe,以管理員身份運行。
2)依次輸入:
bcdedit /?
Bcdedit /enum OSLOADER
Bcdedit /copy {current} /d “Windows 7 Copy”
Bcdedit /debug on
Bcdedit /bootdebug on
Bcdedit /dbgsettings
Bcdedit /timeout 7
2、將Win7設定為測試版
管理員身份運行cmd命令,bcdedit /set testsigning true
3、測試認證數位簽章
以管理員身份運行64Signer V1.2.exe,點擊瀏覽找到並雙機.sys檔案,點擊簽名。
4、查看核心輸出資訊
以管理員身份運行Dbgview.exe,點擊Capture菜單,勾選上Captrue kernel項。
5、配置WinDbg
1)設定系統字元表路徑:WinDbg->File->Symbol File Path介面中輸入
SRV*C:\WINDOWS\Symbols*http://msdl.microsoft.com/download/symbols; 並選擇
Reload,WinDbg會自動下載字元表,關鍵是勾選reload。
2)設定自己產生的.sys對應的字元(Symbol)路徑:
E:\Project\TestDriver\TestDriver\x64\DriverDebug64
3)設定自己產生.sys的原代碼路徑:E:\Project\TestDriver\TestDriver
註:自己產生的.sys檔案預設路徑:E:\Project\TestDriver\x64\DriverDebug64
6、安裝.sys檔案
以管理員身份運行運行InstDrv.exe,選擇.sys檔案,進行安裝、啟動等操作
註:請不要在本地主機,測試含有斷點的核心,否則卡機,無法進行任何操作,應該採用雙機調試(即建立個虛擬機器,本地機與虛擬機器通過管道進行通訊)。
配置虛擬機器
1、安裝虛擬機器
註:主板預設沒有開啟虛擬化技術,一般方法是開機或重啟時按F12鍵進入BIOS菜單,將虛擬化(Virtualization...
2、配置虛擬機器
1)開始-->WMware Work Stations-->雙擊“我的電腦”下的一個虛擬機器(Windows 7 x64)-->編輯虛擬機器設定-->移除印表機-->添加竄行連接埠
2)選中剛添加的竄行連接埠,在右側的對話方塊中,設定如下:
勾選 啟動時串連
選擇 使用命名的管道(N)
其下的兩個下拉框分別選擇:該端是伺服器、另一端是應用程式
3)本人執行和未執行該步驟都能夠調試成功。本步驟作為多餘補償,如果你未執行該步驟失敗,請將主機目錄C:\WINDOWS\Symbols下的拷貝到虛擬機器的相同位置。並且把自己產生的驅動編譯後產生的字元檔案(E:\Project\TestDriver\TestDriver\x64\DriverDebug64
目錄下)放到虛擬機器的C:\WINDOWS\Symbols目錄下。主要匹配主、客機上字元的一致性。
3、雙機調試
給原始碼添加調試時中斷語句
#if DBG
__debugbreak(); //64位
#endif
重建sys檔案,重新執行以上步驟,然後以管理員身份開啟主機上的WinDbg軟體,再在客戶機安裝.sys檔案及開啟、關閉、卸載等操作。開啟後即進入中斷點,可以一步步進行調試。。。
註:彙編_asm int 3 中斷,在xp上 正確,在64位Win7上報錯。如果未能進入斷點進行調試,請檢查sys檔案是否在客戶機(虛擬Win7系統)安裝成功,系統字元集(Symbols)、本人字元Symbols是否下載或設定正確,管道連接埠是否正確等
提示:在本地主機上不以管理員身份運行軟體,也可能是管理員身份成功運行,而客戶機(虛擬機器上一般都要是以管理員身份運行軟體)
若進行 Win7 + WDK8.0+Windbg 進行Driver Filter開發,請將WDK7卸載,否則運行時會報大堆離奇錯誤。。。。
Windows 7 驅動開發