日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

1 《Undocumented Windows 2000 Secrets》翻譯 --- 第三章( 二 )


DDK 開(kāi)發(fā)環(huán)境與 Win32 模式有所不同,下面給出二者之間的一些明顯區(qū)別:
l 對(duì)于 Win32 程序員來(lái)說(shuō),主要的頭文件是 windows.h,對(duì)于內(nèi)核模式代碼來(lái)說(shuō),應(yīng)使用 ntddk.h 替代之 。
l 主進(jìn)入點(diǎn)函數(shù)叫做 DirverEntry(),而不再是 WinMain() 或 main()。列表 3-1 給出了它們的原型 。
l 不能再使用一些常見(jiàn)的 Win32 數(shù)據(jù)類(lèi)型,如 BYTE 、 Word 和 DWORD。DDK 使用 UCHAR 、 USHORT 、 ULONG 等 。不過(guò),很容易就能定義你自己喜歡的類(lèi)型,列表 3-2 給出了這樣的一個(gè)示例 。
NTSTATUS DriverEntry ( PDRIVER_OBJECT pDriverObject,
PUNICODE_STRING pusRegistryPath);
列表 3-1 DriverEntry 函數(shù)的原型
typedef UCHAR BYTE, *PBYTE;
typedef USHORT WORD, *PWORD;
typedef ULONG DWORD, *PDWORD;
列表 3-2 定義常見(jiàn)的 Win32 數(shù)據(jù)類(lèi)型
此外,還需要注意 Windows NT 4.0 和 Windows 2000 所使用的 DDK 之間的差別,有三點(diǎn)不同需要注意,如下:
l 默認(rèn)情況下,Windows NT 4.0 DDK 的主目錄叫做 DDK,而 Windows 2000 DDK 叫做 NTDDK
l 在 Windows NT 4.0 DDK 中,主要的頭文件 ntddk.h 位于主目錄之下 。而在 Windows 2000 DDK 中,該文件被移到了 NTDDKDDK 子目錄下 。
l 導(dǎo)入庫(kù)的路徑也發(fā)生了變化: libi386free 變成了 libfrei386,libi386checked 變成了 libchki386。
我不知道微軟的這種改變有什么實(shí)際意義,不過(guò)為了生活,我們還是需要了解其變化 J。
可定制的驅(qū)動(dòng)程序向?qū)?br /> 開(kāi)發(fā)內(nèi)核驅(qū)動(dòng)程序的主要困難在于 Visual C/C沒(méi)有提供此種類(lèi)型的工程向?qū)?。幸運(yùn)的是,MSDN 里有一系列不錯(cuò)的關(guān)于 Windows NT 內(nèi)核驅(qū)動(dòng)開(kāi)發(fā)的文章,是 Ruediger R.Asche. 在 1994 至 1995 年編寫(xiě)的 。其中的兩篇文章( Asche 1995a,1995b )詳細(xì)說(shuō)明了如何在 Visual C/C中加入自定義的驅(qū)動(dòng)程序向?qū)?,這些文章給了我很大的幫助,盡管原始向?qū)У妮敵鑫募荒軡M足我的所有需求,但這是一個(gè)很好的開(kāi)始 。我提供的內(nèi)核驅(qū)動(dòng)向?qū)⒒?Ruediger Asche 的原始向?qū)Мa(chǎn)生的輸出文件 。
我提供的驅(qū)動(dòng)向?qū)У乃性创a位于本書(shū)光盤(pán)的 srcw2k_wiz 目錄 。通過(guò)閱讀這些代碼,你會(huì)發(fā)現(xiàn)它實(shí)際的標(biāo)題“ SBS Windows 2000 Code Wizard ” 。事實(shí)上,這是一個(gè)一般性的 Windows 2000 程序骨架生成器,該生成器可以產(chǎn)生多種類(lèi)型的程序,包括 Win32 DLL 和應(yīng)用程序 。不過(guò),光盤(pán)中的配置文件針對(duì)內(nèi)核驅(qū)動(dòng)開(kāi)發(fā)做了一定的修改 ?;旧蟻?lái)說(shuō),我提供的向?qū)且粋€(gè)文件轉(zhuǎn)換器,它讀取一組文件,然后按照一些簡(jiǎn)單的規(guī)則將它們進(jìn)行轉(zhuǎn)換,最后將結(jié)果寫(xiě)入另一組文件中 。輸入文件是模板,輸出文件是 C 工程文件 。通過(guò)修改模板文件,該向?qū)Э梢宰兂梢粋€(gè) DLL 向?qū)У鹊?。必須提供 7 個(gè)模板文件(如果丟失了某一個(gè),會(huì)產(chǎn)生錯(cuò)誤):
l 擴(kuò)展名為 .tw 的文件是 workspace 模板,此種文件將會(huì)被保存為 Visual Studio 的工程文件 .dsw。
l 擴(kuò)展名為 .tp 的文件是工程模板,此種文件將被保存為 .dsp 文件 。工程文件由于之關(guān)聯(lián)的 workspace 文件引用,工程文件還包含生成工程的所有配置選項(xiàng) 。
l 擴(kuò)展名為 .tc 、 .th 、 .tr 和 .td 的文件都是 C 代碼文件,這些文件最后會(huì)變成相應(yīng)的 .c 、 .h 、 .rc 和 .def 文件 。
l 擴(kuò)展名為 .ti 的是 icon 文件,該文件會(huì)被直接保存為 .ico 文件 。
這七個(gè)文件是一個(gè)新工程所必需的 。.def 文件以一種較老風(fēng)格的方法從 DLL 中導(dǎo)出 API 函數(shù),不過(guò)我更喜歡 __declspec(dllexport) 方式 。因?yàn)轵?qū)動(dòng)程序通常不導(dǎo)出函數(shù),所以我省略了 .td 模板,導(dǎo)致的結(jié)果是,在開(kāi)始時(shí),向?qū)?huì)報(bào)告一個(gè)錯(cuò)誤 。我還省略了資源腳本和 icon 文件,不過(guò)經(jīng)驗(yàn)告訴我,最好提供它們 。采用的轉(zhuǎn)換規(guī)則也非常簡(jiǎn)單,僅包含一個(gè)很短的字符串替換列表 。在掃描模板文件時(shí),轉(zhuǎn)換器查找以 % 號(hào)開(kāi)始的轉(zhuǎn)義符 。當(dāng)它找到后,會(huì)根據(jù) % 后的字符來(lái)決定執(zhí)行什么樣的動(dòng)作 。表 3-1 列出了驗(yàn)證過(guò)的轉(zhuǎn)義符 。

推薦閱讀