Windows7+WDK+VS2010+VisualDDK驅動開發環境搭建
1. 安裝VS2010,WDK7.60(GRMWDK_EN_7600_1)
2. 新建VC 控制檯專案(選擇為空專案)
3. 新建專案配置“driver” ,點選下拉按鈕-點選(配置管理器)
輸入名稱(driver)點選確定就可以了,其他的不要動哦!
完成後的效果!
點選確定按鈕之後呈現出來的畫面
滑鼠右擊新建的driver屬性,會彈出以下視窗!
<我把wdk安裝在E盤下> a. 配置可執行檔案目錄:E:\WinDDK\7600.16385.1\bin\x86; b. 配置包含目錄:E:\WinDDK\7600.16385.1\inc\ddk E:\WinDDK\7600.16385.1\inc\crt E:\WinDDK\7600.16385.1\inc\api c. 配置庫目錄: E:\WinDDK\7600.16385.1\lib\win7\i3865
新建C/C++檔案 不然無C/C++設定選項
<剛開始我們建立了一個空的專案所以專案裡沒有c++檔案,現在要做的就是在空的專案-原始檔-新增一個新建項c++檔案>
常規 目標副檔名:.sys //必選
6. 設定C/C++選項 常規選項卡 1 除錯資訊格式(C7 相容(/Z7) //可選 2 警告等級 (2 級(/W2) //可選 3 將警告視為錯誤 (是(/wx) //可選 優化選項卡 優化(禁用/Od) //可選 前處理器 前處理器定義:WIN32=100;_X86_=1;WINVER=0x501;DBG=1 //必選 程式碼生成
基本執行時檢查:預設值 //可選 執行時庫:多執行緒除錯(/MTd) 或 多執行緒(/MT) //建議選 <本人選擇的是多執行緒除錯(/MTd)> 緩衝區安全檢查:否 //可選 (可避免出現 LINK : error LNK2001: 無法解析外部符號 __security_cookie) 高階
如果否 ( 設定為此值時,將依賴 IDE 的環境的相關設定 ) 輸入 附加依賴項 ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB //必選
//NT式驅動 ntoskrnl.lib WDM式驅動 wdm.lib ( HalXXX 函式在Hal.lib, WmiXXX 函式在 wmilib.lib , NdisXXX函式在 ndis.lib ) ( 必要時需要增加微軟的標準庫 MSVCRT.LIB MSVCRTD.LIB(除錯庫) LIBCMT.LIBIBCMTD.LIB(除錯庫) ) ( 如果原始碼中有 source 檔案,那麼該檔案的 TARGETLIBS 欄位會列出該項 目需要的庫 )
忽略所有預設庫: 是 (/NODEFAULTLIB) //必選
清單檔案: 啟用使用者賬戶控制(UAC) 否 //必選
不然會出現 >LINK : fatal error LNK1295: “/MANIFESTUAC”與“/DRIVER”規範不相容;連結時不使用“/MANIFESTUAC” 除錯: 生成除錯資訊 是(/DEBUG) //可選 生成映像檔案:是(/MAP) //可選 映像檔名:$(TargetDir)$(TargetName).map //可選 系統(System) 子系統: 控制檯(/SUBSYSTEM:CONSOLE) //必選 堆疊保留大小:4194304 //可選 堆疊提交大小: 4096 //可選 驅動程式: 驅動程式(/DRIVER) //必選 高階: 入口點:DriverEntry //必選 隨機基址:清空 //把框裡的資料刪掉。(yes也不是no也不是就是要一個乾乾淨淨的文字框) //必選 不然會出現 e:\xxx.sys : fatal error LNK1295: “/DYNAMICBASE”與“/DRIVER”規範不相容;連結時不使用“/DYNAMICBASE”
資料執行保護(DEP): 清空 //把框裡的資料刪掉。(yes也不是no也不是就是要一個乾乾淨淨的文字框) //必選 不然會出現 e:\xxx.sys : fatal error LNK1295: “/NXCOMPAT:NO”與“/DRIVER”規範不相容;連結時不使用“/NXCOMPAT:NO”
設定效應和:是(/RELEASE) //可選
基址:0x10000 //建議選上 命令列:/SECTION:INIT,D /IGNORE:4078 (建議不要寫進去,會報錯!)
最後給出一個超級簡單的程式碼來測試一下我們配置的是否成功??
#include "ntddk.h"
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath) { return STATUS_UNSUCCESSFUL; }
如果沒有報錯那麼恭喜你配置成功了!