新建一個(gè)空的win32控制臺(tái)程序
1、選(文件→新建→項(xiàng)目→Visual C++項(xiàng)目→win32→win32控制臺(tái)項(xiàng)目)創(chuàng)建一個(gè)
填寫上名稱event然后按確定
在彈出的win32應(yīng)用程序向?qū)Ю?/span> 選應(yīng)用程序設(shè)置 →附加選項(xiàng) 勾選空項(xiàng)目→完成。
二 、 選項(xiàng)目菜單→添加現(xiàn)有項(xiàng)→添加所有驅(qū)動(dòng)相關(guān)的*.h,*.c,*.cpp,*.rc之類的文件。
選工具(T)→選項(xiàng)(O)....→項(xiàng)目→VC++目錄→
1、在可執(zhí)行文件目錄中添加:
D:/WINDDK/3790.1830/BIN/X86 //VS2003(沒測(cè)),VS2005(沒測(cè)),VS2008內(nèi)不需要
2、在包含文件目錄添加如下路徑
D:/WINDDK/3790.1830/inc/wxp
D:/WINDDK/3790.1830/inc/crt (可選)
D:/WINDDK/3790.1830/inc/ddk/wxp
D:/WINDDK/3790.1830/inc/ddk/wdm/wxp
3、在庫文件目錄中添加:
D:/WINDDK/3790.1830/LIB/WXP/I386
項(xiàng)目event屬性設(shè)置
新建項(xiàng)目配置check //必選
(一)C/C++屬性設(shè)置
常規(guī)選項(xiàng)卡
1調(diào)試信息格式(C7兼容(/Z7) //可選
2警告等級(jí) (2級(jí)(/W2) //可選
3將警告視為錯(cuò)誤(是(/wx) //可選
優(yōu)化選項(xiàng)卡
1優(yōu)化(禁用/Od) //可選
預(yù)處理器
預(yù)處理器定義:WIN32=100;_X86_=1;WINVER=0x501;DBG=1 //必選
代碼生成
啟用最小重新生成:否 //可選
基本運(yùn)行時(shí)檢查:默認(rèn)值//可選
運(yùn)行時(shí)庫:多線程調(diào)試(/MTd) 或 多線程(/MT) //建議選
緩沖區(qū)安全檢查:否 //可選
(可避免出現(xiàn)LINK : error LNK2001: 無法解析外部符號(hào)__security_cookie)
高級(jí)
調(diào)用約定__stdcall(/Gz) //必選
鏈接器
常規(guī):
輸出文件:$(OutDir)/$(ProjectName).sys //必選
啟用增量鏈接:否(/INCREMENTAL:NO) //建議選上
忽略導(dǎo)入庫:是//可選( 設(shè)置為此值時(shí),必須在附加庫目錄中加:D:/WINDDK/3790.1830/lib/wxp/i386 ,這樣項(xiàng)目就不會(huì)依賴IDE環(huán)境的設(shè)置) 否( 設(shè)置為此值時(shí),將依賴IDE 的環(huán)境的相關(guān)設(shè)置)
輸入:
附加依賴項(xiàng)ntoskrnl.lib Hal.lib wdm.lib wdmsec.lib wmilib.lib ndis.lib MSVCRT.LIB LIBCMT.LIB //必選其12
//NT式驅(qū)動(dòng)ntoskrnl.lib WDM式驅(qū)動(dòng) wdm.lib
( HalXXX函數(shù)在Hal.lib,WmiXXX函數(shù)在wmilib.lib ,NdisXXX函數(shù)在ndis.lib )
( 必要時(shí)需要增加微軟的標(biāo)準(zhǔn)庫MSVCRT.LIB MSVCRTD.LIB(調(diào)試庫) LIBCMT.LIBIBCMTD.LIB(調(diào)試庫) )
( 如果源碼中有source 文件,那么該文件的TARGETLIBS 字段會(huì)列出該項(xiàng)目需要的庫)
忽略所有默認(rèn)庫:是(/NODEFAULTLIB)
清單文件:
啟用用戶賬戶控制(UAC) 否//必選 不然會(huì)出現(xiàn) >LINK : fatal error LNK1295: “/MANIFESTUAC”與“/DRIVER”規(guī)范不兼容;鏈接時(shí)不使用“/MANIFESTUAC”
調(diào)試:
生成調(diào)試信息 是(/DEBUG) //可選
生成映像文件:是(/MAP) //可選
映像文件名:$(TargetDir)$(TargetName).map //可選
系統(tǒng)(System):
子系統(tǒng):控制臺(tái)(/SUBSYSTEM:CONSOLE) //必選
堆棧保留大小:4194304 //可選
堆棧提交大小:4096 //可選
驅(qū)動(dòng)程序: 驅(qū)動(dòng)程序(/DRIVER) //必選
高級(jí):
入口點(diǎn):DriverEntry //必選
隨機(jī)基址:默認(rèn)值 //必選 不然會(huì)出現(xiàn) 1>G:/event2008/check/event2008.exe : fatal error LNK1295: “/DYNAMICBASE”與“/DRIVER”規(guī)范不兼容;鏈接時(shí)不使用“/DYNAMICBASE”
數(shù)據(jù)執(zhí)行保護(hù)(DEP): 默認(rèn)值//必選 不然會(huì)出現(xiàn)G:/event2008/check/event2008.sys : fatal error LNK1295: “/NXCOMPAT:NO”與“/DRIVER”規(guī)范不兼容;鏈接時(shí)不使用“/NXCOMPAT:NO”
設(shè)置效應(yīng)和:是(/RELEASE) //可選
基址:0x10000 //建議選上
命令行”->附加選項(xiàng):
添加開關(guān):/SECTION:INIT,D /IGNORE:4078 //建議填上
可以避免以下錯(cuò)誤提示
LINK : warning LNK4078: 找到多個(gè)“INIT”節(jié),它們具有不同的屬性(E2000020)
LINK : error LNK2001: 無法解析的外部符號(hào)__load_config_used
五.編譯,鏈接。
一些要修改DDK例子源碼方能成功的問題,目前不知道什么選項(xiàng)可以不改:
源碼中的關(guān)鍵字try 要改為__try , except 要改為__except .