Windows过滤驱动程序的概念
??? 過濾,filter,過濾是在不影響上層和下層接口的情況下,在Windows系統內核中加入新的層,從而不需要修改上層的軟件或者下層的真實驅動程序,就加入了新的功能。 ?
??? 舉個例子:
??? 實時監控的反病毒程序。任何高層軟件或者Windows的文件系統都沒有考慮過應該什么時候去檢查文件中是否含有某個病毒的特征 碼,也不應該要求某個軟件或者Windows的文件系統去考慮這些;反病毒程序需要在不改變文件系統的上層和下層接口的情況下,在中間加入一個過濾 層,這樣就可以在上層軟件讀取文件、下層驅動提供數據時,對這些數據進行掃描,看其中是否含有某個病毒的特征碼。這是一個很典型的過濾過程。 ?
?
進行過濾的最主要的方法是對一個設備對象(Device Object)進行綁定。
Windows系統之所以可以運作,是因為Windows中已經存在許多提供了各種功能的設備對象。這些設備對象接收請求,并完成實際硬件的功能。 ?
我們可以首先認為:一個真實的設備對應一個設備對象(雖然實際對應關系可能復雜得多)。通過編程可以生成一個虛擬的設備對象,并“綁定”(Attach)在一個真實的設備上。一旦綁定,則本來操作系統發送給真實設備的請求,就會首先發送到這個虛擬設備。 ?
在WDK中,有多個內核API能實現綁定功能。下面是其中一個函數的原型: ?
NTSTATUS ?
??? IoAttachDevice( ?
??????????? IN PDEVICE_OBJECT? SourceDevice, ?
??????????? IN PUNICODE_STRING? TargetDevice, ?
??????????? OUT PDEVICE_OBJECT? *AttachedDevice ?
); ?
?
在綁定一個設備之前,先要知道如何生成一個用于過濾的過濾設備。函數IoCreateDevice被用于生成設備: ?
NTSTATUS ?
IoCreateDevice( ?
??????? IN PDRIVER_OBJECT? DriverObject,??? ?
??????? IN ULONG? DeviceExtensionSize, ?
??????? IN PUNICODE_STRING? DeviceName? OPTIONAL, ?
??????? IN DEVICE_TYPE? DeviceType, ?
??????? IN ULONG? DeviceCharacteristics, ?
??????? IN BOOLEAN? Exclusive, ?
??????? OUT PDEVICE_OBJECT? *DeviceObject ?
??????? ); ?
DriverObject是本驅動的驅動對象。這個指針是系統提供,從DriverEntry中傳 入。DeviceExtensionSize是設備擴展,請先簡單地傳入0。DeviceName是設備名稱。一個規則 是:過濾設備一般不需要名稱,所以傳入NULL即可。DeviceType是設備類型,保持和被綁定的設備類型一致即可。 DeviceCharacteristics是設備特征,在生成設備對象時筆者總是憑經驗直接填0,然后看是否排斥,選擇FALSE。
總結
以上是生活随笔為你收集整理的Windows过滤驱动程序的概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP 滑动窗口简述
- 下一篇: windows 内核情景分析