日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

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

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

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

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

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

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

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

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

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

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

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

第三步:
然后就是開始設(shè)置工程選項,把這些代碼編譯成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最新頭文件,其實選擇wxp或者w2k目錄也是可以的,只是wnet里的頭文件最全,因為系統(tǒng)不斷進步,有些新的api只有新的頭文件里才有定義。當(dāng)然最好是選擇對應(yīng)的頭文件來編譯對應(yīng)系統(tǒng)的驅(qū)動,但是我試過用wnet編譯的驅(qū)動在2000 下也能用,因為我們一般用不到那些新添加的 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ū)動,所以把這個添加進去,放在第一項。

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

第四步:
開始進入工程設(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ū)動程序必須的)

Debug版有個特殊編譯選項 /GZ (注意是大寫的,小寫的不要刪?。﹦h掉,否則有鏈接錯誤,chkesp鏈接不上什么的。

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

然后進入Output在Entry-point symbol:
填DriverEntry

下面就是往Project Options手動增加一些鏈接選項,復(fù)制如下進去:

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

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

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


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

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

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下輸入:
_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,手動改一下:將/machine:IX86改為:/machine:amd64

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

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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多