首页
社区
课程
招聘
[分享]关于文件系统过滤驱动sFilter框架的话题。MiniFilter框架已经很成熟了,sFilter框架还能用吗?
发表于: 2014-6-18 17:41 11719

[分享]关于文件系统过滤驱动sFilter框架的话题。MiniFilter框架已经很成熟了,sFilter框架还能用吗?

2014-6-18 17:41
11719
我在工作中,经常听到有人说:

(1)sFilter框架支持x64位系统吗?
(2)sFilter框架从Windows7系统开始就不好用了。应该使用MiniFilter框架来开发程序。MiniFilter框架好用,不容易出错,稳定性好。
(3)为什么用sFilter框架写的文件系统过滤驱动程序,在32位和64位的Win7、Win8、Win8.1系统上,经常莫名其妙地出现错误。

我的这篇帖子很简单,就一点点话语, 主要是说一下有关sFilter框架的问题。

其实啊,sFilter框架一直都可以使用的。
我的程序,在32位和64位的Win7、Win8、Win8.1系统上都没有出现问题。
sFilter直接操作IRP。很多人没有理解好。导致很多问题出现。所以微软封装了MiniFilter框架。

为什么呢?
理由很简单:

只要WDK开发包支持内核函数IoRegisterFsRegistrationChange和IoUnregisterFsRegistrationChange, 那么sFilter框架就可以用上。

所以,就因为这样的原因,使得很多人都学MiniFilter开发。

您要知道,文件过滤里面,最难的是: 缓存管理、双缓存切换。
早在2003年的时候,就已经有文件系统透明加密的概念了。从APIHooK 到LayerFSD,业界总共摸索了10年。
Layerfsd,通常指分层的文件过滤驱动。
简单来说,就是通过使用多层次的文件过滤驱动,或者自定义的虚拟文件系统,或者两者相结合的方式,来实现对文件的多重过滤功能。

我扯了这么多废话,其实就是想告诉大家,sFilter框架,到目前为止,都是可以使用的。

Microsoft WDK文档是这样描述的:

In Microsoft Windows XP and later, when a file system filter driver calls IoRegisterFsRegistrationChange, its notification routine is also called immediately
for all currently registered file systems (that is, file systems that have already called IoRegisterFileSystem but have not yet called IoUnregisterFileSystem).
Because the caller's notification routine can be called even before IoRegisterFsRegistrationChange returns, a filter driver should not call this routine
until after it has created any data structures that it needs in order to process these notifications.

Additionally, in Windows XP and later, IoRegisterFsRegistrationChange ignores RAW devices.

下面给出的代码是:IoRegisterFsRegistrationChange内核函数的代码实现



我希望这篇短小的文章,会对大家有所帮助。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hhs
2
纯粹过来支持大牛的。。
2007年都注册了,没好好学到多少东西。。
没坚持下来。。
2014-6-19 10:36
0
雪    币: 220
活跃值: (726)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看来LZ对这个领域很有研究!
http://bbs.pediy.com/showthread.php?t=188837
请LZ帮小弟解决下实际问题,看代码中都有什么BUG
2014-6-19 10:50
0
雪    币: 23
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好文 不过 MiniFilter 现在是主流了
2014-6-19 11:19
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
5
一直用sfilter 感觉很不错的~
虽然minifilter实现layeredFSD比sfilter简单很多~
minifilter主要是需要跟M$申请那个神奇数字,所以你懂得~
2014-6-19 13:47
0
雪    币: 63
活跃值: (17)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
用sfilter的也是可以的,
只是vista+以后,如果你想支持TxF,必须要走minifilter,因为微软没有提供sfilter支持。
另外IoRegisterFsRegistrationChange据说存在一个竞态问题,微软推荐使用
IoRegisterFsRegistrationChangeMountAware。
2014-6-22 09:51
0
雪    币: 557
活跃值: (449)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
用sFilter框架,还要注意  双缓存的切换。
在做透明加解密的时候,采用明文和密文这2个缓冲区,要进行切换。就是要能够在切换时,清除缓存。

主要是使用内核函数:
CcFlushCache( )
MmFlushImageSection( )
CcPurgeCacheSection( )
2014-7-9 16:13
0
游客
登录 | 注册 方可回帖
返回
//