亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wdm-driver-how to .txt

?? WDM驅動的一篇不錯的好文章
?? TXT
字號:
用VC++ 6.0來編譯WDM驅動

作者:Arthur Tu
2003年9月28日星期日

標題:用VC++ 6.0來編譯WDM驅動(限于2K DDK)

Version 1.02

如果轉貼,務必加上以下內容:
***************************************
作者:Arthur Tu
出處:驅動開發網 www.driverdevelop.com
***************************************

內容:
用VC++ 6.0來編輯(不是編譯)Driver的源文件是很不錯的選擇,尤其是搭配用Visual Assist,更方便了。編輯完了,就在VC++里面build,就更方便了。
我在M$的站點參考了些,DS生成的dsw、和build生成的log文件,都有參考。實際上,M$站點上就是根據build的log文件來改VC的Setting的。Me too;)
限于2K DDK,因為XP DDK和2003 DDK不需要VC++6.0了。并且我用VC6來build的時候,會告訴你“Compiler version not supported by Windows DDK”,不過沒有進一步去嘗試。
DDK自己帶了link,98、2K DDK似乎都是VC5的,如果像我這樣做,實際上是用VC6的link了。
不考慮source、dir、make文件。

DDK的build,其實算是一個調用nmake工具,而nmake去調相應的文件如cl.exe、link.exe等。
cl的選項設置,主要注意DDK的include路徑問題,link的選項,就是要讓link去link出一個sys而不是exe,呵呵

預備工作:
1、安裝了DDK(呵呵,說句廢話)。目錄名字最好不要帶空格。
2、建立一個workspace,把自己的c、h、rc等文件加進去。
3、Configurations,添加Checked、Free,不要Debug、Release(其實這并沒有什么必要,Checked、Debug,看你怎么叫了)。
剩下的就是改各個設置,讓VC為你build出一個sys文件了。

我們一個一個的來。所有的改動,都在Project->Setting下面。主要集中在C/C++和Link下。
1、      General,就一個,Not Using MFC;
2、      Debug,沒有什么可改的;
3、      C/C++:

1.1      General:
3.1.1      Warning level,用Level3,驅動嘛,穩定壓倒一切,而且DDK sample就是warning 3的,Warnings as errors選上;
3.1.2      Optimizations,對checked,我是Disable(Debug),省的用SoftIce的時候會有變量說Watch不了,對Free的,我是Customize,后面會講到;
3.1.3      Debug Info,Free當然是沒有了,你要加上是你的事了,Checked,我用C7;VC默認的Program Database for "Edit & Continue",和link的/driver選項沖突;
3.1.4 Preprocessor definitions,有些我并沒有弄清楚,有些可能是DS用的,大概說說。下面是我某個dsw用的。
RDRDBG, SRVDBG, FPO=0, WIN32=100, STD_CALL, CONDITION_HANDLING=1, NT_UP=1, NT_INST=0, _NT1X_=100, WINNT=1, _WIN32_WINNT=0x0400, WIN32_LEAN_AND_MEAN=1, DEVL=1, _DLL=1, _X86_=1, $(CPU)=1, NTVERSION='WDM', WINVER=0x500, NTDEBUG=ntsd,DBG=1

STD_CALL不必說了,driver的函數全部是__stdcall的,其實在其他地方有設置的。
WINVER=0x500,是因為你是for 2K的。XP的是0x501,不過沒有用,反正不能用VC6了。
_X86_=1,沒有的話,嘿嘿。Alpha等CPU不是這個值了。
DBG,free的話,就不要定義,或為0。
FPO,checked的為0,free的為1。我想應該是指Fram-Pointer Omission吧
NTDEBUG= checked ? ntsd : ntsdnodebug
WIN32_LEAN_AND_MEAN, Exclude rarely-used stuff from Windows headers,non-mfc的,用這個能減少build的時間。多些definitions也沒有關系,不影響其他的就好;)
NT_UP,為0表示是MP,多處理器的,1表示你在單處理器用的。
NT_INST, set to turn on instrumentation


根據driver類型,你可能還要加上別的preprocessor definitions,比如NDIS的IMD,就要NDIS50, NDIS_MINIPORT_DRIVER, NDIS50_MINIPORT。
3.1.5 Project Options 你只需要最后添加幾個就好了,包括/QIfdiv- /QIf /QI0f,可以在MSDN上查到。值得一提是VC產生的workspace的debug setting,默認有個GZ選項,Catch Release-Build Errors in Debug Build,編譯的時候會說error LNK2001: unresolved external symbol __chkesp,去掉就好了。
1.2      C++ Language 沒有什么說的,不要RTTI, exception handling看你用沒有用了。
1.3      Code Generation 把Calling convention用__stdcall,其余不管了(記得STD_CALL嗎);
1.4      Customize 沒有什么可說的,我一般是function-level linking,因為加了GF選項,Eliminate duplicate strings我也就不選了;
1.5      Listing Files 就Listing file type可說一下。你要想看匯編代碼的話,可以在這里改改;
1.6      Optimizations checked自然是disable了,free的,我選是Full optimization和Frame_Popinter Omission,以及Only __inline,其實這看個人了;
1.7      Precompiled Headers 這個就不說了,看MSDN吧,默認也可以;
1.8      Preprocessor Preprocessor definitions前面已經說了,重點在Additional include directories上,$(BASEDIR)incddkwdm, $(BASEDIR)incddk, $(BASEDIR)inc, $(BASEDIR)incwin98, ....inc,這是我某個dsw的,所以,BASEDIR的環境變量要設置好,我就順便用DS的工具來start VC,它恰好幫你設置了,當然你也可以直接寫上你的DDK的安裝路徑。找不到include 路徑,會引發一大堆錯誤,比如WDM.H有錯誤等。。。是很多人問的問題;

