[转]文件过滤系统驱动开发Filemon学习笔记与filemon.exe

本文介绍了Windows文件过滤驱动开发,特别是通过Filemon的例子,详细讲解了如何创建设备对象以实现与应用层的交互,以及如何处理文件操作的拦截和监控。Filemon驱动通过创建控制设备对象和符号链接,实现与用户界面的通信,同时利用IoCreateDevice和IoCreateSymbolicLink等函数进行设备对象的创建和管理。
摘要由CSDN通过智能技术生成

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<

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值