導航:首頁 > 設備說明 > 驅動設備過濾和類過濾

驅動設備過濾和類過濾

發布時間:2022-06-26 09:33:48

Ⅰ 怎樣才能關閉電腦的過濾器驅動程序啊

以下為復製成分 WDM(Windows Driver Mode)是微軟公司為Windows的驅動程序設計的一種通用的驅動程序模型。相比以前的KDM和VXD來說,他的性能更高、系統之間移植更加方便。所以,隨著系統的升級,WDM已經成為Windows 2000系統下驅動程序開發的主流。作為WDM模型之中一類特殊的驅動程序,過濾器驅動程序(Filter driver)可以在不更改現有驅動程序的情況下,方便地修改、增加現有驅動程序的功能。特別是對於Windows 2000已經提供了通用驅動程序的硬體設備,通過編寫過濾器驅動程序,可以以較小的代價擴展硬體現有的功能。因此具有很強的實際應用價值。 1 Windows 2000 I/O請求處理結構如圖1所示,Windows 2000是分態的操作系統。用戶應用程序運行在用戶態,操作系統代碼(如系統服務和設備驅動程序)在核心態下運行。用戶態程序只能調用Win32子系統提供的API來同設備交互,當請求傳遞到I/O管理器時,他進行必要的參數匹配和操作安全性檢查,然後由這個請求構造出合適的IRP(IO Request Package,I/O請求包),並把此IRP傳遞到適當的驅動程序去,並給應用程序一個消息,通知這次I/O操作還沒完成。驅動程序一般通過硬體抽象層來和硬體交互,從而完成I/O請求工作。驅動程序完成I/O操作後,他將調用一個特殊的內核服務常式來完成IRP。這時,I/O管理器把數據和結果返回給Win32和用戶應用程序。2 WDM驅動程序模型體系結構Windows驅動程序模型重新定義驅動程序分層使用了如圖2的層次結構。圖中左邊是一個設備對象堆棧。設備對象是系統為幫助軟體管理硬體而創建的數據結構。一個物理硬體可以有多個這樣的數據結構。處於堆棧最底層的設備對象稱為物理設備對象PDO(Physical Device Object),代表了設備和匯流排之間的連接。在設備對象堆棧的中間的對象稱為功能設備對象FDO(Functional Device Object),代表了設備的功能。在FDO的上面和下面還會有一些過濾器設備對象FIDO(Filter Device Object)。位於FDO上面的過濾器設備對象稱為上層過濾器,位於FDO下面(但仍在PDO之上)的過濾器設備對象稱為下層過濾器。匯流排驅動程序負責枚舉他的匯流排,這意味著發現匯流排上的全部設備和檢測設備何時被添加或刪除並為每個設備創建一個PDO。功能驅動程序知道如何控制設備的主要功能,他分層在匯流排驅動程序的上面。功能驅動程序創建一個功能設備對象,放在設備棧中。對匯流排上的所有設備,匯流排過濾驅動程序被加在匯流排驅動程序之上;設備過濾驅動程序僅對特定的設備添加。上層的過濾驅動程序在功能驅動程序之上,而下層過濾驅動程序在功能驅動程序之下。這種層次結構可以使I/O請求過程更加明了。I/O管理器發送的IRP,先被送到設備堆棧的上層過濾器驅動程序(FIDO),他可以根據要求決定IRP的處理方式,是沿著設備棧繼續向下傳,或者是做一些額外的處理。依次,每一層驅動程序都可以決定如何處理IRP。高層的驅動程序可以把請求劃分成更簡單的請求並傳遞給下層驅動程序。中間層次的驅動程序進一步處理請求,將一個IRP中的請求劃分為若干個小的請求並傳給下層驅動程序。最後,最低層的驅動程序與硬體打交道。因此一些IRP在到達匯流排程序之前,在設備棧傳遞過程中可能就被過濾掉了。 3 過濾器驅動程序過濾驅動程序是一種中間驅動程序,他位於其他的驅動程序層次之間。過濾驅動程序可以監視、攔截和修改IRP流,在不影響其他驅動程序的前提下提供一些附加的功能。他的功能可分為:(1)利用過濾器驅動程序修改現有功能驅動程序的行為而不必重新編寫功能驅動程序。(2)上層過濾器驅動程序在功能驅動程序之前看到IRP,可以很方便地為用戶提供額外的特徵。還可以修正功能驅動程序或硬體存在的毛病或缺陷。(3)下層過濾器驅動程序在功能驅動程序要向匯流排驅動程序發送IRP時看到IRP。可以監視、攔截、修改功能驅動程序要執行的匯流排操作流,截獲數據,進行必要的數據處理,再將處理過的數據傳遞下去,實現一定的數據處理功能。 (4)下層過濾器驅動程序可以實現驅動程序的匯流排無關性,使功能驅動程序完全獨立於匯流排結構而不直接與設備對話。針對不同的匯流排編寫不同的下層過濾器,每個下層過濾器對應一個匯流排類型。當功能驅動程序需要與硬體對話時,他只需向相應的下層過濾器驅動程序發送IRP即可。4 過濾器驅動程序設計過濾器驅動程序設計與功能驅動程序相似。這里限於篇幅主要討論一下過濾器驅動程序設計中與功能驅動程序相區別的幾個關鍵的技術要點。4.1 DriverEntry常式DriverEntry常式是驅動程序的人口點。當I/O管理器裝入驅動程序時,他調用DriverEntry常式用來初始化驅動程序范圍的數據結構和資源,包括輸出該驅動程序的其他人口點,初始化該驅動程序使用的特定對象,並設置驅動程序系統資源。與功能驅動程序相區別的是:他必須為每種類型的IRP都安裝派遣函數,而不僅僅只是其希望處理的IRP。4.2 AddDevice常式AddDevice函數的基本職責是創建一個設備對象並把他連接到以物理設備對象PDO為底的設備堆棧中,並負責設備對象初始化。與功能驅動程序相區別的是:過濾驅動程序創建的設備對象可能是2種,一種是不命名的過濾設備對象,過濾器工作時把這個無名的設備對象連接到以物理設備對象PDO為底的設備堆棧中。一種是為了和用戶程序通信而創建的命名的設備對象並不連接到以物理設備對象PDO為底的設備堆棧中。命名可以採用2種方法:第一種方法是採用可顯示的"硬編碼"符號鏈接名,用戶態程序必須把設備名硬編碼到源代碼中;另外一種方法是使用設備介面,每個設備介面是由一個全局惟一標志符GUID標志。設備注冊為一個特定的設備介面就創建了一個符號鏈接。相關步驟如下:(1)調用IoCreateDevke創建過濾設備對象,並建立一個私有的設備擴展對象。(2)寄存一個或多個設備介面,以便應用程序能知道設備的存在。另外,還可以給出設備名並創建符號連接。(3)初始化設備擴展和設備對象的F1ag成員。(4)調用IOAttachDevkeToDeviceStack函數把新設備對象放到堆棧上。具體實現程序如下:NTSTATUS AddDevice (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT pdo){PDEVICE_OBJECT fido=NULL;//創建沒有設備名的過濾設備對象NTSTATUS status=IoCreateDevice (DriverObjeot,sizeof (DEVICE-EXTENSION),NULL,FILE_DEVICE_UNKNOWN,0,FALSE,&fido);if(!NT_SUCCESS(status)) return status;//初始化設備擴展和設備對象的Flag成員PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)fido->DeviceExtension;pdx->DeviceObject=fido;pdx->Pdo=pdo;pdx->eDeviceType =FILTER-p.htm" target="_blank" title="FILTER貨源和PDF資料">FILTER;//把沒有設備名的設備對象放到堆棧上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);………//建立一個命名的設備對象創建符號鏈接CreateSymbOlicLink (DriverObject,pdo);return STATUS_SUCCESS;}4.3 派遣常式派遣常式處理來自應用程序的打開、關閉、讀、寫等I/O請求命令。與功能驅動程序的區別是:過濾器驅動程序不能影響其他驅動程序接受IRP。對於未知的IRP或不處理的IRP過濾驅動程序的原則是必須沿設備棧傳遞下去。因此他必須為每種類型的IRP都安裝派遣函數,而不僅僅只是其希望處理的IRP。對於希望處理的IRP必須指定特殊的派遣函數,直接用CompleteIRP來完成接收到的這類IRP,不往下層傳送。這里由DispatchDeviceControl處理來自應用程序的所有希望處理的I/O操作命令。通常採用給予所有自定義的I/O請求代碼的SWITCH-p.htm" target="_blank" title="SWITCH貨源和PDF資料">SWITCH語句,而對於每個命令使用相應的處理函數。下面列出了主要的代碼框架:NTSTATUS DispatchDeviceControl (PDEVICE_OBJECT fido,PIRP Irp){NTSTATUS status;PDEVICE_EXTENSION pdx=(PDEVICE_EXTENSION)fido->DeviceExtension;PlO_STACK_LOCATION IrpStack =IoGetCurrentlrpStackLocation(1rp);//取I/O控制命令代碼ULONG IoControlCode = IrpStack >Parameters.DeviceloContr01.IoControlCode;switch(IoControlCode){case IOCTL-XXX:…… //處理I/O控制命令代碼case IOCTL-XXX:……default:……break;}//完成接收到的IRPIoCompleteRequest(Irp,IO_NO_INCREMENT);……return status;}對於不需要處理的IRP則交由DispatchAny常式處理,將IRP沿著設備棧直接傳遞下去:NTSTATUS DispatchAny(PDEVICE_OBJECT fido,PIRP Irp){PDEVICE_ EXTENSION pdx=(PDEVICE-EXTENSION)fido->DeviceExtension//使堆棧指針少前進一步。IoSkipCurrentlrpStackLocation(hp);Status=IoCallDriver(pdx->LowerDeviceObject,Irp);……return status;4.4 Unload常式功能在Unload常式中,驅動程序必須釋放所有創建的對象和所有分配給驅動程序的資源。5 結 語筆者就採用在Windows提供的USB音效卡驅動程序下方插入自己編寫的下層過濾器驅動程序實現了對USB音效卡輸出的數據流的截獲並進行語音信號處理,取得了不錯的效果,現已投入實際應用。可見過濾器驅動程序作為一類特殊的驅動程序,它可以以較小的代價實現對驅動數據流的截獲,修改、增加現有驅動常需的功能,具有很強的實用性。
類別:驅動 | 添加到搜藏 | 瀏覽(254) | 評論 (0) 上一篇:VMware虛擬機中如何安裝VMWare-T... 下一篇:今天離婚,你得抱我出門 相關文章: �6�1Windows文件系統的過濾器驅動程... 最近讀者: 登錄後,您就出現在這里。 蝶舞360°jacky85chan 網友評論:

Ⅱ 如何構造一個簡單的USB過濾驅動程序

一、基本原理抄 我們知道,WDM(和KDM)是分層的,在構造設備棧時,IO管理器可以使一個設備對象附加到另外一個初始驅動程序創建的設備對象上。與初始設備對象相關的驅動程序決定的IRP,也將被發送到附加的設備對象相關的驅動程序上。

Ⅲ windows防火牆驅動和過濾模塊之間的關系

這里說的驅動應該是防火牆的「驅動過濾模塊」,因為該模塊是在系統回內核里實現的,例如IMD中間答層驅動過濾。
而防火牆的過濾模塊不一定是在內核里實現的,例如winsock 2 SPI過濾技術中的過濾模塊屬於用戶層。
相對而言,驅動防火牆的安全性更高。

Ⅳ 什麼是過濾驅動

過濾驅動就是掛載在其他驅動上,對某設備的irp進行攔截過濾作用,可以對設備專進行功能屬擴展,或是數據加密等的驅動程序。

比如:

1. 可以對寫入硬碟的數據做加密,然後讀取的時候解密,這樣對於用戶來說,根本不知道有加密解密的過程,然後存在硬碟上的數據是加密的。

2. 可以對已有驅動做一些擴展,或者改變已有驅動的功能。比如已有驅動一次只能寫1024位元組的數據,那麼過濾驅動可以擴展到任何長度,然後分段調用已有驅動就是了。



過濾驅動可以在功能型驅動的上面,稱之為上層過濾驅動,或者高層,反正就這個意思。過濾驅動在功能型驅動下面,稱之為下層過濾驅動。看示意圖:

Ⅳ USB過濾驅動開發

《USB Design By Example》(http://www.usb-by-example.com)的作者John Hyde實現了一個USB鍵盤過濾驅動程序,即給此程序增內加了一個「攔截(Intercept)」功能容來處理USB鍵盤的Report以實現特定的功能:當驅動程序在IRP_MJ_INTERNAL_DEVICE_CONTROL設置的完成常式從USB設備攔截到一個Get_Report_Descriptor時,攔截程序將此Descriptor中的USAGE值從「Keyboard」改為「UserDefined」,再返回給系統。

Ⅵ linux怎樣載入文件過濾驅動

文件系統過濾驅動是一種可選的,為文件系統提供具有附加值功能的驅動程序。文件系統過濾驅動是一種核心模式組件,它作為Windows NT執行體的一部分運行。
文件系統過濾驅動可以過濾一個或多個文件系統或文件系統卷的I/O操作。按不同的種類劃分,文件系統過濾驅動可以分成日誌記錄、系統監測、數據修改或事件預防幾類。通常,以文件系統過濾驅動為核心的應用程序有防毒軟體、加密程序、分級存儲管理系統等。
二、文件系統過濾驅動並不是設備驅動
設備驅動是用來控制特定硬體I/O設備的軟體組件。例如:DVD存儲設備驅動是一個DVD驅動。
相反,文件系統過濾驅動與一個或多個文件系統協同工作來處理文件I/O操作。這些操作包括:創建、打開、關閉、枚舉文件和目錄;獲取和設置文件、目錄、卷的相關信息;向文件中讀取或寫入數據。另外,文件系統過濾驅動必須支持文件系統特定的功能,例如緩存、鎖定、稀疏文件、磁碟配額、壓縮、安全、可恢復性、還原點和卷裝載等。
下面兩部分詳細的闡述了文件系統過濾驅動和設備驅動之間的相似點與不同點。

三、安裝文件系統過濾驅動
對於Windows XP和後續操作系統來說,可以通過INI文件或安裝應用程序來安裝文件系統過濾驅動(對於Windows 2000和更早的操作系統,過濾驅動通常通過服務控制管理器Service Control Manager來進行安裝)。
四、初始化文件系統過濾驅動
與設備驅動類似,文件系統過濾驅動也使用DriverEntry常式進行初始化工作。在驅動程序載入後,載入驅動相同的組件將通過調用驅動程序的 DriverEntry常式來對驅動程序進行初始化工作。對於文件系統過濾驅動來說,載入和初始化過濾驅動的系統組件為I/O管理器。
DriverEntry常式運行於系統線程上下文中,其IRQL = PASSIVE_LEVEL。本常式可分頁,詳細信息參見MmLockPagableCodeSection。
DriverEntry常式定義如下:
NTSTATUS
DriverEntry (
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
本常式有兩個輸入參數。第一個參數,DriverObject為系統在文件系統過濾驅動載入時所創建的驅動對象;第二個參數,RegistryPath為包含驅動程序注冊鍵路徑的Unicode字元串。
文件系統過濾驅動按如下順序執行DriverEntry常式:

01、創建控制設備對象:

文件系統過濾驅動的DriverEntry常式通常以創建控制設備對象作為該常式的起始。創建控制設備對象的目的在於允許應用程序即使在過濾驅動載入到文件系統或卷設備對象之前也能夠直接與過濾驅動進行通信。
注意:文件系統也會創建控制設備對象。當文件系統過濾驅動將其自身附加到文件系統之上時(而不是附加到某一特定文件系統卷),過濾驅動同樣將其自身附加到文件系統的控制設備對象之上。

在FileSpy驅動範例中,控制設備對象按如下方式創建:

RtlInitUnicodeString(&nameString, FILESPY_FULLDEVICE_NAME);
status = IoCreateDevice(
DriverObject, //DriverObject
0, //DeviceExtensionSize
&nameString, //DeviceName
FILE_DEVICE_DISK_FILE_SYSTEM, //DeviceType
FILE_DEVICE_SECURE_OPEN, //DeviceCharacteristics
FALSE, //Exclusive
&gControlDeviceObject); //DeviceObject

RtlInitUnicodeString(&linkString, FILESPY_DOSDEVICE_NAME);
status = IoCreateSymbolicLink(&linkString, &nameString);

與文件系統不同,文件系統過濾驅動並不是一定要為其控制設備對象命名。如果傳遞給DeviceName參數一個非空(Non-NULL)值,該值將作為控制設備對象的名稱。接下來,在前面的代碼範例中DriverEntry可以調用IoCreateSymbolicLink常式來將該對象的核心模式名稱與應用程序可見的用戶模式名稱關聯到一起(同樣可以通過調用IoRegisterDeviceInterface來使設備對象對應用程序可見)。
注意:由於控制設備對象是唯一不會附加到設備堆棧中的設備對象,因此控制設備對象是唯一的可安全命名的設備對象。由此,是否為文件系統過濾驅動的控制設備對象是否命名是可選的。
注意:文件系統的控制設備對象必須命名。過濾設備對象從不命名。

Ⅶ 過濾器有哪些原理和作用

要了解過濾器的原理和作用,先要了解過濾器的大概分類,因為不同種類的過濾器作用和工作原理是有差別的。常見的過濾器種類有:保安過濾器,不銹鋼袋式過濾器,多介質過濾器等。工作原理和作用如下:
1.保安過濾器的工作原理
保安過濾器工作原理是待過濾液體由濾器進口壓入,經濾芯自外向里透過濾層而被過濾成清澄液體,然後經出口排出。在壓力的作用下,使原液通過濾材,濾渣留在濾材上,濾液透過濾材流出。水中殘存的微量懸浮顆粒、膠體、微生物等,被截留或吸附在濾芯表面和孔隙中。
作用:去除水中雜質、沉澱物和懸浮物、細菌,從而達到過濾的目的
2.不銹鋼袋式過濾器的工作原理
使用袋濾器過濾液體時,液體從過濾容器側面或者下面進液口進入,由被網籃支撐的濾袋上方沖入濾袋中,濾袋因液體的沖擊和均勻的壓力面展開,使得液體物料在整個過濾袋內表面得到均勻分布,透過濾袋的液體沿著金屬支承網籃壁,由過濾器底部出液口排出。
作用:高效截留濾出顆粒雜質在過濾袋內,完成過濾過程。
3.多介質過濾器的工作原理
常用的多介質過濾器有活性炭過濾器,其工作原理是:活性炭在其顆粒表面形成一層平衡的表面濃度,其顆粒的大小對吸附能力也有影響。活性炭顆粒越小,過濾面積就越大。顆粒狀的活性炭因顆粒成形不易流動,水中有機物等雜質在活性炭過濾層中也不易阻塞,其吸附能力強,攜帶更換方便。活性炭的吸附能力和與水接觸的時間成正比,接觸時間越長,過濾後的水質越佳。
作用:吸附水中有機物等雜質。

Ⅷ windows10文件驅動過濾

1、獲得文件全路徑以及判斷時機

除在所有 IRP_MJ_XXX 之前自己從頭創建 IRP 發送到下層設備查詢全路徑外,不要嘗試在 IRP_MJ_CREATE 以外的地方獲得全路徑,因為只有在 IRP_MJ_CREATE
中才會使用 ObCreateObject() 來建立一個有效的 FILE_OBJECT。而在 IRP_READ IRP_WRITE 中它們是直接操作 FCB (File Control Block)的。

2、從頭建立 IRP 發送關注點

無論你建立什麼樣的 IRP,是 IRP_MJ_CREATE 也好還是 IRP_MJ_DIRECTORY_CONTROL也罷,最要提醒的就是一些標志。不同的標志會代來不同的結果,有些結果是直接返回失敗。這里指的標志不光是 IRP->Flags,還要考慮 IO_STACK_LOCATION->Flags還有其它等等。尤其是你要達到一些特殊目的,這時候更需要注意,如 IRP_MN_QUERY_DIRECTORY,不同的標志結果有很大的不同。

3、從頭建立 IRP 獲取全路徑注意點

自己從頭建立一個 IRP_MJ_QUERY_INFORMATION 的 IRP 獲取全路徑時需要注意,不僅在 IRP_MJ_CREATE 要做區別處理,在 IRP_MJ_CLOSE 也要做同樣的處理,否則如果目標是 NTFS 文件系統的話可能產生 deadlock。如果是 NTFS 那麼在 IRP_MJ_CLEANUP 的時候也需要對 FO_STREAM_FILE 類型的文件做同樣處理。

4、獲得本地/遠程訪問用戶名(域名/SID)

方法只有在 IRP_MJ_CREATE 中才可用,那是因為 IO_SECURITY_CONTEXT 只有在 IO_STACK_LOCATION->Parameters.Create.SecurityContext 才會有效。這樣你才有可能從 IO_SECURITY_CONTEXT->SecurityContext->AccessState->SubjectSecurityContext.XXXToken 中獲得訪問 TOKEN,從而進一步得到用戶名或 SID。記得 IFS 中有一個庫,它的 LIB 導出一個函數可以讓你在獲得以上信息後得到用戶名與域名。但如果你想兼容 NT4 的話,只能自己分析來得出本地和遠程的 SID。

5、文件與目錄的判斷

正確的方法在楚狂人的文檔里已經說過了,再補充一句。如果你的文件過濾驅動要兼容所有文件系統,那麼不要十分相信從 FileObject->FsContext 里取得的數據。正確的方法還是在你傳遞下去 IRP_MJ_CREATE 後從最下層文件系統延設備棧返回到你這里後再獲得。

6、加/解密中判斷點

只判斷 IRP_PAGING_IO,IRP_SYNCHRONOUS_PAGING_IO,IRP_NOCACHE 是沒錯的。如果有問題,相信是自己的問題。關於有人提到在 FILE_OBJECT->Flags中的 FO_NO_INTERMEDIATE_BUFFERING 是否需要判斷,對此問題的回答是只要你判斷了 IRP_NOCACHE 就不用再判斷 FILE_OBJECT 中的,因為它最終會設置 IRP->Flags 為 IRP_NOCACHE。關於你看到的諸如 IRP_DEFER_IO_COMPLETION 等 IRP 不要去管它,因為它只是一個過程。最終讀寫還是如上所介紹。至於以上這些 IRP 哪個是由 CC MGR 發送的,哪些是由 I/O MGR 發送和在什麼時候發送的,這個已經有很多討論了,相信可以找到。

7、舉例說明關於 IRP 傳遞與完成注意事項

只看 Walter Oney 的那本 《Programming the Microsoft Windows driver model》里介紹的流程,自己沒有實際的體會還是不夠的,那裡只介紹了基礎概念,讓自己有了知識。知道如何用,在什麼情況下用,用哪種方法,能夠用的穩定這叫有了技術。我們從另一個角度出發,把問題分為兩段來看,這樣利於總結。一個 IRP 在過濾驅動中,把它分為需要安裝 CompleteRoutine 的與無需安裝 CompleteRoutine 的。那麼在不需要安裝 CompleteRoutine 的有以下幾類情況。

(1) 拿到這個 IRP 後什麼都不做,直接調用 IoCompleteRequest() 來返回。
(2) 拿到這個 IRP 後什麼都不做,直接傳遞到底層設備,使用IoSkipCurrentIrpStackLocation() 後調用 IoCallDriver() 傳遞。
(3) 使用 IoBuildSynchronousFsdRequest() 或 IoBuildDeviceIoControlRequest()來建立 IRP 的。

以上幾種根據需要直接使用即可,除了一些參數與標志需要注意外,沒有什麼系統機制相關的東西需要注意了。那麼再來看需要安裝 CompleteRoutine 的情況。我們把這種情況再細分為兩種,一是在 CompleteRoutine 中返回標志為STATUS_MORE_PROCESSING_REQUIRED 的情況。二是返回處這個外的標志,需要使用函數IoMarkIrpPending() 的情況。在 CompleteRoutine 中絕大多數就這么兩種情況,你需要使用其中的一種情況。那麼為什麼需要安裝 CompleteRoutine 呢?那是因為我們對其 IRP 從上層驅動,經過我們驅動,在經過底層設備棧返回到我們這一層驅動時需要得到其中內容作為參考依據的,還有對其中內容需要進行修改的。再有一種情況是沒有經過上層驅動,而 IRP 的產生是在我們驅動直接下發到底層驅動,而經過設備棧後返回到我們這一層,且我們不在希望它繼續向上返回的,因為這個 IRP 本身就不是從上層來的。綜上所述,先來看下 IoMarkIrpPending() 的情況。

(1) 在 CompleteRoutine 中判斷 Irp->PendingReturned 並使用 IoMarkIrpPending()然後返回。這種方法在沒有使用 KeSetEvent() 的情況下,且不是自建 IRP 發送到底層驅動返回時使用。也就是說有可能我所做的工作都是在 CompleteRoutine 中進行的。比如加/解密時,我在這里對下層驅動返回數據的判斷並修改。修改後因為沒有使用 STATUS_MORE_PROCESSING_REQUIRED 標志,它會延設備堆一直向上返回並到用戶得到數據為止。這里一定要注意,在這種情況下 CompleteRoutine返回後,不要在碰這個 IRP。也就是說如果這個時候你使用了 IoCompleteRequest()的話會出現一個 MULTIPLE_IRP_COMPLIETE_REQUEST 的 BSOD 錯誤。

(2) 在 CompleteRoutine 中直接返回 STATUS_MORE_PROCESSING_REQUIRED 標志。這種情況在使用了 KeSetEvent() 的函數下出現。這里又有兩個小小的分之。

1) 出現於上層發送到我這里,當我這里使用 IoCallDriver() 後,底層返回數據經過我這一層時,我想讓它暫時停止繼續向上傳遞,讓這個 IRP 稍微歇息一會,等我對這個 IRP 返回的數據操作完成後(一般是沒有在 CompleteRoutine中對返回數據進行操作情況下,也就是說等到完成常式返回後再進行操作),由我來調用 IoCompleteRequest() 讓它延著設備棧繼續返回。這里要注意,我們是想讓它返回的,所以調用了 IoCompleteRequest()。這個可不同於下面所講的自己從頭分配 IRP 時在 CompleteRoutine 中已經調用 IoFreeIrp() 釋放了當前IRP 的情況。比如我在做一個改變文件大小,向文件頭寫入加密標志的驅動時,在上層發來了 IRP_MJ_QUERY_INFORMATION 查詢文件,我想在這個時候獲得文件信息進行判斷,然後根據我的判斷結果再移動文件指針。注意:上面是兩步,第一步是先獲得文件大小,那麼在這個時候我就需要用到上述辦法,先讓這個 IRP傳遞下去,得到我想要的東西後在進行對比。等待適當時機完成這個 IRP,讓數據繼續傳遞,直到用戶收到為止。第二步我會結合下面小節來講。

2) 出現於自己從頭建立 IRP,當使用 IoAllocate() 或 IoBuildAsynchronousFsdRequest()創建 IRP 調用 IoCallDriver() 後,底層返回數據到我這一層時,我不想讓這個 IRP 繼續向上延設備棧傳遞。因為這個 IRP 就是在我這層次建立的,上層本就不知道有這么一個 IRP。那麼到這里我就要在 CompleteRoutine 中使用 IoFreeIrp()來釋放掉這個 IRP,並不讓它繼續傳遞。這里一定要注意,在 CompleteRoutine函數返回後,這個 IRP 已經釋放了,如果這個時候在有任何關於這個 IRP 的操作那麼後果是災難性的,必定導致 BSOD 錯誤。前面 1) 小節給出的例子只完成了第一步這里繼續講第二步,第一步我重用這個 IRP 得到了文件大小,那麼這個時候雖然知道大小,但我還是無法知道這個文件是否被我加過密。這時,我就需要在這里自己從頭建立一個 IRP_MJ_READ 的 IRP 來讀取文件來判斷是否我加密過了的文件,如果是,則要減少相應的大小,然後繼續返回。注意:這里的返回是指讓第一步的IRP 返回。而不是我們自己創建的。我們創建的都已經在CompleteRoutine 中銷毀了。

