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

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

本章對(duì)于 Windows 2000 Native API 的討論,主要集中在這些 API 和系統(tǒng)模塊之間的關(guān)系,將重點(diǎn)介紹 Windows 2000 采用的中斷機(jī)制 。Windows 2000 利用此機(jī)制將對(duì)內(nèi)核服務(wù)的請(qǐng)求從用戶模式向內(nèi)核模式傳遞 。另外,Win32K 接口和一些與 Native API 相關(guān)的主要運(yùn)行時(shí)庫也會(huì)被提及,同時(shí)還將介紹一些經(jīng)常使用的數(shù)據(jù)類型 。
有關(guān) Windows 2000 架構(gòu)的詳細(xì)討論已經(jīng)很多 。許多有關(guān) Windows NT 的討論同樣適用于 Windows 2000。《 Inside Windows NT 》( Custer 1993, Solomon 1998 )的第一、二版都是有關(guān)此方面的好書,同樣的還有《 Inside Windows 2000 》( Solomon and Russinovich 2000 ) 。
NT*() 和 Zw*() 函數(shù)集
有關(guān) Windows 2000 架構(gòu)的一個(gè)有趣的事實(shí)是:它模擬了多個(gè)操作系統(tǒng) 。Windows 2000 內(nèi)置三個(gè)子系統(tǒng)來支持 Win32 、 POSIX 和 OS/2 應(yīng)用程序 。Win32 子系統(tǒng)是最流行的一個(gè),因此它更多的被開發(fā)人員和操作系統(tǒng)所關(guān)照 。在 Windows 9x 中,Win32 接口實(shí)際上是作為整個(gè)系統(tǒng)的基礎(chǔ)結(jié)構(gòu)來實(shí)現(xiàn)的 。但是,Windows 2000 的設(shè)計(jì)卻有很大不同 。盡管 Win32 子系統(tǒng)包含一個(gè)名為 kernel32.dll 的系統(tǒng)模塊,但這并不是實(shí)際的操作系統(tǒng)內(nèi)核 。它僅僅是 Win32 子系統(tǒng)的一個(gè)基本組件 。在很多編程書籍中,Windows NT/2000 的軟件開發(fā)被簡(jiǎn)化為與 Win32 API 打交道的工作,NT 平臺(tái)暴露出的一個(gè)隱藏的事實(shí)是存在另一個(gè)更為基礎(chǔ)的調(diào)用接口: Native API。相信編寫 kernel-mode driver 或 file system driver 的開發(fā)人員已經(jīng)對(duì) Native API 非常熟悉了,因?yàn)?kernel-mode 模塊位于更低的系統(tǒng)層,在那里子系統(tǒng)是不可見的 。然而,你并不需要到驅(qū)動(dòng)程序一層才能訪問此接口 ---- 即使一個(gè)普通的 Win32 應(yīng)用程序也可在任何時(shí)候調(diào)用 Native API。這沒什么技術(shù)上的限制 ---- 僅僅是微軟不支持此種應(yīng)用程序開發(fā)模式而已 。因此,有關(guān)此話題的信息并不是很多,neither SDK nor the DDK make the Native API available to Win32 Application.
未文檔化的級(jí)別
本書中的多數(shù)東西都來自被稱為未文檔化的信息 。這通常意味著微軟沒有公開發(fā)布這些信息 。然而,未文檔化也存在幾個(gè)級(jí)別,這是因?yàn)榭赡鼙还嫉挠嘘P(guān)龐大的操作系統(tǒng)(如 Windows 2000 )的信息非常的多 。我個(gè)人的系統(tǒng)分類如下:
l 正式文檔 :這些信息來自微軟出版的書、文件或者開發(fā)工具 。大多數(shù)重要信息來自 SDK 、 DDK 和 MSDN。
l 半文檔化的( Semidocumented ) :盡管不是正式文檔,但這些信息還是可以從微軟正式發(fā)布的文件中挖掘出來的 。例如,Windows 2000 的很多函數(shù)和結(jié)構(gòu)體并沒有在 SDK 或 DDK 文檔中提到,但出現(xiàn)在一些頭文件或示列程序中 。以 Windows 2000 為例,很多重要的半文檔化信息都源自頭文件 ntddk.h 和 ntdef.h,這兩個(gè)文件都是 DDK 的一部分 。
l 未文檔化,但并沒有隱藏 :這些信息不能在任何官方文檔和開發(fā)文檔中找到,但其中的一部分對(duì)調(diào)試工具是可用的 ??蓤?zhí)行文件或符號(hào)文件中的所有符號(hào)化信息都屬于這一部分 。最好的例子是內(nèi)核調(diào)試器的 !processfIElds 和 !threadfields 命令,這兩個(gè)命令會(huì)給出兩個(gè)未文檔化的結(jié)構(gòu): EPROCESS 和 ETHREAD 的成員名稱及其偏移量 。
l 完全未文檔化的 :微軟很好的隱藏了某些信息,要獲得它們只能通過逆向工程和推理 。此類信息包含很多實(shí)現(xiàn)細(xì)節(jié)的信息,沒有人認(rèn)為 Windows 2000 開發(fā)人員需要關(guān)注它們,但是這些信息對(duì)于系統(tǒng)開發(fā)人員和開發(fā)調(diào)試軟件的人來說卻非常寶貴 。挖掘系統(tǒng)內(nèi)部的信息是非常困難的,但同樣是非常有趣的 。
本書討論的 Windows 2000 的內(nèi)部細(xì)節(jié)覆蓋了上述系統(tǒng)分類的后三個(gè) 。
系統(tǒng)服務(wù)分配器( System Service Dispatcher )
Win32 子系統(tǒng)和 Native API 之間的關(guān)系可以由 Win32 核心模塊與 Windows 2000 內(nèi)核模塊之間的依賴關(guān)系很好的解釋 。圖 2-1 展示了模塊間的依賴關(guān)系,方框表示系統(tǒng)模塊,箭頭表示模塊間的依賴關(guān)系 。如果一個(gè)箭頭從模塊 A 指向模塊 B,這表示 A 依賴于 B,即,模塊 A 調(diào)用 B 中的函數(shù) 。模塊由雙向箭頭連接,表示二者之間相互依賴 。在 圖 2-1 中,模塊: user32.dll 、 advapi32.dll 、 gdi32.dll 、 rpcrt4.dll 以及 kernel32.dll 實(shí)現(xiàn)了基本的 Win32 API。當(dāng)然,還有其他的 DLL (如 version.dll 、 shell32.dll 和 comctl32.dll )也為 Win32 API 提供支持,為了更清晰些,我省略了它們 。圖 2-1 表現(xiàn)出的一個(gè)特性非常有趣,所有的 Win32 API 調(diào)用最后都轉(zhuǎn)移到了 ntdll.dll,而 ntdll.dll 又將其轉(zhuǎn)移到了 ntoskrnl.exe。

推薦閱讀