2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

VC6.0下直接用DDK編譯驅(qū)動(dòng)程序的方法(入門)

 ylw527 2010-09-09
csdn里只有提問和回答,個(gè)人覺得只有這個(gè)還不夠,還需要人來分享知識(shí),所以今天為了推廣自己寫的一個(gè)VC6小插件,順便分享一下用VC6直接編譯驅(qū)動(dòng)程序的心得給需要的人。全文如下:

《VC6編譯驅(qū)動(dòng)的方法(含32和64位)》

======文章開始,轉(zhuǎn)載請(qǐng)注明:潘氏軟件 - http:///dirchanger.asp =======

VC6只是一個(gè)IDE,可以方便的調(diào)用編譯器,鏈接器,頭文件,庫文件,如果編輯和編譯驅(qū)動(dòng)能集成在一起,這樣可以提高開發(fā)效率。

對(duì)于普通的Win32應(yīng)用程序,VC6已經(jīng)默認(rèn)支持了,而對(duì)于驅(qū)動(dòng)程序沒有設(shè)定好的工程向?qū)?。其?shí)驅(qū)動(dòng)程序也就是一個(gè)sys,是通過c語言寫成,所以編譯它理論上沒有問題,只是在實(shí)際操作上有點(diǎn)麻煩。

下面就來說明一下各種平臺(tái)編譯sys驅(qū)動(dòng)的方法(包括64位平臺(tái))

先看32位版本驅(qū)動(dòng)的編譯方法,首先你得準(zhǔn)備一些編譯必備工具:
1.要安裝VC6
2.安裝DDK(裝哪個(gè)呢?這個(gè)問題其實(shí)很簡單的,只是很多人不明白,裝DDK當(dāng)然是越新越好了,越新支持的平臺(tái)越多,像2000DDK你是絕對(duì)編譯不出來64位sys的,因?yàn)樗鼪]帶64位的庫和編譯器,所以我們選擇現(xiàn)在最比較新的,2003DDK(WDK也可以),支持的平臺(tái)很多,AMD64,IA64,2000,XP,2003都支持)。

好了,這下我們的系統(tǒng)已經(jīng)安裝了最強(qiáng)的開發(fā)工具VC6,最新DDK,在VC里編譯各個(gè)平臺(tái)的驅(qū)動(dòng)都沒有問題了!

開始,假設(shè)我們的DDK裝在C:\2003DDK目錄,那么我會(huì)發(fā)現(xiàn)里面有很多驅(qū)動(dòng)的例子(安裝的時(shí)候全選),我們選擇C:\2003DDK\src\wdm\usb\bulkusb作為我們的實(shí)驗(yàn)范例。

第一步:
打開VC,建立一個(gè)Win32 Application工程,然后選擇An empty Project(我用英文版的VC,建議你也換成英文版的),意思就是建立一個(gè)空的Win32工程,工程名字就叫bulkusb,點(diǎn)Finish.

第二步:
將C:\2003DDK\src\wdm\usb\bulkusb\sys(這里是驅(qū)動(dòng)代碼,另一個(gè)exe里是用戶程序,不管它)里的所有文件拷貝到bulkusb工程目錄下。然后把.h,.c,.rc 導(dǎo)入到VC里對(duì)應(yīng)的目錄里面去。

第三步:
然后就是開始設(shè)置工程選項(xiàng),把這些代碼編譯成sys了。 要編譯我們需要DDK,所以先要在vc的Tool->Options->Directories里設(shè)置一些路徑給VC調(diào)用(設(shè)置基本原則:要保證下面所有設(shè)置的路徑排在前面!)。

設(shè)置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最新頭文件,其實(shí)選擇wxp或者w2k目錄也是可以的,只是wnet里的頭文件最全,因?yàn)橄到y(tǒng)不斷進(jìn)步,有些新的api只有新的頭文件里才有定義。當(dāng)然最好是選擇對(duì)應(yīng)的頭文件來編譯對(duì)應(yīng)系統(tǒng)的驅(qū)動(dòng),但是我試過用wnet編譯的驅(qū)動(dòng)在2000 下也能用,因?yàn)槲覀円话阌貌坏侥切┬绿砑拥?api.。


