乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      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?。﹦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)論公約

        類似文章 更多