VC6.0 + WDK 7600.16385.1 開發環境配置
之前用著VisualDDK挺爽的,可以直接用VS來除錯,但是隻支援Visual2005以上版本,另外對VS2008中文旗艦版的支援不好,被迫無奈我下了個VS2010。無可置疑Visual DDK用起來真的挺爽的,起碼能省去配置環境的時間。另外,搭配Visual KD雙機除錯,速度比用傳統的串列埠除錯速度快多了。
今天,想用VC6.0來寫下驅動程式碼,VC6.0畢竟小巧靈活點,但奈何VisualDDK不大支援。好吧,只得自己配置一下環境了。參考了下網上其他的文章,結合自己的實踐、理解終於搞定了。
VC6.0 + WDK 7600.16385.1,這裡主要是為了開發XP下的NT式驅動程式,我這裡就主要測試了這個,其他的類似。
1. 安裝好VC6和WDK,先後順序無關。
從開始選單找到WDK的程式目錄(Windows Driver Kits),進入相關的編譯環境,這裡選擇“Windows XP Checked Build Environment”,輸入命令"build",此時WDK將會把自己進行編譯,大約需要1分鐘。
2. VC6設定Include/Lib/Executable目錄。
進入 選單欄-->工程-->選項-->目錄
PS:設定為自己需要編譯的平臺的各個目錄即可, Include要確保找到ntddk.h等,Lib與Include對應,Executable 要確保能找到cl.exe等。
例如XP平臺下設定為:
“Include Files”包含部分:
D:\WinDDK\7600.16385.1\inc\ddk
D:\WinDDK\7600.16385.1\inc\api
D:\WinDDK\7600.16385.1\inc\crt
嗯,還是說下吧CRT是C Runtime Library的簡寫
“Library Files”包含部分:
D:\WinDDK\7600.16385.1\lib\wxp\i386
D:\WinDDK\7600.16385.1\lib\Crt\i386
PS:這裡選擇自己平臺的庫吧,WXP表示XP的,I386是CPU架構。
“可執行檔案”包含部分:
D:\WinDDK\7600.16385.1\bin\x86\x86
注意,將剛才新增的這些目錄要將其移動最前面,按圖示的上箭頭就行了,否則可能會出現各種問題。
3. 儲存配置,現在給這個空工程建一個c檔案,複製以下內容:
要是一個個改,要改的地方不少,我們就來直接點吧。嗯,說明下,下面的配置的是除錯版本Check。
清空C/C++和Link下面的Option文字框,按下面的填寫。
C/C++選項的Option填寫:
/nologo /Gz /MLd /W3 /WX /Z7 /Od /DWIN32=100 /D _X86_=1 /D WINVER=0x500 /D DBG=1 /Fo"MyDriver_Check/"/Fd"MyDriver_Check/" /FD /c
說明:
/nologo:表示不顯示編譯的版權資訊
/Gz:預設函式呼叫採用標準呼叫方式,即__stdcall
/W3: 採用第三級的警告模式。
/WX: 將警告資訊變成錯誤資訊,最大程度地保證了程式碼的可靠性。程式碼執行在核心模式裡,沒有差錯機制,出錯就會藍屏,這個選項很有必要。
/Z7:用C7模式產生除錯資訊。VC預設的Program Database for “Edit & Continue” 和link的/driver 選項衝突。
/Od:關閉除錯模式。驅動程式不需要像Win32的應用程式那樣用VC偵錯程式除錯,需要用核心偵錯程式才能除錯。
/D WIN32=100 /D _X86_=1 /D WINVER=0x500 /D DBG=1:定義一些巨集,必需的。
/Fo"MyDriver_Check/":設定中間程式碼的生成路徑。
/Fd"MyDriver_Check/":設定pdb檔案的目錄位置。pdb檔案包含了大量的符號,對除錯驅動程式的時候很有幫助。
/FD:生成檔案依賴。
/c:只進行編譯,而不連線。
LINK選項的Option填寫:
NT式驅動:
ntoskrnl.libhal.lib usbd.lib /nologo /base:"0x10000" /stack:0x400000,0x1000/entry:"DriverEntry" /incremental:no/pdb:"MyDriver_Check/Driver1.pdb"/map:"MyDriver_Check/Driver1.map" /debug /machine:I386 /nodefaultlib/out:"MyDriver_Check/Driver1.sys" /subsystem:native /driver/SECTION:INIT,D /IGNORE:4078
說明:
ntoskrnl.lib hal.lib usbd.lib:qudong 驅動程式需要連結的庫檔案。根據需要增減。
/nologo:表示不顯示連結的版權資訊。
/base:"0x10000":載入驅動程式的基址。
/stack:0x400000,0x1000:設定使用的堆疊大小。
/entry:"DriverEntry":入口函式的地址,此函式必須是符號標準函式呼叫的。
/incremental:no:非遞增式的連結。
/pdbtype:sept 選項可以使得除錯資訊各自儲存在各自的PDB檔案中,這樣可以加快連結速度,不利的是除錯資訊分散,除錯時需要多個PDB檔案。[可選]
/pdb:"MyDriver_Check/Driver1.pdb":設定pdb檔案的檔名。
/map:"MyDriver_Check/Driver1.map":設定map檔案的檔名。[可選]
/debug:以Deubg方式連結。
/machine:I386:產生的程式碼是386相容平臺的。
/nodefaultlib:不使用預設庫。
/out:"MyDriver_Check/Driver1.sys":輸出的最終程式的名稱。
/subsystem:native:子系統是核心系統。
/driver:編譯驅動程式。
/SECTION:INIT,D:將INIT的段設定為可拋棄的。
/IGNORE:4078:忽略4078號警告錯誤。
WDN式驅動:
ntoskrnl.libhal.lib usbd.lib /nologo /base:"0x10000" /stack:0x400000,0x1000/entry:"DriverEntry" /subsystem:console /incremental:no /pdb:"MyDriver_Check/Driver1.pdb"/debug /machine:I386 /nodefaultlib /out:" MyDriver_Check/Driver1.sys"/subsystem:native /driver /SECTION:INIT,D /IGNORE:4078
4. 儲存配置,測試。以NT式驅動為例。
現在給這個空工程建一個c檔案,複製以下內容:
#include<ntddk.h>
NTSTATUSDriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
NTSTATUS status = STATUS_UNSUCCESSFUL;
return status;
}
如果是CPP檔案,則拷貝下面這段:
#ifdef__cplusplus
extern"C"
{
#endif
#include<NTDDK.h>
#ifdef__cplusplus
};
#endif
extern “C” NTSTATUSDriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
NTSTATUS status = STATUS_UNSUCCESSFUL;
return status;
}
編譯通過則配置成功!!!
編譯通過後,在程式原始碼目錄的MyDriver_Check\子目錄下會生成相關的驅動程式
每次新建工程都得重新配置,但可以配置好一個工程,以後寫程式碼,拷貝這個工程,然後在上面做修改。
至此,配置完成。
相關文章
- 開發環境配置開發環境
- emacs開發環境配置(4)——rust開發環境Mac開發環境Rust
- 配置開發環境、生成環境、測試環境開發環境
- react 配置開發環境React開發環境
- js開發環境配置JS開發環境
- Java開發環境配置Java開發環境
- weex開發環境配置開發環境
- Arduino開發環境配置UI開發環境
- Ubuntu開發環境配置Ubuntu開發環境
- Docker配置PHP開發環境DockerPHP開發環境
- MacOS 配置 Flutter 開發環境MacFlutter開發環境
- MacOS PHP 開發環境配置MacPHP開發環境
- (二) electron 開發環境配置開發環境
- Mac 基本開發環境配置Mac開發環境
- Webpack 配置 React 開發環境WebReact開發環境
- 配置Groovy開發環境(Windows)開發環境Windows
- Libgdx開發環境配置開發環境
- archlinux配置安卓開發環境Linux安卓開發環境
- Flutter開發環境配置(MAC版)Flutter開發環境Mac
- Nginx開發環境跨域配置Nginx開發環境跨域
- mac pro配置php開發環境MacPHP開發環境
- Mac 配置 Flutter 安卓開發環境MacFlutter安卓開發環境
- Mac OS配置QT開發環境MacQT開發環境
- Webpack(開發、生產環境配置)Web
- 驅動篇——開發環境配置開發環境
- 我的Ubuntu 開發環境配置Ubuntu開發環境
- webpack配置React開發環境(上)WebReact開發環境
- React + Typescript + Webpack 開發環境配置ReactTypeScriptWeb開發環境
- 開發環境配置 - Linux(Ubuntu)開發環境LinuxUbuntu
- Eclipse配置PHP開發環境EclipsePHP開發環境
- 配置豪華的 Windows 開發環境Windows開發環境
- vs code配置Python開發環境Python開發環境
- 安裝與配置Flutter開發環境Flutter開發環境
- vue-cli開發環境代理配置Vue開發環境
- Golang(go語言)開發環境配置Golang開發環境
- windows 10 配置 docker lnmp 開發環境WindowsDockerLNMP開發環境
- 【翻譯】 Flutter——配置Engine開發環境Flutter開發環境
- Flutter系列:1.開發環境配置Flutter開發環境