程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 文件過濾系統驅動開發Filemon學習筆記

文件過濾系統驅動開發Filemon學習筆記

編輯:.NET實例教程

下載filemon源代碼

Windows文件過濾系統驅動開發,可用於硬盤還原,防病毒,文件安全防護,文件加密等諸多領域。而掌握核心層的理論及實踐,對於成為一名優秀的開發人員不可或缺。

Windows文件過濾系統驅動開發的兩個經典例子,Filemon與SFilter,初學者在經過一定的理論積累後,對此兩個例子代碼的研究分析,會是步入驅動開發殿堂的重要一步,相信一定的理論積累以及貫穿剖析理解此兩個例程後,就有能力開始進行文件過濾系統驅動開發的實際工作了。
對於SFilter例子的講解,楚狂人的教程已經比較流行,而Filemon例子也許因框架結構相對明晰,易於剖析理解,無人貼出教程,本人在剖析Filemon的過程中積累的一些筆記資料,陸續貼出希望對初學者有所幫助,並通過和大家的交流而互相提高。

Filemon學習筆記 第一篇:

Filemon的大致架構為,在此驅動程序中,創建了兩類設備對象。
一類設備對象用於和Filemon對應的exe程序通信,以接收用戶輸入信息,比如掛接或監控哪個分區,是否要掛接,是否要監控,監控何種操作等。此設備對象只創建了一個,在驅動程序的入口函數DriverEntry中。此類設備對象一般稱為控制設備對象,並有名字,以方便應用層與其通信操作。
第二類設備對象用於掛接到所須監控的分區,比如c:,d:或e:,f:,以便攔截到引應用層對該分區所執行的讀,寫等操作。此類設備對象為安全起見,一般不予命名,可根據須監控多少分區而創建一個或多個。

驅動入口函數大致如下:

NTSTATUS DriverEntry(    IN PDRIVER_OBJECT DriverObject,     IN PUNICODE_STRING RegistryPath     ){    NTSTATUS                ntStatus;    PDEVICE_OBJECT          guiDevice;    WCHAR                   deviceNameBuffer[]  = L"\\Device\\Filemon";    UNICODE_STRING          deviceNameUnicodeString;    WCHAR                   deviceLinkBuffer[]  = L"\\DOSDevices\\Filemon";    UNICODE_STRING          deviceLinkUnicodeString;    ULONG                   i;    DbgPrint (("Filemon.SYS: entering DriverEntry\n"));    FilemonDriver = DriverObject;    //        // Setup the device name    //        RtlInitUnicodeString (&deviceNameUnicodeString,                          deviceNameBuffer );    //    // Create the device used for GUI communications    //此設備對象用來和用戶交互信息    ntStatus = IoCreateDevice ( DriverObject,                                sizeof(HOOK_EXTENSION),                                &deviceNameUnicodeString,                                FILE_DEVICE_FILEMON,                                0,                                TRUE,                                &guiDevice );    //    // If successful, make a symbolic link that allows for the device    // object''s Access from Win32 programs    //    if(NT_SUCCESS(ntStatus)) {        //        // Mark this as our GUI device        //        ((PHOOK_EXTENSION) guiDevice->DeviceExtension)->Type = GUIINTERFACE;        //        // Create a symbolic link that the GUI c
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved