sfilter工作原理解析:监控与拦截文件系统操作

5星 · 超过95%的资源 需积分: 18 21 下载量 181 浏览量 更新于2024-10-18 收藏 36KB DOC 举报
"sfilter流程浅析" sfilter是一个文件系统过滤驱动,它的主要任务是监控并控制对文件系统的访问,特别是在涉及敏感文件操作时。它通过插入到文件系统驱动的IRP(I/O请求包)处理链中,来实现对系统操作的拦截和过滤。 在sfilter的工作流程中,首先在`DriverEntry`函数中创建控制设备对象(Control Device Object, CDO)。CDO是sfilter驱动的核心,它并不具有设备扩展,主要用作驱动程序的标识。创建CDO的代码如下: ```c RtlInitUnicodeString(&wstrName, L"\FileSystem\Filters\SFilter"); ntStatus = IoCreateDevice(pDriverObject, 0, // has no device extension &wstrName, FILE_DEVICE_DISK_FILE_SYSTEM, FILE_DEVICE_SECURE_OPEN, FALSE, &gSFilterControlDeviceObject); ``` 创建完CDO之后,sfilter需要将其与其他文件系统驱动的设备对象(Device Object, DO)绑定。这一步在`SfAttachToFileSystemDevice`函数中完成。这个过程涉及遍历系统中的所有文件系统,例如NTFS、FAT、CDFS等,并将sfilter的设备对象与它们绑定。绑定的关键在于避免与文件系统识别器(FileSystem Recognizer)交互,因为识别器是用来加载真实文件系统驱动的,而不是处理实际的I/O操作。 一旦sfilter成功地与各个文件系统的DO绑定,它就能捕获到发送给这些驱动的IRP。当Windows请求文件系统装载卷时,sfilter会接收到通知,然后它可以创建自己的设备对象,并将其附加到卷对象上。这样,sfilter就能拦截到发往各个卷的IRP,进一步分析其中的文件操作,如打开、读取、写入等。 对于涉及敏感文件的IRP,sfilter会根据预定义的规则或策略决定是否允许该操作继续。如果操作被认为是不安全的,sfilter可以选择拒绝(即失败,Fail)该IRP,从而阻止对敏感文件的访问。这种机制提供了额外的安全层,能够防止未经授权的访问或修改。 值得注意的是,sfilter还利用了`IoRegisterFsRegistrationChange`函数来注册文件系统的变更通知。这样,当系统有新的文件系统加载或卸载时,sfilter可以动态地适应这些变化,保持其过滤功能的有效性。 总结来说,sfilter的流程主要包括创建控制设备对象、绑定到文件系统设备对象以及监控和拦截IRP。通过这些步骤,sfilter实现了对文件系统操作的精细控制,增强了系统的安全性。对于那些想要深入研究文件系统过滤驱动的人来说,理解和分析sfilter的流程是非常有价值的。