阅读:2055回复:7
请问有人可以介绍一下sfilter的大体工作流程吗?
大家好,小弟刚学文件系统过滤驱动,听说入门应该看sfilter,但是觉得它还是太复杂了,尤其是Attach到文件系统啊,还有什么卷啊。。。我看filemon好像没有这么复杂的,现在搞到我快晕了。。。希望各位可以给我们这些新手介绍介绍,谢谢了!
|
|
沙发#
发布于:2007-04-23 15:45
可以参考楚狂人的<Windows文件系统过滤驱动开发教程>一边看,本版就有下载的,我也正在学习呢:)
下面引用以前的帖子: sfilter的基本思路其实不复杂,sfilter先创建一个control device object,用于接受应用程序的控制,然后创建多个device object,绑定到文件系统驱动的FDO上(譬如NTFS,FAT,CDFS,等等),这里要注意不要绑到文件系统识别器(file system recognizer)上,它是用来加载真正的文件系统驱动程序的。 绑定完文件系统驱动的FDO后,sfilter就可以收到发给各个文件系统驱动程序的irp了,这样你可以在windows要求文件系统装配各个卷的时候获得消息,然后sfilter就可以得到文件系统为各个卷所创建的device object,然后再创建FiDO,绑定到这些volumn object上,下面的工作就是用你的FiDO过滤发往各个卷的irp。 |
|
板凳#
发布于:2007-04-23 18:23
感谢你的回复,楚狂人的<Windows文件系统过滤驱动开发教程>我有看过一些,不过有一个地方不是太明白,在Filemon里面首先创建了一个control device object,并设置了分派例程,而在Attach到设备栈的时候再创建一个vdo,但没有分派例程。那既然是vdo绑定到设备栈上面,为什么所有的irp都被发送到cdo的例程,而不是发送给vdo的呢?希望大家能指点一下,谢谢!!
|
|
地板#
发布于:2007-04-23 18:27
虽然CDO和FDO公用同一个派发例程,但是你在派遣例程中做区分,然后走不同的分支既可;
|
|
|
地下室#
发布于:2007-04-25 05:19
我觉得基本上filter的流程都是差不多的
首先是Driver自身——包括 DriverEntry, Unload, Dispatch 其次就是 AttachtoDevice,就是挂接到你想filter的device上 最后就是具体的 Dispatch IRP处理,这个各有不同 对于sfilter,是Attach到volume上的,对于tdi,则是attach 到 tcp, rawip, udp上 sfilter在DriverEntry里先去attach已加载的fs volume,然后注册一个Notify,处理动态加载的fs 至于dispatch,首先抓住几个关键的函数 IRP_CREATE —— 获取文件名 IRP_READ/WRITE —— 读写 我想开始的时候先抓住主要的东西,把那些utility的函数抛开,可能更有助于了解sfilter的整个结构——此时你会发现其实filter都差不多,而不同和难点则在于 Attach这个动作和IRP的处理 呵呵,我最近也在搞fs filter和tdi filter,以上是一些体会,希望对你有帮助 |
|
|
5楼#
发布于:2007-04-25 05:25
我觉得最复杂的就是 attach这一块了
把这块搞明白,基本上sfilter的结构就明白了 |
|
|
6楼#
发布于:2007-04-27 09:35
可能是更新服务器的问题吧,几天没上了,所以现在才看到
感谢大家的回复,现在已经明白了不少,继续学习中。。谢谢! |
|
7楼#
发布于:2008-04-02 23:23
我也正在学习SFILTE,看出狂人教程2遍拉
还是晕的很啊 有没有专门针对SFILTER框架讲解的阿 最好从其整体结构开始分析 |
|
|