8、關於完成 IRP 的動作簡介

當一個底層驅動調用了 IoCompleteRequest() 函數時,基本上所有設備棧相關 IRP 處理工作都是在它那裡完成的。包括 IRP->Flags 的一些標志的判斷,對 APC 的處理,拋出MULTIPLE_IRP_COMPLETE_REQUESTS 錯誤等。當它延設備棧一直調用驅動所安裝的 CompleteRoutine時,如果發現 STATUS_MORE_PROCESSING_REQUIRED 這個標志,則會停止向上繼續回滾。這也是為什麼在 CompleteRoutine 中使用這個標志即可暫停 IRP 的原因。

9、關於 ObQueryNameString 的使用

這個函數的使用,在有些環境下會有問題。它的上層函數是 ZwQueryObject()。在某些情況下會導致系統掛起,或者直接 BSOD。它是從 對象管理器中的 ObpRootDirectoryObject開始遍歷,通過 OBJECT_HEADER_TO_NAME_INFO 獲得對象名稱。今天問了下 PolyMeta好象是在處理 PIPE 時會掛啟,這個問題出現在 2000 系統。在 XP 上好象補丁了。

10、關於重入問題

其實這個問題在很久前的 IFS FAQ 里已經介紹的很清楚,包括處理方法以及每種方法可能帶來的問題。IFS FAQ 里的 Q34 一共介紹了四種方法,包括自己從頭建立 IRP發送,使用 ShadowDevice,使用特徵字元串,根據線程 ID,在 XP 下使用() 函數。並且把以上幾種在不同環境下使用要處理的問題也做了簡單的介紹。且在 Q33 里介紹了在 CIFS 碰到的 FILE_COMPLETE_IF_OPLOCKED 問題的解決方法。

