標籤:驅動開發 windows 7 vs2010
1.安裝VS2010;官網下載WDK(就是早期的DDK),解壓安裝(GRMWDK_EN_7600_1);
2.在VS2010中建立空項目,項目可以命名為“driver”;
3.配置解決方案,增加一個叫做driver的配置方案;
4.配置工程屬性;
這個時候需要輸入自己的WDK的安裝路徑,我的是這樣的:
可執行檔目錄:G:\WinDDK\7600.16385.1\bin\x86
包含檔案(3個):G:\WinDDK\7600.16385.1\inc\api
G:\WinDDK\7600.16385.1\inc\crt
G:\WinDDK\7600.16385.1\inc\ddk
庫目錄:G:\WinDDK\7600.16385.1\lib\win7\i386
5. 建立一個C++檔案;
6. 設定工程屬性;
常規:目標檔案副檔名 .sys
c/c++下拉式功能表中:
前置處理器
前置處理器定義:WIN32=100;_X86_=1;WINVER=0x501;DBG=1 //必選
進階
呼叫慣例 __stdcall(/Gz) //必選
常規選項卡
1 調試資訊格式(C7 相容(/Z7) //可選
2 警告層級 (2 級(/W2) //可選
3 將警告視為錯誤 (是(/wx) //可選
最佳化選項卡
最佳化(禁用/Od) //可選
代碼產生
啟用最小重建:否 //可選
基本運行時檢查:預設值 //可選
執行階段程式庫:多線程調試(/MTd) 或 多線程(/MT) //建議選 <本人選擇的是多線程調試(/MTd)>
緩衝區安全檢查:否 //可選
(可避免出現 LINK : error LNK2001: 無法解析外部符號 __security_cookie)
連結器當中:
常規
啟用增量連結:否(/INCREMENTAL:NO) //建議 選上
忽略匯入庫:是 // 可選
( 設定為此值時,必須在附加庫目錄中加: G:\WinDDK\7600.16385.1\lib\win7\i386 這樣項目就不會依賴 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): 清空 //必選
不然會出現 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;
}
參考文獻:
http://www.cnblogs.com/xlhblog/archive/2011/03/22/1991785.html
http://www.cppblog.com/guojingjia2006/archive/2011/03/19/142211.html
Windows 7 配置驅動開發環境(使用WDK)