首页
论坛
课程
招聘
[旧帖] [原创]windows文件过滤驱动sfilter的一点心得 0.00雪花
2011-11-16 10:39 3853

[旧帖] [原创]windows文件过滤驱动sfilter的一点心得 0.00雪花

2011-11-16 10:39
3853
今天,再次看了一遍sfilter源码,在此写点心得,希望能帮助到一些朋友。
1. 设备的问题。sfilter一共创建了3类设备:
     1)自己的CDO。这个设备是用来与应用层通信的,需要名字:\FileSystem\Filters\XXX。
     2)绑定文件系统CDO的设备。这个设备是用来绑定文件系统的CDO,绑定的目的是能截获文件系统的IRP_MJ_FILE_SYSTEM_CONTROL请求,在这里可以得到移动设备卷挂载/卸载请求,从而实现卷的动态挂载。
     3)绑定文件系统VDO的设备。这个设备用来绑定文件系统的VDO,绑定的目的是截获文件的操作请求。
    由此可以看出,如果不考虑动态挂载,不考虑与应用层通信,文件过滤驱动也可以像其它过滤驱动一样,仅仅绑定一个设备就行。比如想绑定ntfs文件系统,那么通过内核设备枚举例程IoEnumerateDeviceObjectList对驱动设备\FileSystem\Ntfs进行设备枚举,绑定其所有没有名字的设备对象,这样,对本机上ntfs的(不包括后插入的移动设备)文件系统过滤驱动绑定就完成了,直接实现文件操作的分发函数就行。

2. 绑定的问题。在注册的文件系统变动回调函数中绑定文件系统的CDO和VDO。文件系统变动回调函数是在文件系统的激活和注销的时候调用的,但是在Win XP及之后的版本中,加载过滤驱动后,对已经激活的文件系统也会枚举一遍(除了Raw)。
    1)CDO的绑定。传给文件系统变动回调函数的设备对象就是文件系统的CDO,绑定的时候需要判断:CDO指向的驱动设备不能是文件对象识别器\FileSystem\Fs_Rec。
    2)VDO的绑定。绑定VDO的时候需要判断:不能是被绑定过的;设备类型要正确;设备对象没有设备名;设备对象对应的驱动对象不是卷影\FileSystem\VolSnap。
    至此,本机上固定的卷设备都绑定好了,还剩下动态加载的移动设备卷的绑定。在IRP请求的MajorFunction为IRP_MJ_FILE_SYSTEM_CONTROL,MinorFunction为IRP_MN_MOUNT_VOLUME的请求中,进行动态挂载,动态的绑定文件系统的卷设备。移动设备的文件系统卷设备在irpsp->Parameters.MountVolume.Vpb->DeviceObject中,这个卷设备对象是不可用的,需要等到底层请求完成后,才是有效的对象,这时才能对其进行绑定。可是在IRP发送到底层后,其VPB指针可能失效,于是就要在IRP下发前将卷设备对象Vpb->RealDevice保存,在绑定时,可以通过Device->Vpb->DeviceObject得到文件系统的卷设备,从而进行绑定。

看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 13
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chudech 活跃值 2011-11-16 11:11
2
0
回帖学习学习!!
雪    币: 15
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_cffpvtan 活跃值 2022-7-28 16:59
3
0
总结的真好!!!niubility
游客
登录 | 注册 方可回帖
返回