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