Windows Driver Kit 是一種徹底集成的驅動程序開發工具包,它包含 WinDDK 用於測試 Windows 驅動器的可靠性和穩定性,本次實驗使用的是 WDK8.1 驅動開發工具包,該工具包支持 Windows 7到 Windows 10 系統的驅動開發。安全
VS2013+WDK8.1 驅動開發環境的搭建我研究了很長時間今天總算搭建出來了,並且中途沒有錯誤,這裏就把搭建過程分享出來,首先介紹一下個人實驗環境:服務器
宿主操做系統:Windows 10 LTSC 企業版
驅動測試環境:Windows 7 x86 企業版
編譯器的版本:Visual Studio Express 2013
驅動框架版本:Windows Driver Kit 8.1 (精簡)
內核調試工具:WinDBG 10多線程
驅動工具打包連接:https://pan.baidu.com/s/18VIXKdFdfu7ZuKOql7Z_Iw 提取碼:9se4框架
首先你須要先安裝好Visual Studio 2013
的開發環境,而後再安裝Windows Driver Kit 8.1
的驅動開發工具包,這個工具包安裝好之後1.5G左右,不過我已經把這個安裝包中的關鍵庫文件提取出來了,提取出的文件只有80MB
,直接將提取好的WinDDK.zip
解壓縮到指定文件中,並配置環境便可使用,省去了安裝WDK的麻煩。工具
1.這裏直接把我提取的WinDDK.zip
文件解壓縮到C盤根目錄下,而後打開Visual Studio
開發工具,按下【Ctrl+Shift+N】新建空項目並輸入項目名稱爲【MyDDK】便可。開發工具
2.依次選擇解決方案視圖 -> 源文件 -> 添加新建項,或者直接按下【Ctrl + Shift + A】快捷打開菜單,並建立【main.cpp】文件。測試
3.接着咱們須要修改一下配置管理器,添加自定義配置管理,選擇【生成】->【配置管理器】->【新建】,此處咱們命名爲【MyDDK】便可。優化
4.接着修改一下配置屬性中的常規屬性,點擊菜單欄中的調試,選擇【MyDDK屬性】->【配置】->【常規】 -> 修改如下幾處。操作系統
5.配置可執行文件路徑與導入庫路徑,這裏咱們選擇 【配置屬性】 -> 【VC++目錄】依次將以下信息填入配置項,若是須要編譯x64位驅動只須要將x86改成x64便可,此處以x86爲例。命令行
可執行文件: C:\WinDDK\bin C:\WinDDK\bin\x86 包含目錄: C:\WinDDK\Include\km C:\WinDDK\Include\um C:\WinDDK\Include\winrt C:\WinDDK\Include\shared 引用目錄+庫目錄 C:\WinDDK\Lib\win7\km\x86
6.配置【C/C++優化選項】配置屬性 -> C/C++ -> 全部選項 -> 依次修改下方几個關鍵處,若是你須要編譯X64驅動需將調用約定改成【__fastcall (/Gr)】而後將預處理器定義中的【X86_改成_AMD64】便可編譯64位驅動了,此處以X86配置爲例。
安全檢查:禁用安全檢查 (/GS-) 將警告視爲錯誤:是 (/WX) 警告等級:等級 3 (/W3) 啓用C++異常:否 調用約定:__stdcall (/Gz) 優化:已禁用 (/Od) 運行庫:多線程調試 (/MTd) 預處理器定義: _X86_;_DDK_;_WIN32_WINNT=0x0501;WINVER=0x0501;_NDEBUG;DBG=0;%(PreprocessorDefinitions)
7.接着須要【配置鏈接器】選項,選擇鏈接器 -> 全部選項 -> 依次修改下方几個關鍵處。
附加選項:/IGNORE:4078 /safeseh:no 附加依賴項:ntoskrnl.lib;ndis.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib 固定基址:此處須要爲空 忽略全部默認庫:是 (/NODEFAULTLIB) 啓用增量連接:否 (/INCREMENTAL:NO) 驅動程序:驅動程序 (/Driver) 入口點:DriverEntry 生成清單:否 (/MANIFEST:NO) 生成調試信息:是 (/DEBUG) 生成映射文件:是 (/MAP) 數據執行保護:是 (/NXCOMPAT) 隨機基址:此處須要清空 子系統:本機 (/SUBSYSTEM:NATIVE)
8.上方的配置已經基本完成了,接着咱們編寫一段驅動初始化代碼,而後按下【F7】便可完成驅動的編譯。
#include <ntddk.h> VOID UnDriver(PDRIVER_OBJECT driver) { DbgPrint(("Uninstall Driver Is OK \n")); } NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath) { DbgPrint(("hello lyshark \n")); Driver->DriverUnload = UnDriver; return STATUS_SUCCESS; }
9.最後咱們生成一個驅動開發模板,依次選擇【文件】->【導出模板】->【項目模板】->【下一步】->【完成】便可完成模板的導出。
此時關閉VS工具,再次打開,就能直接使用咱們的模板來開發驅動了,不須要每次都配置。
WinDBG 是Microsoft公司免費調試器調試集合中的GUI的調試器,支持Source和Assembly兩種模式的調試,Windbg不只能夠調試應用程序,還能夠進行內核調試,結合Microsoft的Symbol Server 能夠獲取系統符號文件,便於應用程序和內核的調試,接下來咱們將繼續完成WinDBG雙機調試的配置。
1.首先須要安裝VMWare虛擬機,並自行安裝好Windows7系統,而後在虛擬機關閉狀態下添加一個管道虛擬串口,此處須要刪除打印機,不然串口與打印機之間衝突。
操做步驟:編輯虛擬機設置->添加->串行端口->完成
參數配置:使用命名管道->\.\pipe\com_1->該端是服務器另外一端是應用程序->輪詢時主動放棄CPU
2.開啓虛擬機中的Windows7系統,而後以管理員身份運行CMD命令行,連續執行下方的三條命令,依次創建啓動項,並激活調試模式。
Microsoft Windows [版本 6.1.7601] 版權全部 (c) 2009 Microsoft Corporation。保留全部權利。 C:\Users\Administrator>bcdedit /copy {current} /d "Windwos7" 已將該項成功複製到 {2372b00a-f22b-11e9-be45-000c2971b6bf}。 C:\Users\Administrator>bcdedit /debug ON 操做成功完成。 C:\Users\Administrator>bcdedit /bootdebug ON 操做成功完成。 C:\Users\Administrator>bcdedit /timeout 10 操做成功完成。 C:\Users\Administrator>bcdedit /dbgsettings
3.默認狀況下Win7下的DbgView不顯示內核調試信息,爲了方便測試,咱們須要修改一下注冊表,新建一個run.reg文件,而後運行並註冊。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter] "DEFAULT"=dword:0000000f
4.配置完成後,從新啓動系統,在開機的時候選擇Windows7 [啓用調試程序]則系統會黑屏,說明已經正常進入調試模式了。
5.接着回到物理機上面,咱們在WinDBG所在路徑下建立一個Bat文件,這裏就叫debug.bat
而後寫入如下命令保存,直接運行這個腳本便可。
windbg.exe -b -k com:port=\\.\pipe\com_1,baud=115200,pipe
爲了方便調試,能夠經過【File菜單】加載符號文件,也能夠按下【Ctrl+S】並輸入命令 srvc:\symbolshttp://msdl.microsoft.com/download/symbols 自動下載符號保存到C盤下。
到此爲止,咱們的內核調試環境已經配置並可以獨立工做了,接着咱們編寫一個簡單的驅動程序,爲了能讓程序段下來方便調試咱們在程序的開始位置加上__asm{ int 3 }
斷點而後讓程序執行後自動斷下,最終代碼以下:
#include <ntddk.h> VOID UnDriver(PDRIVER_OBJECT driver) { DbgPrint(("Uninstall Driver Is OK \n")); } NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver,PUNICODE_STRING RegistryPath) { __asm{ int 3 } // 內聯彙編添加 int 3 斷點 DbgPrint(("hello lyshark \n")); Driver->DriverUnload = UnDriver; return STATUS_SUCCESS; }
6.如今咱們啓動Windows7系統,直接輸入g命令便可讓Win7跑起來,手動添加符號文件。
按下 Ctrl +S 加入如下符號文件,最後的路徑是你驅動編譯所在路徑。
srv*c:\symbolshttp://msdl.microsoft.com/download/symbols ; C:\MyDDK\MyDDK
當Windows系統加載完成之後,拖入咱們的驅動文件wdk.sys,並經過驅動加載工具加載運行,此時Windows系統會卡死,回到WinDBG中發現已經能夠進行源碼調試了哈。
不斷嘗試,最終才成功的(qaqa~頭髮都掉光了),轉載請添加出處,謝謝!