設(shè)置lib路徑:
C:\2003DDK\LIB
C:\2003DDK\LIB\CRT\I386
C:\2003DDK\LIB\WNET\I386 //wnet道理和上面一樣

設(shè)置Executable File:
C:\2003DDK\BIN\X86 //這就是編譯器的路徑,包含cl.exe,link.exe的目錄,由于我們要編譯32位驅(qū)動(dòng),所以把這個(gè)添加進(jìn)去,放在第一項(xiàng)。

總的來說,只要設(shè)置好Include,Lib和編譯器,編譯什么文件都沒問題的,你也可以自己嘗試安裝最新的2003SDK,編譯Win32應(yīng)用程序成64位。

第四步:
開始進(jìn)入工程設(shè)置,先設(shè)置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,(這是驅(qū)動(dòng)程序必須的)

Debug版有個(gè)特殊編譯選項(xiàng) /GZ (注意是大寫的,小寫的不要?jiǎng)h!)刪掉,否則有鏈接錯(cuò)誤,chkesp鏈接不上什么的。

第五步:
開始設(shè)置Link頁,將輸出文件名改為sys擴(kuò)展名,
在General的Object/Library modules, 填入驅(qū)動(dòng)所調(diào)用到的幾個(gè)lib:
ntoskrnl.lib hal.lib usbd.lib wmilib.lib。

然后進(jìn)入Output在Entry-point symbol:
填DriverEntry

下面就是往Project Options手動(dòng)增加一些鏈接選項(xiàng),復(fù)制如下進(jìn)去:

/machine:IX86 /driver /subsystem:native /SECTION:INIT,d /IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221

刪除如下選項(xiàng):
/subsystem:windows
/machine代表目標(biāo)機(jī)器類型,/driver代表驅(qū)動(dòng),/subsystem:native 也是代表驅(qū)動(dòng)。

OK,大功告成,我們可以編譯32位驅(qū)動(dòng)了!


那么如果我們要編譯64位驅(qū)動(dòng)呢? 這里大家注意一下,64位有兩種,一個(gè)是AMD64,一個(gè)是IA64,要選定你的目標(biāo)平臺(tái),目前AMD64平臺(tái)最為流行.

其實(shí)編譯成64位也很簡單,只要把32位的配置稍微改一下就行了,我們以編譯AMD64位驅(qū)動(dòng)為例(你會(huì)復(fù)制VC的工程 Configurations吧,把32位的Relase,Debug各復(fù)制一份改名為ReleaseAMD64和DebugAMD64,然后在復(fù)制品的基礎(chǔ)上修改):

1.要修改兩個(gè)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下輸入:
_AMD64_,AMD64,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,NDEBUG
DebugAMD64下輸入:
_AMD64_,AMD64,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,_DEBUG

4.需要修改link頁里的Project Options,手動(dòng)改一下:將/machine:IX86改為:/machine:amd64

5.理論上到這里設(shè)置就OK了,不過還是有一個(gè)鏈接錯(cuò)誤unresolved external symbol __security_cookie ,只要在鏈接的lib里加入bufferoverflowK.lib (為什么是bufferoverflowK.lib?看這里:http://support.microsoft.com/kb/894573) 就可以了。我修改的工程范例下載:下載地址。

以上的設(shè)置大部分都可以保存在VC工程文件(*.dsp)里,除了設(shè)置的include路徑,lib路徑和編譯器路徑,這些路徑是全局的,在打開另一些工程也會(huì)留下了,就會(huì)給編譯應(yīng)用程序帶來麻煩,還需要一個(gè)一個(gè)改回去,而目錄切換器就是為了快速切換這些路徑而開發(fā)的。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多