4、      好了,輪到Link了
4.1 General 選Ignore all default libraries,你可以選上generate map file, map文件有時候很有用的;Checked的當然要選上generate debug info, Link incrementally不選;Objects/library modules,添加wdm.lib等,ntoskrnl.lib好像輸出了諸如sprintf、strcat等一些函數(注1),根據driver可能還要其他的,比如ndis.lib;別忘了Output file name改成yourname.sys,可不是yourname.exe啊;)
4.2 Debug 就checked要改改,選上Debug info,我是選Both formats的;
4.3 Input 重點之一,Additional lib path,$(BASEDIR)libchki386,這是我的一個dsw用的,checked填checked lib的路徑,free填freelib的路徑
4.4 Output 在Entry-point symbol,填DriverEntry,或_DriveEntry@8,一樣;
根據link的輸出來看,Base address應該填0x10000,Stack,Reserve的應該填0x40000,Commit填0x1000;Version Info,自己填吧;
4.5 Project Options,重點,很多選項要直接在這里添加。要添加的包括:
/machine:IX86,CPU相關的
/debug:full,/debugtype:both      根據M$站點的說法,為了使WinDbg能找到你的symbol,這兩是都要的,而且還要單獨用linker來link一次,VC不認/debug:full,free就沒有這個問題了。根據M$的方法,可以這樣:寫個lnk文件,在Post-build step,再link一次,添加link @yourlnk.lnk,這個lnk文件,可以從log文件提取,如果不用WinDbg,就無所謂了;
/driver,Use this linker option to build a Windows NT kernel mode driver,MSDN說的
/IGNORE:4001,4037,4039,4065,4070,4078,4087,4089,4096,4210 查MSDN
/MERGE:_PAGE=PAGE /MERGE:_TEXT=.text /SECTION:INIT,d,DriverEntry就可以放到INIT section去。
/FULLBUILD
/RELEASE,在文件頭添加checksum
/FORCE:MULTIPLE
/OPT:REF /OPT:ICF /align:0x20 /osversion:5.00 /subsystem:native

特別注意/subsystem:native和/driver不要漏了。
一長串的/ignore可以讓你即使選warning level 4也能通過:D,warning level 4有點變態的:D


其實上面說的大部分是廢話:),大部分選項,你看看build輸出的log文件,就能知道了。這樣你也可以根據你的driver,自己添加一些必要的選項。

