下載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