Ⅸ 什麼是過濾器,它的作用是什麼

過濾器(filter)是輸送介質管道上不可缺少的一種裝置,通常安裝在減壓閥、泄壓閥、定水位閥 ,方工過濾器其它設備的進口端設備。過濾器有一定規格濾網的濾筒後,其雜質被阻擋,當需要清洗時,只要將可拆卸的濾筒取出,處理後重新裝入即可,因此,使用維護極為方便。 過濾器的工作原理是: 過濾器待處理的水由入水口進入機體, 水中的雜質沉積在不銹鋼濾網上,由此產生壓差。通過壓差開關監測進出水口壓差變化,當壓差達到設定值時,電控器給水力控制閥,驅動電機信號。設備安裝後,由技術人員進行調試,設定過濾時間和清洗轉換時間,待處理的水由入水口進入機體,過濾器開始正常工作,當達到預設清洗時間時,電控器給水力控制閥、驅動電機信號,引發下列動作:電動機帶動刷子旋轉,對濾芯進行清洗,同時控制閥打開進行排污,整個清洗過程只需持續數十秒鍾,當清洗結束時,關閉控制閥,電機停止轉動,系統恢復至其初始狀態,開始進入下一個過濾工序。過濾器的殼體內部主要由粗濾網、細濾網、吸污管,不銹鋼刷或不銹鋼吸嘴、密封圈、防腐塗層、轉動軸等組成。 用過濾介質把容器分隔為上、下腔即構成簡單的過濾器。懸浮液加入上腔,在壓力作用下通過過濾介質進入下腔成為濾液,固體顆粒被截留在過濾介質表面形成濾渣(或稱濾餅)。過濾過程中過濾介質表面積存的濾渣層逐漸加厚,液體通過濾渣層的阻力隨之增高,過濾速度減小。當濾室充滿濾渣或過濾速度太小時,停止過濾,清除濾渣,使過濾介質再生,以完成一次過濾循環。 液體通過濾渣層和過濾介質必須克服阻力,因此在過濾介質的兩側必須有壓力差,這是實現過濾的推動力。增大壓力差可以加速過濾,但受壓後變形的顆粒在大壓力差時易堵塞過濾介質孔隙,過濾反而減慢。 懸浮液過濾有濾渣層過濾、深層過濾和篩濾 3種方式。 ①濾渣層過濾:過濾初期過濾介質只能截留大的固體顆粒,小顆粒隨濾液穿過過濾介質。在形成初始濾渣層後,濾渣層對過濾起主要作用,這時大、小顆粒均被截留,例如板框壓濾機的過濾。 ②深層過濾:過濾介質較厚,懸浮液中含固體顆粒較少,且顆粒小於過濾介質的孔道。過濾時,顆粒進入後被吸附在孔道內,例如多孔塑料管過濾器、砂濾器的過濾。 ③篩濾:過濾截留的固體顆粒都大於過濾介質的孔隙,過濾介質內部不吸附固體顆粒,例如轉筒式過濾篩濾去污水中的粗粒雜質。在實際的過濾過程中,三種方式常常是同時或相繼出現。

