1. 程式人生 > >Windows7+WDK+VS2010+VisualDDK驅動開發環境搭建

Windows7+WDK+VS2010+VisualDDK驅動開發環境搭建

1.  安裝VS2010,WDK7.60(GRMWDK_EN_7600_1)

2.  新建VC 控制檯專案(選擇為空專案)

1_thumb1

3.  新建專案配置“driver” ,點選下拉按鈕-點選(配置管理器)

6_thumb5

輸入名稱(driver)點選確定就可以了,其他的不要動哦!

3_thumb3

完成後的效果!

2_thumb3

點選確定按鈕之後呈現出來的畫面

4_thumb6

滑鼠右擊新建的driver屬性,會彈出以下視窗!

5_thumb1 4.  設定VC++路徑

<我把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) 高階 

     呼叫約定  __stdcall(/Gz)                                       //必選   7.  連結器設定 常規      啟用增量連結:否(/INCREMENTAL:NO)                           //建議 選上      忽略匯入庫:是                                                  // 可選       ( 設定為此值時,必須在附加庫目錄中加: E:\WinDDK\7600.16385.1\lib\win7\i3865  這樣專案就不會依賴 IDE 環境的設 置) 

     如果否  (  設定為此值時,將依賴  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; }

如果沒有報錯那麼恭喜你配置成功了!