Sfilter过滤驱动框架

本文详细介绍了Sfilter过滤驱动框架的工作原理和实现过程,包括如何监控移动设备、文件系统设备以及卷设备对象。通过IoRegisterFsRegistrationChange注册回调函数,实现实时监控设备插入并绑定过滤设备。在IRP分发函数中,针对不同操作如Create、Read、Write、SetInfo、Close制定了相应的过滤规则。此外,还讨论了如何放行特定类型的请求,如内核请求、本进程请求和系统进程请求。文章最后提及了调试过滤驱动的一些命令。
摘要由CSDN通过智能技术生成

原理

Sfilter框架是基于NT驱动框架之上通过设备栈绑定的形式绑定的,驱动自己生成一个设备(过滤设备对象),调用系统提供的绑定API,绑定到目标设备上。并返回一个在未绑定之前目标设备所在设备栈的最顶层设备。这样发往下层的IRP或者发往上层的数据都会被过滤设备截获。

移动设备链接到系统中时系统会为其生成一个文件系统设备,然后系统会向文件系统设备发送mount IRP,文件系统设备接收到IRP后会动态生成卷设备对象【盘符】

如果要监控移动设备卷设备对象,首先要先生成过滤设备对象绑定到移动设备的文件系统设备对象上拦截mount IRP请求,之后在该IRP内生成过滤设备对象绑定到卷设备对象上【两次绑定操作】

IoRegisterFsRegistrationChange函数可注册一个动态监控移动设备对象插入时生成文件系统设备对象的回调函数

关于固定的卷设备对象可直接通过函数一一枚举出来,然后依次生成过滤设备对象绑定上去即可。

实现

函数主流程

首先创建控制设备和符号链接用于与R3客户端通信。然后注册过滤分发函数【内部对客户端IRP和其他进程IRP分开处理】

分配一个Fastio结构体大小的内存,然后对其内部初始化Fastio的操作函数【内部全部返回False,不添加会有问题,只需要简单的禁用处理即可】之后将该结构体注册到DriverObject->FastIoDispatch中。

接下来通过IoRegisterFsRegistrationChange注册监控文件系统设备创建的回调函数。函数内判断设备插入时,生成过滤设备对象绑定到对应的文件系统设备对象上【通过判断系统版本使用绑定函数】用来监控mount IRP【回调函数参1为监控到到文件系统设备对象,参2为bool值表示文件系统是插入还是拔掉。函数内创建的过滤设备对象会和文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值