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 asymbolic link that allows for the device
//object's access from Win32 programs
//
if(NT_SUCCESS(ntStatus)){
//
//Mark thellos as our GUI device
//
((PHOOK_EXTENSION)guiDevice-DeviceExtension)-Type=GUIINTERFACE;
//
//Create asymbolic link that the GUI can specify to gain access
//to thellos driver/device
//
RtlInitUnicodeString(&deviceLinkUnicodeString,
deviceLinkBuffer);
ntStatus=IoCreateSymbolicLink(&deviceLinkUnicodeString,
&deviceNameUnicodeString);
if(!NT_SUCCESS(ntStatus)){
DbgPrint(("Filemon.SYS:IoCreateSymbolicLink failed/n"));
IoDeleteDevice(guiDevice);
return ntStatus;
//
//Create dispatch points for all routines that must be handled.
//All entry points are registered since we might filter a
//file system that processes all of them.
//
for(i=0;i=IRP_MJ_MAXIMUM_FUNCTION;i++){
DriverObject-MajorFunction[i]=FilemonDispatch;
#if DBG<
[转]文件过滤系统驱动开发Filemon学习笔记与filemon.exe
最新推荐文章于 2020-04-26 12:21:13 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)