VS2013+WDK8.1 驅動開發環境配置

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中發現已經能夠進行源碼調試了哈。

不斷嘗試,最終才成功的(qaqa~頭髮都掉光了),轉載請添加出處,謝謝!

相關文章
相關標籤/搜索