越寫越覺得自己無知:(

有什么不對的地方,請指出。

另外還有用個bat文件在VC下build的方法等,不多說了。


注1:2003的DDK帶了個ntstrsafe.h,有一些很方便的string函數可以用,而且保證安全,在NT、2K也可以用的,我把它貼上來。用ntoskrnl輸出的如strcpy等函數現在就沒有必要了。

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕亚洲在| 91麻豆精品国产综合久久久久久 | 色av一区二区| 亚洲视频综合在线| 91丨九色porny丨蝌蚪| 一区二区三区欧美视频| 欧美日韩综合不卡| 免费日韩伦理电影| 欧美大片免费久久精品三p| 国产一区免费电影| √…a在线天堂一区| 91免费国产在线观看| 亚洲午夜在线视频| 精品国产一二三| 成人精品免费网站| 一区二区三区在线观看欧美| 91精品在线观看入口| 国产乱对白刺激视频不卡| 9191久久久久久久久久久| 久久99国产精品成人| 国产精品卡一卡二| 欧美三级韩国三级日本三斤| 久久精品国产**网站演员| 国产拍揄自揄精品视频麻豆| 色婷婷国产精品| 久久精品国产精品青草| 中文字幕一区在线| 91精品国产91热久久久做人人| 国产久卡久卡久卡久卡视频精品| 亚洲视频一区二区在线观看| 制服.丝袜.亚洲.中文.综合| 懂色av一区二区三区免费观看| 一区二区三区不卡视频| 26uuu欧美| 欧美网站一区二区| 成+人+亚洲+综合天堂| 日韩一区欧美二区| 自拍偷拍国产精品| 精品国产伦一区二区三区观看体验| 色综合久久88色综合天天6| 免费成人在线网站| 有码一区二区三区| 亚洲国产精品高清| 51精品秘密在线观看| 99九九99九九九视频精品| 蜜桃一区二区三区在线观看| 亚洲欧美日韩在线不卡| 久久日韩粉嫩一区二区三区| 欧美三级日韩三级| 97精品国产97久久久久久久久久久久| 蜜臀91精品一区二区三区 | 欧美www视频| 欧美私模裸体表演在线观看| 成人一区二区视频| 久久国产精品72免费观看| 午夜不卡av在线| 日韩码欧中文字| 国产精品理伦片| 国产婷婷色一区二区三区在线| 欧美日韩国产片| 色狠狠色噜噜噜综合网| 粉嫩av一区二区三区| 精品一区二区三区在线播放| 亚洲成人av电影在线| 亚洲天堂中文字幕| 亚洲欧美自拍偷拍色图| 日本一区二区视频在线观看| 久久久亚洲综合| 精品久久久久久久久久久久久久久| 欧美男同性恋视频网站| 欧美日韩精品二区第二页| 在线观看欧美精品| 在线观看网站黄不卡| 91在线精品一区二区| 北条麻妃国产九九精品视频| 成人18视频日本| caoporn国产一区二区| 成人精品小蝌蚪| 成人午夜激情影院| 97精品久久久午夜一区二区三区 | 激情综合五月婷婷| 久久精品国产亚洲高清剧情介绍 | 欧美性大战久久久久久久蜜臀 | 亚洲女性喷水在线观看一区| 欧美一区二区三区精品| 欧美日韩一区二区在线观看视频| 91猫先生在线| 欧美视频一区二区在线观看| 欧美日韩在线观看一区二区| 在线亚洲高清视频| 欧美日韩国产另类一区| 制服丝袜成人动漫| 精品人伦一区二区色婷婷| 在线成人小视频| 日韩欧美一级在线播放| 久久美女高清视频| 国产精品白丝在线| 亚洲免费视频成人| 丝袜美腿亚洲一区| 国产一区久久久| 9i在线看片成人免费| 色久综合一二码| 欧美一区二区三区影视| 久久综合狠狠综合| 中文字幕一区二区三区四区 | 欧美日免费三级在线| 3atv在线一区二区三区| 久久亚洲精品国产精品紫薇| 国产精品久久三| 午夜精品在线视频一区| 久久99久久99精品免视看婷婷 | 波多野结衣91| 欧美日韩国产首页在线观看| 精品久久久三级丝袜| 中文字幕亚洲精品在线观看| 午夜私人影院久久久久| 国产精品系列在线观看| 欧美在线免费观看亚洲| 26uuu精品一区二区| 亚洲精品写真福利| 国精产品一区一区三区mba桃花 | 欧美亚洲愉拍一区二区| 日韩欧美国产一二三区| 亚洲欧美一区二区三区孕妇| 免费视频最近日韩| 色综合天天综合网国产成人综合天 | 一本色道久久加勒比精品| 欧美精品 国产精品| 日本一区二区三区免费乱视频| 亚洲va韩国va欧美va精品| 国产白丝精品91爽爽久久| 欧美日韩一区高清| 亚洲天堂久久久久久久| 国产一区二区三区最好精华液| 日本精品视频一区二区| 欧美激情自拍偷拍| 奇米色777欧美一区二区| 色哟哟一区二区三区| 久久奇米777| 另类小说综合欧美亚洲| 在线观看区一区二| 最新日韩av在线| 国产精品66部| 日韩西西人体444www| 亚洲国产中文字幕在线视频综合 | 精品福利视频一区二区三区| 亚洲已满18点击进入久久| 成人免费黄色大片| www久久久久| 久久99精品国产.久久久久| 欧美日韩一区精品| 一区二区三区四区亚洲| av影院午夜一区| 久久精品日韩一区二区三区| 久久国产三级精品| 欧美一卡二卡三卡| 午夜av一区二区| 在线看不卡av| 亚洲成人777| 欧美日韩国产高清一区| 亚洲地区一二三色| 欧美三级中文字幕在线观看| 亚洲男人电影天堂| 色综合久久久久综合体桃花网| 国产精品国产三级国产普通话蜜臀| 国产精品一区二区黑丝| 久久久青草青青国产亚洲免观| 国产一区二区三区免费播放| www成人在线观看| 国产精品一二二区| 国产天堂亚洲国产碰碰| 粉嫩高潮美女一区二区三区| 中文字幕欧美日韩一区| 波多野结衣中文字幕一区| 国产精品成人网| 91亚洲永久精品| 亚洲国产综合人成综合网站| 欧美人伦禁忌dvd放荡欲情| 五月天亚洲精品| 日韩一区二区精品葵司在线| 另类小说一区二区三区| 久久久精品国产99久久精品芒果| 国产成人在线免费观看| 国产精品免费免费| 色综合久久综合| 日韩二区三区在线观看| 久久久影院官网| av激情成人网| 一区二区三区日韩欧美精品 | 蜜桃久久久久久久| 久久综合色鬼综合色| 丰满少妇在线播放bd日韩电影| 亚洲欧美偷拍卡通变态| 欧美亚洲日本一区| 免费黄网站欧美| 国产精品网站导航| 欧美色综合久久| 国产一区二区三区四| 亚洲日本在线天堂| 日韩欧美中文字幕一区|