




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、驅(qū)動對象與設(shè)備對象 DRIVER_OBJECT和DEVICE_OBJECT的關(guān)系DRIVER_OBJECT是驅(qū)動程序在內(nèi)核中的數(shù)據(jù)結(jié)構(gòu),每個驅(qū)動程序有唯一DRIVER_OBJECT,IO管理器使用驅(qū)動程序?qū)ο蟠砻總€設(shè)備驅(qū)動程序,驅(qū)動程序描述了驅(qū)動程序的載入到內(nèi)存什么地方,驅(qū)動程序的大小和它的主要入口點(MajorFunction數(shù)組);驅(qū)動程序?qū)ο笥幸粋€DeviceObject域指向一個設(shè)備對象鏈表,每個設(shè)備對象代表一個設(shè)備。DEVICE_OBJECT是物理設(shè)備或邏輯設(shè)備在內(nèi)核中的數(shù)據(jù)結(jié)構(gòu),跟這個概念相關(guān)的有PDO和FDO;PDO對應(yīng)于具體的硬件設(shè)備,每個硬件設(shè)備對應(yīng)一個PDO,而一個PDO
2、可以對應(yīng)多個FDO;PDO和FDO都是DEVICE_OBJECT的實體;同一個設(shè)備驅(qū)動程序?qū)ο笙碌乃性O(shè)備通過NextObject域連接成一個鏈表(即上述驅(qū)動程序設(shè)備對象的一個域);AttachedDevice域是針對“早期”驅(qū)動的(Window NT4以前的版本,在以后的版本中也可以正常使用);DriverObject域指向與該設(shè)備相關(guān)的驅(qū)動程序?qū)ο蟆_@里所說的驅(qū)動對象是一種數(shù)據(jù)結(jié)構(gòu), 在DDK 中名為DRIVER_OBJECT。任何驅(qū)動程序都對應(yīng)一個DRIVER_OBJECT.如何獲得本人所寫的驅(qū)動對應(yīng)的DRIVER_OBJECT 呢?驅(qū)動程序的入口函數(shù)為DriverEntry,因此,當(dāng)你
3、寫一個驅(qū)動的開始,你會寫下如下的代碼:NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath )這個函數(shù)就相當(dāng)與喜歡c 語言的你所常用的main().IN 是無意義的宏,僅僅表明后邊的參數(shù)是一種輸入,而對應(yīng)的OUT 則代表這個參數(shù)是一種返回。這里沒有使用引用,因此如果想在參數(shù)中返回結(jié)果,一律傳入指針。DriverObject 就是你所寫的驅(qū)動對應(yīng)的DRIVER_OBJECT, 是系統(tǒng)在加載你的驅(qū)動時候所分配的。RegisteryPath 是專用于你記錄你的驅(qū)動相關(guān)參數(shù)的注冊表路徑。
4、這兩者都由系統(tǒng)分配并通過這兩個參數(shù)傳遞給你。DriverObject 重要之處,在于它擁有一組函數(shù)指針,稱為dispatch functions.開發(fā)驅(qū)動的主要任務(wù)就是親手撰寫這些dispatch functions.當(dāng)系統(tǒng)用到你的驅(qū)動,會向你的驅(qū)動發(fā)送IRP(這是windows 所有驅(qū)動的共同工作方式)。你的任務(wù)是在dispatch function 中處理這些請求。你可以讓irp 失敗,也可以成功返回,也可以修改這些irp,甚至可以自己發(fā)出irp。設(shè)備對象則是指DEVICE_OBJECT.下邊簡稱DO.但是實際上每個irp 都是針對DO 發(fā)出的。只有針對由該驅(qū)動所生成的DO 的IRP, 才
5、會發(fā)給該驅(qū)動來處理。具體的分發(fā)函數(shù),決定于DO 下的DriverObject 域。當(dāng)一個應(yīng)用程序打開文件并讀寫文件的時候,windows 系統(tǒng)將這些請求變成irp 發(fā)送給文件系統(tǒng)驅(qū)動。文件系統(tǒng)過濾驅(qū)動將可以過濾這些irp.這樣,你就擁有了捕獲和改變文件系統(tǒng)操作的能力。象Fat32,NTFS 這樣的文件系統(tǒng)(File System,簡稱FS),可能生成好幾種設(shè)備。首先文件系統(tǒng)驅(qū)動本身往往生成一個控制設(shè)備(CDO).這個設(shè)備的主要任務(wù)是修改整個驅(qū)動的內(nèi)部配置。因此一個Driver 只對應(yīng)一個CDO.另一種設(shè)備是被這個文件系統(tǒng)Mount 的Volume。一個FS 可能有多個Volume,也可能一個都
6、沒有。解釋一下,如果你有C:,D:,E:,F:四個分區(qū)。C:,D:為NTFS,E:,F:為Fat32.那么E:,F:則是Fat 的兩個Volume 設(shè)備對象.實際上"C:"是該設(shè)備的符號連接(Symbolic Link)名。而不是真正的設(shè)備名。可以打開Symbolic Links Viewer,能看到:C: DeviceHarddiskVolume1因此該設(shè)備的設(shè)備名為“DeviceHarddiskVolume1”.這里也看出來,文件系統(tǒng)驅(qū)動是針對每個Volume 來生成一個DeviceObject,而不是針對每個文件的。實際上對文件的讀寫的irp,都發(fā)到Volume 設(shè)備
7、對象上去了。并不會生成一個“文件設(shè)備對象”。掌握了這些概念的話,我們現(xiàn)在用簡單的代碼來生成我們的CDO,作為我們開發(fā)文件系統(tǒng)驅(qū)動的第一步牛刀小試。NTSTATUSDriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)/ 定義一個Unicode 字符串。UNICODE_STRING nameString;RtlInitUnicodeString( &nameString, L"FileSystemFiltersSFilter" );/ 生成控制設(shè)備status = IoCr
8、eateDevice( DriverObject,0, /has no device extension&nameString,FILE_DEVICE_DISK_FILE_SYSTEM,FILE_DEVICE_SECURE_OPEN,FALSE,&gSFilterControlDeviceObject );/ 如果因為路徑?jīng)]找到而生成失敗if (status = STATUS_OBJECT_PATH_NOT_FOUND) / 這是因為一些低版本的操作系統(tǒng)沒有FileSystemFilters這個目錄/ 如果沒有,我們則改變位置,生成到FileSystem下.RtlInitUni
9、codeString( &nameString, L"FileSystemSFilterCDO" );status = IoCreateDevice( DriverObject,0,&nameString,FILE_DEVICE_DISK_FILE_SYSTEM,FILE_DEVICE_SECURE_OPEN,FALSE,&gSFilterControlDeviceObject );/ 成功后,用KdPrint 打印一個log.if (!NT_SUCCESS( status ) KdPrint( "SFilter!DriverEntry:
10、Error creating control device object "%wZ",status=%08xn", &nameString, status );return status; else if (!NT_SUCCESS( status ) / 失敗也打印一個。并直接返回錯誤KdPrint( "SFilter!DriverEntry: Error creating control device object "%wZ",status=%08xn", &nameString, status );return 2) 用KdPrint()來代替printf 輸出信息。這些信息可以在DbgView 中看到。KdPrint()自身是一個宏,為了完整傳入?yún)?shù)所以使用了
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能交通系統(tǒng)中的行人行為預(yù)測模型考核試卷
- 企業(yè)安全生產(chǎn)培訓(xùn)教材的數(shù)字化轉(zhuǎn)型升級考核試卷
- 2025年中國pps濾袋數(shù)據(jù)監(jiān)測研究報告
- 2025年中國M氫基甲酯數(shù)據(jù)監(jiān)測報告
- 2025年中國BR型板式換熱器數(shù)據(jù)監(jiān)測研究報告
- 2025年中國2U形電子節(jié)能燈數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國震擊標(biāo)準(zhǔn)震篩機市場分析及競爭策略研究報告
- 2025至2030年中國鋁合金野營床市場分析及競爭策略研究報告
- 2025至2030年中國遠程通訊器市場分析及競爭策略研究報告
- 2025至2030年中國茶葉天然保鮮劑市場分析及競爭策略研究報告
- 農(nóng)產(chǎn)品產(chǎn)業(yè)園項目可行性研究報告專用模板
- 2025至2030中國醫(yī)藥軟包裝行業(yè)市場發(fā)展分析及競爭格局與投資發(fā)展報告
- 2025年中國氯化聚醚項目投資計劃書
- DB37-T5311-2025建筑工程消防設(shè)計文件編制標(biāo)準(zhǔn)
- 成都市高新區(qū)2023年七年級《歷史》下冊期末試卷與參考答案
- 中國上市銀行2024年回顧及未來展望-安永-202505
- TSG Z7002-2022特種設(shè)備檢測機構(gòu)核準(zhǔn)規(guī)則
- 2025年數(shù)字經(jīng)濟下的創(chuàng)業(yè)政策調(diào)整策略試題及答案
- 政治 (道德與法治)八年級下冊自由平等的追求教案
- 山東省濟南市高新區(qū)學(xué)卷B2024-2025學(xué)年數(shù)學(xué)五下期末教學(xué)質(zhì)量檢測試題含答案
- 訂單外發(fā)合同協(xié)議
評論
0/150
提交評論