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
配置VS+WDK 驅動開發環境
首先你需要先安裝好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中發現已經可以進行源碼調試了哈。
原創作品,轉載請加出處,您添加出處是我創作的動力!