
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于windows2000的過(guò)濾器驅(qū)動(dòng)程序設(shè)計(jì)wdm(windows driver mode)是微軟公司為windows的驅(qū)動(dòng)程序設(shè)計(jì)的一種通用的驅(qū)動(dòng)程序模型。相比以前的kdm和vxd來(lái)說(shuō),他的性能更高、系統(tǒng)之間移植越發(fā)便利。所以,隨著系統(tǒng)的升級(jí),wdm已經(jīng)成為windows 2000系統(tǒng)下驅(qū)動(dòng)程序開(kāi)發(fā)的主流。作為wdm模型之中一類(lèi)特別的驅(qū)動(dòng)程序,過(guò)濾器驅(qū)動(dòng)程序(filter driver)可以在不更改現(xiàn)有驅(qū)動(dòng)程序的狀況下,便利地修改、增強(qiáng)現(xiàn)有驅(qū)動(dòng)程序的功能。特殊是對(duì)于windows 2000已經(jīng)提供了通用驅(qū)動(dòng)程序的硬件設(shè)備,通過(guò)編寫(xiě)過(guò)濾器驅(qū)動(dòng)程序,可以以較小的代價(jià)擴(kuò)展硬件現(xiàn)有的功能。因此具有
2、很強(qiáng)的實(shí)際應(yīng)用價(jià)值。1 windows 2000 io哀求處理結(jié)構(gòu)1所示,windows 2000是分態(tài)的操作系統(tǒng)。用戶(hù)應(yīng)用程序運(yùn)行在用戶(hù)態(tài),操作系統(tǒng)代碼(如系統(tǒng)服務(wù)和設(shè)備驅(qū)動(dòng)程序)在核心態(tài)下運(yùn)行。用戶(hù)態(tài)程序只能調(diào)用win32子系統(tǒng)提供的api來(lái)同設(shè)備交互,當(dāng)哀求傳遞到io管理器時(shí),他舉行須要的參數(shù)匹配和操作平安性檢查,然后由這個(gè)哀求構(gòu)造出合適的irp(io request package,io哀求包),并把此irp傳遞到適當(dāng)?shù)尿?qū)動(dòng)程序去,并給應(yīng)用程序一個(gè)消息,通知這次io操作還沒(méi)完成。驅(qū)動(dòng)程序普通通過(guò)硬件抽象層來(lái)和硬件交互,從而完成io哀求工作。驅(qū)動(dòng)程序完成io操作后,他將調(diào)用一個(gè)特別的內(nèi)核
3、服務(wù)例程來(lái)完成irp。這時(shí),io管理器把數(shù)據(jù)和結(jié)果返回給win32和用戶(hù)應(yīng)用程序。2 wdm驅(qū)動(dòng)程序模型體系結(jié)構(gòu)windows驅(qū)動(dòng)程序模型重新定義驅(qū)動(dòng)程序分層用法了2的層次結(jié)構(gòu)。圖中左邊是一個(gè)設(shè)備對(duì)象堆棧。設(shè)備對(duì)象是系統(tǒng)為協(xié)助軟件管理硬件而創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)。一個(gè)物理硬件可以有多個(gè)這樣的數(shù)據(jù)結(jié)構(gòu)。處于堆棧最底層的設(shè)備對(duì)象稱(chēng)為物理設(shè)備對(duì)象pdo(physical device object),代表了設(shè)備和之間的銜接。在設(shè)備對(duì)象堆棧的中間的對(duì)象稱(chēng)為功能設(shè)備對(duì)象fdo(functional device object),代表了設(shè)備的功能。在fdo的上面和下面還會(huì)有一些過(guò)濾器設(shè)備對(duì)象fido(filter
4、 device object)。位于fdo上面的過(guò)濾器設(shè)備對(duì)象稱(chēng)為上層過(guò)濾器,位于fdo下面(但仍在pdo之上)的過(guò)濾器設(shè)備對(duì)象稱(chēng)為下層過(guò)濾器??偩€(xiàn)驅(qū)動(dòng)程序負(fù)責(zé)枚舉他的總線(xiàn),這意味著發(fā)覺(jué)總線(xiàn)上的所有設(shè)備和檢測(cè)設(shè)備何時(shí)被添加或刪除并為每個(gè)設(shè)備創(chuàng)建一個(gè)pdo。功能驅(qū)動(dòng)程序知道如何控制設(shè)備的主要功能,他分層在總線(xiàn)驅(qū)動(dòng)程序的上面。功能驅(qū)動(dòng)程序創(chuàng)建一個(gè)功能設(shè)備對(duì)象,放在設(shè)備棧中。對(duì)總線(xiàn)上的全部設(shè)備,總線(xiàn)過(guò)濾驅(qū)動(dòng)程序被加在總線(xiàn)驅(qū)動(dòng)程序之上;設(shè)備過(guò)濾驅(qū)動(dòng)程序僅對(duì)特定的設(shè)備添加。上層的過(guò)濾驅(qū)動(dòng)程序在功能驅(qū)動(dòng)程序之上,而下層過(guò)濾驅(qū)動(dòng)程序在功能驅(qū)動(dòng)程序之下。這種層次結(jié)構(gòu)可以使io哀求過(guò)程越發(fā)明白。io管理器發(fā)送的
5、irp,先被送到設(shè)備堆棧的上層過(guò)濾器驅(qū)動(dòng)程序(fido),他可以按照要求打算irp的處理方式,是沿著設(shè)備棧繼續(xù)向下傳,或者是做一些額外的處理。依次,每一層驅(qū)動(dòng)程序都可以打算如何處理irp。高層的驅(qū)動(dòng)程序可以把哀求劃分成更容易的哀求并傳遞給下層驅(qū)動(dòng)程序。中間層次的驅(qū)動(dòng)程序進(jìn)一步處理哀求,將一個(gè)irp中的哀求劃分為若干個(gè)小的哀求并傳給下層驅(qū)動(dòng)程序。最后,最低層的驅(qū)動(dòng)程序與硬件打交道。因此一些irp在到達(dá)總線(xiàn)程序之前,在設(shè)備棧傳遞過(guò)程中可能就被過(guò)濾掉了。3 過(guò)濾器驅(qū)動(dòng)程序過(guò)濾驅(qū)動(dòng)程序是一種中間驅(qū)動(dòng)程序,他位于其他的驅(qū)動(dòng)程序?qū)哟沃g。過(guò)濾驅(qū)動(dòng)程序可以監(jiān)視、攔截和修改irp流,在不影響其他驅(qū)動(dòng)程序的前提
6、下提供一些附加的功能。他的功能可分為:(1)利用過(guò)濾器驅(qū)動(dòng)程序修改現(xiàn)有功能驅(qū)動(dòng)程序的行為而不必重新編寫(xiě)功能驅(qū)動(dòng)程序。(2)上層過(guò)濾器驅(qū)動(dòng)程序在功能驅(qū)動(dòng)程序之前看到irp,可以很便利地為用戶(hù)提供額外的特征。還可以修正功能驅(qū)動(dòng)程序或硬件存在的毛病或缺陷。(3)下層過(guò)濾器驅(qū)動(dòng)程序在功能驅(qū)動(dòng)程序要向總線(xiàn)驅(qū)動(dòng)程序發(fā)送irp時(shí)看到irp??梢员O(jiān)視、攔截、修改功能驅(qū)動(dòng)程序要執(zhí)行的總線(xiàn)操作流,截獲數(shù)據(jù),舉行須要的數(shù)據(jù)處理,再將處理過(guò)的數(shù)據(jù)傳遞下去,實(shí)現(xiàn)一定的數(shù)據(jù)處理功能。(4)下層過(guò)濾器驅(qū)動(dòng)程序可以實(shí)現(xiàn)驅(qū)動(dòng)程序的總線(xiàn)無(wú)關(guān)性,使功能驅(qū)動(dòng)程序徹低自立于總線(xiàn)結(jié)構(gòu)而不挺直與設(shè)備對(duì)話(huà)。針對(duì)不同的總線(xiàn)編寫(xiě)不同的下層過(guò)濾器
7、,每個(gè)下層過(guò)濾器對(duì)應(yīng)一個(gè)總線(xiàn)類(lèi)型。當(dāng)功能驅(qū)動(dòng)程序需要與硬件對(duì)話(huà)時(shí),他只需向相應(yīng)的下層過(guò)濾器驅(qū)動(dòng)程序發(fā)送irp即可。4 過(guò)濾器驅(qū)動(dòng)程序設(shè)計(jì)過(guò)濾器驅(qū)動(dòng)程序設(shè)計(jì)與功能驅(qū)動(dòng)程序相像。這里限于篇幅主要研究一下過(guò)濾器驅(qū)動(dòng)程序設(shè)計(jì)中與功能驅(qū)動(dòng)程序相區(qū)分的幾個(gè)關(guān)鍵的技術(shù)要點(diǎn)。41 driverentry例程driverentry例程是驅(qū)動(dòng)程序的人口點(diǎn)。當(dāng)io管理器裝入驅(qū)動(dòng)程序時(shí),他調(diào)用driverentry例程用來(lái)初始化驅(qū)動(dòng)程序范圍的數(shù)據(jù)結(jié)構(gòu)和資源,包括輸出該驅(qū)動(dòng)程序的其他人口點(diǎn),初始化該驅(qū)動(dòng)程序用法的特定對(duì)象,并設(shè)置驅(qū)動(dòng)程序系統(tǒng)資源。與功能驅(qū)動(dòng)程序相區(qū)分的是:他必需為每種類(lèi)型的irp都安裝派遣函數(shù),而不僅僅
8、只是其希翼處理的irp。42 adddevice例程adddevice函數(shù)的基本職責(zé)是創(chuàng)建一個(gè)設(shè)備對(duì)象并把他銜接到以物理設(shè)備對(duì)象pdo為底的設(shè)備堆棧中,并負(fù)責(zé)設(shè)備對(duì)象初始化。與功能驅(qū)動(dòng)程序相區(qū)分的是:過(guò)濾驅(qū)動(dòng)程序創(chuàng)建的設(shè)備對(duì)象可能是2種,一種是不命名的過(guò)濾設(shè)備對(duì)象,過(guò)濾器工作時(shí)把這個(gè)無(wú)名的設(shè)備對(duì)象銜接到以物理設(shè)備對(duì)象pdo為底的設(shè)備堆棧中。一種是為了和用戶(hù)程序通信而創(chuàng)建的命名的設(shè)備對(duì)象并不銜接到以物理設(shè)備對(duì)象pdo為底的設(shè)備堆棧中。命名可以采納2種辦法:第一種辦法是采納可顯示的"硬編碼"符號(hào)鏈接名,用戶(hù)態(tài)程序必需把設(shè)備名硬編碼到源代碼中;另外一種辦法是用法設(shè)備接口,每個(gè)設(shè)備
9、接口是由一個(gè)全局惟一標(biāo)記符guid標(biāo)記。設(shè)備注冊(cè)為一個(gè)特定的設(shè)備接口就創(chuàng)建了一個(gè)符號(hào)鏈接。相關(guān)步驟如下:(1)調(diào)用iocreatedevke創(chuàng)建過(guò)濾設(shè)備對(duì)象,并建立一個(gè)私有的設(shè)備擴(kuò)展對(duì)象。(2)寄存一個(gè)或多個(gè)設(shè)備接口,以便應(yīng)用程序能知道設(shè)備的存在。另外,還可以給出設(shè)備名并創(chuàng)建符號(hào)銜接。(3)初始化設(shè)備擴(kuò)展和設(shè)備對(duì)象的f1ag成員。(4)調(diào)用ioattachdevketodevicestack函數(shù)把新設(shè)備對(duì)象放到堆棧上。詳細(xì)實(shí)現(xiàn)程序如下:ntstatus adddevice (pdriver_object driverobject, pdevice_object pdo)pdevice_obje
10、ct fido=null;創(chuàng)建沒(méi)有設(shè)備名的過(guò)濾設(shè)備對(duì)象ntstatus status=iocreatedevice (driverobjeot,sizeof (device-extension),null,file_device_unknown,0,false,&fido);if(!nt_success(status) return status;初始化設(shè)備擴(kuò)展和設(shè)備對(duì)象的flag成員pdevice_extension pdx = (pdevice_extension)fido-deviceextension;pdx-deviceobject=fido;pdx-pdo=pdo;pdx-
11、edevicetype =fir;把沒(méi)有設(shè)備名的設(shè)備對(duì)象放到堆棧上pdevice- object fdo =ioattachdevicetodevicestack (fido,pdo);pdx-topdevobj=fdo;fido-flags =pdo-f1ags&(do_direct-io do-buffered-io do_power_pagable do_power_inrush);建立一個(gè)命名的設(shè)備對(duì)象創(chuàng)建符號(hào)鏈接createsymboliclink (driverobject,pdo);return status_success;43 派遣例程派遣例程處理來(lái)自應(yīng)用程序的打開(kāi)、
12、關(guān)閉、讀、寫(xiě)等io哀求指令。與功能驅(qū)動(dòng)程序的區(qū)分是:過(guò)濾器驅(qū)動(dòng)程序不能影響其他驅(qū)動(dòng)程序接受irp。對(duì)于未知的irp或不處理的irp過(guò)濾驅(qū)動(dòng)程序的原則是必需沿設(shè)備棧傳遞下去。因此他必需為每種類(lèi)型的irp都安裝派遣函數(shù),而不僅僅只是其希翼處理的irp。對(duì)于希翼處理的irp必需指定特別的派遣函數(shù),挺直用completeirp來(lái)完成接收到的這類(lèi)irp,不往下層傳送。這里由dispatchdevicecontrol處理來(lái)自應(yīng)用程序的全部希翼處理的io操作指令。通常采納賦予全部自定義的io哀求代碼的switch語(yǔ)句,而對(duì)于每個(gè)指令用法相應(yīng)的處理函數(shù)。下面列出了主要的代碼框架:ntstatus dispat
13、chdevicecontrol (pdevice_object fido,pirp irp)ntstatus status;pdevice_extension pdx=(pdevice_extension)fido-deviceextension;plo_stack_location irpstack =iogetcurrentlrpstacklocation(1rp);取io控制指令代碼ulong iocontrolcode = irpstack >parametersdevicelocontr01iocontrolcode;switch(iocontrolcode)case ioct
14、l-xxx: 處理io控制指令代碼case ioctl-xxx:default:break;完成接收到的irpiocompleterequest(irp,io_no_increment);return status;對(duì)于不需要處理的irp則交由dispatchany例程處理,將irp沿著設(shè)備棧挺直傳遞下去:ntstatus dispatchany(pdevice_object fido,pirp irp)pdevice_ extension pdx=(pdevice-extension)fido-deviceextension使堆棧指針少前進(jìn)一步。ioskipcurrentlrpstacklocation(hp);status=iocalldriver(pdx-lowerdeviceobject,irp);return stat
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度民族風(fēng)情餐廳承包運(yùn)營(yíng)合同
- 二零二五年度土地流轉(zhuǎn)與農(nóng)村社會(huì)保障體系建設(shè)協(xié)議
- 2025年度環(huán)保產(chǎn)業(yè)員工勞動(dòng)關(guān)系解除協(xié)議
- 二零二五年度黃金投資俱樂(lè)部會(huì)員招募合同
- 2025年度門(mén)面房屋租賃合同-含租賃房屋租賃稅費(fèi)承擔(dān)
- 黨支部競(jìng)選發(fā)言稿
- 2025年黃南貨運(yùn)資格證模擬考試題
- 2025年上海貨運(yùn)上崗證模擬考試題
- 羽毛球比賽發(fā)言稿
- 個(gè)人商鋪門(mén)面租賃合同
- 《中小學(xué)心理健康教育指導(dǎo)綱要(2012年修訂)》
- 新疆民族發(fā)展史和宗教演變史
- YY/T 1095-2015肌電生物反饋儀
- GB/T 6682-2008分析實(shí)驗(yàn)室用水規(guī)格和試驗(yàn)方法
- GB/T 5269-2008傳動(dòng)與輸送用雙節(jié)距精密滾子鏈、附件和鏈輪
- 水穩(wěn)攤鋪施工技術(shù)交底書(shū)
- GB/T 20145-2006燈和燈系統(tǒng)的光生物安全性
- GB/T 18601-2009天然花崗石建筑板材
- GB/T 1689-2014硫化橡膠耐磨性能的測(cè)定(用阿克隆磨耗試驗(yàn)機(jī))
- 畢業(yè)設(shè)計(jì)論文-貝類(lèi)脫殼機(jī)設(shè)計(jì)
- 八項(xiàng)規(guī)定學(xué)習(xí)課件
評(píng)論
0/150
提交評(píng)論