VC6 0下直接用DDK編譯驅動程式的方法

2021-06-08 07:13:54 字數 3270 閱讀 1829

csdn裡只有提問和回答,個人覺得只有這個還不夠,還需要人來分享知識,所以今天為了推廣自己寫的乙個vc6小外掛程式,順便分享一下用vc6直接編譯驅動程式的心得給需要的人。全文如下:

《vc6編譯驅動的方法(含32和64位)》

*****=

- *****==

vc6只是乙個ide,可以方便的呼叫編譯器,鏈結器,標頭檔案,庫檔案,如果編輯和編譯驅動能整合在一起,這樣可以提高開發效率。

對於普通的win32應用程式,vc6已經預設支援了,而對於驅動程式沒有設定好的工程嚮導。其實驅動程式也就是乙個sys, 是通過c語言寫成,所以編譯它理論上沒有問題,只是在實際操作上有點麻煩。

下面就來說明一下各種平台編譯sys驅動的方法(包括64位平台)

先看32位版本驅動的編譯方法,首先你得準備一些編譯必備工具:

1.要安裝

vc62.安裝ddk(裝哪個呢?這個問題其實很簡單的,只是很多人不明白,裝

ddk當然是越新越好了,越新支援的平台越多,像2000ddk你是絕對編譯不出來64位sys的,因為它沒帶64 位的庫和編譯器,所以我們選擇現在最比較新的,2003ddk(wdk也可以),支援的平台很多,amd64,ia64,2000,xp,2003都支援)。

好了,這下我們的系統已經安裝了最強的開發工具vc6,最新ddk,在vc裡編譯各個平台的驅動都沒有問題了!

開始,假設我們的ddk裝在c:\2003ddk目錄,那麼我會發現裡面有很多驅動的例子(安裝的時候全選),我們選擇c:\2003ddk\src \wdm\usb\bulkusb作為我們的實驗範例。

第一步:

finish.

第二步:

將c:\2003ddk\src\wdm\usb\bulkusb\sys(這裡是驅動**,另乙個exe裡是使用者程式,不管它)裡的所有檔案拷貝到bulkusb工程目錄下。然後把.h,.c,.rc 匯入到vc裡對應的目錄裡面去。

第三步:

然後就是開始設定工程選項,把這些**編譯成sys了。要編譯我們需要ddk,所以先要在vc的tool->options->directories裡設定一些路徑給vc呼叫(設定基本原則:要

保證下面所有設定的路徑排在前面!)。

設定include路徑:

c:\2003ddk\inc

c:\2003ddk\inc\crt

c:\2003ddk\inc\wnet

c:\2003ddk\inc\ddk\wnet

c:\2003ddk\inc\ddk\wdm\wnet

要按這樣的順序新增。注意這裡的wnet目錄了嗎?這就是2003最新標頭檔案,其實選擇wxp或者w2k目錄也是可以的,只是wnet裡的標頭檔案最全,因為系統不斷進步,有些新的api只有新的標頭檔案裡才有定義。當然最好是選擇對應的標頭檔案來編譯對應系統的驅動,但是我試過用wnet編譯的驅動在2000 下也能用,因為我們一般用不到那些新新增的api.。

設定lib路徑:

c:\2003ddk\lib

c:\2003ddk\lib\crt\i386

c:\2003ddk\lib\wnet\i386 //wnet

道理和上面一樣

設定executable file:

c:\2003ddk\bin\x86 //這就是編譯器的路徑,包含cl.exe,link.exe的目錄,由於我們要編譯32位驅動,所以把這個新增進去,放在第一項。

總的來說,只要設定好include,lib

和編譯器,編譯什麼檔案都沒問題的,你也可以自己嘗試安裝最新的2003sdk,編譯win32應用程式成64 位。

第四步:

開始進入工程設定,先設定c/c++,在preprocesser definitions裡輸入如下字串:

release

下輸入:

_x86_=1,i386=1,std_call,win32=100,_win32_winnt=0x0501,winver=0x0501,ndebug

debug 下輸入:

_x86_=1,i386=1,std_call,win32=100,_win32_winnt=0x0501,winver=0x0501,_debug

在code generation裡的calling convention用__stdcall,(這是驅動程式必須的)

debug

版有個特殊編譯選項/gz (注意是大寫的,小寫的不要刪!)刪掉,否則有鏈結錯誤,chkesp鏈結不上什麼的。

第五步:

開始設定link頁,將輸出檔名改為sys副檔名,

在general的object/library modules,填入驅動所呼叫到的幾個

lib:

ntoskrnl.lib hal.lib usbd.lib wmilib.lib。

然後進入output在entry-point symbol:

填driverentry

下面就是往project options手動增加一些鏈結選項,複製如下進去:

/machine:ix86 /driver /subsystem:native /section:init,d /ignore:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221

刪除如下選項:

/subsystem:windows

/machine

代表目標機器型別,/driver代表驅動,/subsystem:native 也是代表驅動。

ok,大功告成,我們可以編譯32位驅動了!

那麼如果我們要編譯64位驅動呢?這裡大家注意一下,64位有兩種,乙個是amd64,乙個是ia64,要選定你的目標平台,目前amd64平台最為流行

.其實編譯成64 位也很簡單,只要把32位的配置稍微改一下就行了,我們以編譯amd64位驅動為例(你會複製vc的工程configurations吧,把32位的relase,debug各複製乙份改名為releaseamd64和debugamd64,然後在複製品的基礎上修改):

1.要修改兩個lib路徑:

c:\2003ddk\lib\crt\i386

改為:c:\2003ddk\lib \crt\amd64

c:\2003ddk\lib\wnet\i386 改為:c:\2003ddk\lib\wnet\amd64

2. 修改編譯器路徑:

c:\2003ddk\bin\x86

改為:c:\2003ddk\bin\win64\x86\amd64

c:\2003ddk\bin\x86 //

這句也要存在

3.修改c/c++裡的preprocesser definitions為:

releaseamd64

下輸入

用VC6 0編譯驅動程式的工程設定方法

用vc6.0編譯驅動程式的工程設定方法 vc6.0編譯驅動程式的工程設定 一 編譯nt式驅動 1 建立乙個win32應用程式工程。2 修改工程屬性。project setting c c 中的project options內容替換成 nologo gz mld w3 wx z7 od d win32...

配置VC 6 0下驅動程式編譯環境的步驟

作業系統 vmware 6.0 windows xp sp1 sp2 ddk版本 windows ddk 3790.1830 編譯環境 microsoft visual c 6.0 with sp6 2 build configurations去掉debug和release,新增mydriver c...

驅動WDK7600在VC6 0下的編譯開發配置環境

1.安裝wdk7600和vc6.0 2.vc6.0設定include lib executable目錄 include包含部分 lib連線庫包含部分 executable包含部分 c c 選項的option填寫 debug nologo gz mt w3 wx z7 od d x86 1 d i38...