Ⅹ 過濾分為哪幾種類型

過濾按功能分類,可以分為三種類型,具體如下:

1、刷式

刷式過濾器種類有:全自動不銹鋼刷式過濾器,手搖不銹鋼刷式過濾器。其主要作用就是除掉水裡的懸浮物,降低水裡的懸浮物濃度,顆粒物,降低濁度,凈化水質,減少系統污垢、菌藻、銹蝕,凈化水質等。

2、全自動

全自動是過濾行業廣泛應用的一套設備,傳統過濾產品的納污量小、易受污物堵塞、過濾部分需拆卸清洗且無法監控過濾器狀態等眾多缺點克服,具有對原水進行過濾並自動對濾芯進行自動清洗排污的功能。

3、自清洗

它是一種利用濾網直接攔截水中的雜質,去除水體懸浮物、顆粒物,降低濁度,凈化水質,減少系統污垢、菌藻、銹蝕等產生,以凈化水質及保護系統其他設備正常工作的精密設備。

主要組件有:電機、電控箱、控制管路、主管組件、濾芯組件、316L不銹鋼刷、框架組件、傳動軸、進出口連接法蘭等。

(10)驅動設備過濾和類過濾擴展閱讀:

過濾常用介質

織物是最為常用的過濾介質,工業上稱為濾布或濾網。而這其中最為常用的尤屬不銹鋼濾布或不銹鋼濾網等過濾製品。不銹鋼絲機織成各種規格網(布),具有良好的耐酸、耐鹼、耐高溫,抗拉力強和耐磨性強等性能。

