FSFD入门 - 启

其实文件系统过滤驱动不难。

假如你是新手,我可以先告诉你这句体会。然后是转折——难在业务结合。

 

在这个系列中我不准备长篇大论一些虽然有限但确实已经很详尽的资料中阐述过的基础知识。最权威的资料:1、NTFSI; 2、WDK; 3、fastfat源码。

第3其实就在2中,特意提出来是为了强调源码的重要性,osr上某位MVP说过这么一句话:you should considered it as the document。而且经历过一段学习之后你就会知道,FSFD开发中能有份无误或者说思路正确的源码做参考是件多么幸福的事情。

 

写这个系列是因为我自己走过那段痛苦的探索过程(虽然现在仍然在探索)。不过我的驱动开发经验也十分有限,希望本系列能帮到你。

 

以我自己的体会来讲,刚刚进入FSFD开发的空间的人最头疼的就是FSFD是什么?我凭什么相信你FSFD就能实现透明地过滤和控制IO操作尤其是透明加解密?当初我甚至因为自己的驱动能打印出一条期望中信息或者令系统挂起而小小地激动了把。

 

既然叫FSFD,那么文件系统(FS)就脱不了干系。OS执行体中和FSFD直接关联的内核模式组件有:I/O管理器(I/O M)、虚拟内存管理器(VMM)、缓存管理器(CM)。别看都是mm,都强得顶不住!其他组件也有点联系,不过关系没那么铁。I/O M负责I/O,只要有I/O就跟她有关(用户模式下和内核模式下I/O相关的行动尽在她的掌握),I/O M的主要任务简言之就是把用户模式的IO操作转换为内核模式下的IO操作,并通过几种方式把操作传给各个要对该操作进行处理的部分,然后把处理结果返回给上层应用;出于效率的设计目的,只要你敢在Windows 为NT上动动,就得跟VMM和CM打交道了,都得人家罩着。

为啥我还没说FS那?这里就轮到他了。举个例子,假如你要读磁盘上的某个文件,那你得先打开这个文件createFile()或者openFile(),其实也就是对系统服务API NtCreateFile()或者NtOpenFile()的调用,I/O M会把这个调用转换成majorfunction code为IRP_MJ_CREATE的IRP(I/O请求包),发给FS打开文件,接下来I/O M会作为发起者根据上层服务发出各种IRP来通知FS要做什么事情,然后FS会根据IRP分别跟VMM、CM、磁盘(暂时先简作磁盘)等组件交互,把你交付的任务一一做处理并把结果返回给你。看出来了没?I/O M虽强,但没有兵权,更像是个传令官;其他组件功能相对单一而强大,就像是将军和粮官等,都需要FS指挥和协调。所以,你可以认为文件I/O操作中挂帅掌印的是FS。

而你要写的FSFD,假如是upper filter那就是截获传令官给FS的命令,让他照你说的自己再做判断,由于FS很固执(处理逻辑都是既定的),相当于照你说的来了^.^而FS想返回给上层服务的结果也会在操作完成之后,在某一时刻(此时I/O M还没有检查这个结果)交到你手上,这时候你就可以为所欲为了,如把失败改成功把成功改失败,虽然不能完全把握后果,但理论上你的确可以这么做;假如是lower filter那就是截获FS给将军和粮官等系统其余组件及磁盘的“命令”,这个权力也不小=.=|||。是不是觉得FSFD生就奸臣相了?呵呵,其实NTFSI中有句话说的是正理,你在做的FSFD是FS的增值软件,即要扩展FS的价值。

这篇先到这,时间有点晚了,有空再补全。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值