troylees
驱动牛犊
驱动牛犊
  • 注册日期2006-05-10
  • 最后登录2009-05-01
  • 粉丝0
  • 关注0
  • 积分678分
  • 威望128点
  • 贡献值0点
  • 好评度67点
  • 原创分0分
  • 专家分0分
阅读:2055回复:7

请问有人可以介绍一下sfilter的大体工作流程吗?

楼主#
更多 发布于:2007-04-17 22:30
  大家好,小弟刚学文件系统过滤驱动,听说入门应该看sfilter,但是觉得它还是太复杂了,尤其是Attach到文件系统啊,还有什么卷啊。。。我看filemon好像没有这么复杂的,现在搞到我快晕了。。。希望各位可以给我们这些新手介绍介绍,谢谢了!
ling592
驱动牛犊
驱动牛犊
  • 注册日期2007-04-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分250分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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。
troylees
驱动牛犊
驱动牛犊
  • 注册日期2006-05-10
  • 最后登录2009-05-01
  • 粉丝0
  • 关注0
  • 积分678分
  • 威望128点
  • 贡献值0点
  • 好评度67点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-04-23 18:23
感谢你的回复,楚狂人的<Windows文件系统过滤驱动开发教程>我有看过一些,不过有一个地方不是太明白,在Filemon里面首先创建了一个control device object,并设置了分派例程,而在Attach到设备栈的时候再创建一个vdo,但没有分派例程。那既然是vdo绑定到设备栈上面,为什么所有的irp都被发送到cdo的例程,而不是发送给vdo的呢?希望大家能指点一下,谢谢!!
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
地板#
发布于:2007-04-23 18:27
虽然CDO和FDO公用同一个派发例程,但是你在派遣例程中做区分,然后走不同的分支既可;
人总在矛盾中徘徊。。。
yeats
驱动牛犊
驱动牛犊
  • 注册日期2001-04-10
  • 最后登录2012-02-17
  • 粉丝0
  • 关注0
  • 积分142分
  • 威望86点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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,以上是一些体会,希望对你有帮助
[url]http://oopslab.net[/url]
yeats
驱动牛犊
驱动牛犊
  • 注册日期2001-04-10
  • 最后登录2012-02-17
  • 粉丝0
  • 关注0
  • 积分142分
  • 威望86点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-04-25 05:25
我觉得最复杂的就是 attach这一块了
把这块搞明白,基本上sfilter的结构就明白了
[url]http://oopslab.net[/url]
troylees
驱动牛犊
驱动牛犊
  • 注册日期2006-05-10
  • 最后登录2009-05-01
  • 粉丝0
  • 关注0
  • 积分678分
  • 威望128点
  • 贡献值0点
  • 好评度67点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-04-27 09:35
可能是更新服务器的问题吧,几天没上了,所以现在才看到
感谢大家的回复,现在已经明白了不少,继续学习中。。谢谢!
shyandsy
驱动牛犊
驱动牛犊
  • 注册日期2007-12-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分447分
  • 威望183点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-04-02 23:23
我也正在学习SFILTE,看出狂人教程2遍拉
还是晕的很啊

有没有专门针对SFILTER框架讲解的阿
最好从其整体结构开始分析
选择喜欢做的事,就要努力去做!
游客

返回顶部