1、不銹鋼網絲材質:SUS304, SUS304L, SUS316, SUS316L最為常用,SUS201,SUS202,SUS302,SUS430亦可。

2、不銹鋼絲編織方式:平紋編織、斜紋編織、席形編織、竹花編織、反差編織、五綜編織。其中平紋不銹鋼網是最為常見的編織方法,主要特點是經向和緯向絲徑的密度相同。

性能:具有過濾性能穩定、精細、耐高溫氧化、耐腐蝕性能好,比普通過濾材料經久耐用,光潔度高等。氣體、液體、固體等不同介質對過濾網的耐酸鹼耐候性要求不同。

用途:用於航天、石油、化工、化纖、橡膠、車胎製造、冶金、醫葯、食品等行業等行業。

閱讀全文

與驅動設備過濾和類過濾相關的資料

熱點內容
惠州超濾膜塑膠配件 瀏覽:223
中國打越南有哪些電影 瀏覽:648
日本喪屍電影大全集 瀏覽:112
四川edi設備主機 瀏覽:175
凈水器多少錢一台哪裡有賣 瀏覽:948
污水廠裝什麼門好 瀏覽:69
廢水處理廠總承包項目 瀏覽:512
底部過濾魚缸安裝圖解 瀏覽:420
口腔診所污水怎麼檢測 瀏覽:980
同志電影大尺度 瀏覽:130
桌子下脫內褲什麼電影 瀏覽:949
污水處理鎳用什麼葯 瀏覽:113
韓國愛情片大尺度 瀏覽:160
京溪污水廠工藝 瀏覽:536
蒸餾乙醇的冷凝裝置 瀏覽:812
小米空氣凈化器回收賣多少錢 瀏覽:471
李采潭演模特的電影 瀏覽:810
如何看麵包車空調濾芯型號 瀏覽:123
超濾工藝優缺點 瀏覽:250
filter過濾敏感詞 瀏覽:713