Windows驱动_文件系统微小过滤驱动之一初识MiniFilter

本文介绍了Windows驱动中的MiniFilter,重点讲解了FilterUnloadCallback回调函数和FltReleaseFileNameInformation接口在文件系统微小过滤驱动中的作用。
摘要由CSDN通过智能技术生成
          人的一生,就那么几十年,所有的人都无法知道下一刻会发生什么,我们活在当下,只能努力将自己目前的工作或生活过好。船到桥头自然直,况且,自己这么多年,经历了多多少少的风浪太多了,说到底还是不够自信,我应该慢慢改正这个缺点。不要事事都杞人忧天,一定的危机感是需要的,但是千万不要过了。

          由于原始的文件系统过滤驱动有一些缺陷,它使用了一些非常规的方法,有些驱动微软都无法做到全部的控制,所以一旦这样,就极有可能让windows系统本身不稳定,或者造成其performance低下,所以微软极力的推出了下一带的文件系统小端口过滤驱动,这是新一代接口,微软使其全部在自己的可控制的范围内,我不想像之前介绍原始的文件系统过滤驱动一样,用10个篇章来阐述其原理,因为微软的极力推荐,所以文件系统微小过滤驱动,在WDK中有大量的例子。我将尽量从这些例子出发,从例子到理论的方式来阐述。
 
         和微软之前推出的各种新的框架一样,它都会增加一些部件,以驱动的形式增加到内核中,从XP到WIN8
所用的磁盘空间越来越大,从几百M到几十G,相信这些新推出的框架的贡献不小。这里对于文件系统小端口
过滤驱动,微软增加了一种将过滤驱动管理器的部件,它以内核模式驱动的形式增加到操作系统中。但是一般
不会激活,也就是只是装载到系统中,但是不起任何作用,当文件系统小端口驱动加载的时候,它才被激活。
     
         File System Minifilter Drivers

         这个一直不知道怎么翻译,是叫微小,还是微了,最后还是叫微小吧。文件系统微小过滤驱动
  
         Filter Manager and Minifilter Driver Architecture

         过滤管理器是一个内核模式的驱动,符合原始的文件系统过滤驱动模式,暴露很多文件系统过滤驱动需要的很多公用的功能函数。通过这些函数,第三方的开发者可以开发出微小文件系统过滤驱动,它比原始的文件系统过滤驱动更加简单,既缩短了处理周期,有使程序更加健壮。

          Filter Manager Concepts

          过滤管理器被装到Windows 系统中,其激活是在微小文件系统过滤驱动加载以后。过滤管理器将其自己附加在目标卷的文件系统堆栈上。微小文件系统哦你过滤驱动通过一些过滤管理器的IO操作相过滤管理器进行注册,间接的附加在文件系统堆栈上。

           原始的文件系统过滤驱动在文件系统IO堆栈的位置取决于其所在装载组。举例来说,病毒过滤驱动所在的组在堆栈中的位置应该比复制过滤驱动的高,因为病毒过滤驱动需要在文件发往复制过滤驱动之前,对文件进行检测和区分。因此,病毒过滤驱动所在的组肯定比复制过滤驱动所在的组先加载。每一个组都有一个与其相应的类和类GUID,这些都是在驱动的INF中定义的。

           像原始的文件系统过滤驱动一样,微小文件系统驱动也有固定的顺序,不过它的加载的顺序是通过一个叫做高度值来唯一决定的。微小文件系统过滤驱动在特别卷上的的特别的高度值称为其的实例。

           微小文件系统过滤驱动的高度值确保微小文件系统过滤驱动的实例相对于其他微小文件系统过滤驱动的实例总装载在合适的位置。这个位置也决定了过滤管理器调用其IO过滤操作的位置。高度值的分配和管理由微软控制。

           微小文件系统过滤驱动可以过滤基于IO操作的IRP,快速IO和文件系统过滤的回调操作(FSFilter)。对于每一个驱动选择的过滤操作,微小文件系统过滤都可以注册一个预前操作的回调函数和一个延后操作的回调函数。举例来说,比如有3个微小文件系统过滤驱动,在文件系统堆栈中的位置从高到低依次是A,B,C,所以预前回调函数的调用顺序是A,B,C,而延后操作的回调函数的操作顺序是,C,B,A.

           和原始文件系统过滤驱动一样,过滤过滤器可以附加其过滤设备在文件系统堆栈中的多个位置。每一个过滤管理器的过滤设备对象,我们叫做帧。从之前过滤管理器帧的观点看,每一个过滤管理器的帧就是另外一个原始过滤驱动。

           每一个过滤管理器的帧代表一组的高度值。过滤管理器可以调整存在的帧或创建新的帧去允许微小文件系统过滤驱动附加在正确的位置。
  
           过滤管理器不能够附加一个微小文件系统过滤驱动在两个原始的过滤驱动之间,除非,在他们之间有一个过滤管理器的帧存在。
  
           如果微小过滤驱动被卸载后重新安装,它还是会从其卸载的同样的帧里面的同样的高度值进行重新安装。
  
            Advantages of the Filter Manager Model

            Better control over filter load order
  
            通过高度值,可以更好的控制其的加载顺序。
  
            Ability to unload while system is running
  
            系统运行时,可以动态卸载。
  
            Ability to process only necessary operations
  
            只用去处理,关心的操作。
  
            More efficient use of kernel stack
  
            更有效的使用内核堆栈。
  
            Less redundant code
  
           更少的冗余代码
  
          Reduced complexity
  
          更容易开发
  
          Easier addition of new operations
  
          更容易增加新的操作
  
          Better support for multiple platforms
  
          更容易适应新平台
  
          Better support for user-mode applications
  
          更好的支持用户模式应用程序
  
          Filter Manager Support for Minifilter Drivers

          Loading and Unloading

           微小过滤驱动可以在系统运行时的任何时候加载。如果其微小过滤驱动的INF文件中指定了驱动启动类型,比如( SERVICE_BOOT_START, SERVICE_SYSTEM_START, or SERVICE_AUTO_START)微小过滤驱动和原始过滤驱动一样可以支持通过文件系统过滤驱动定义的已经存在的组定义的顺序加载.当系统运行的时候,微小过滤驱动可以通过服务启动请求(sc start,net start,or服务的API进行),或通过明确的加载请求(fltmc load FltLoadFilter或FilterLoad)

           微小过滤驱动的DriverEntry例程在其驱动加载的时候被调用。微小过滤驱动可以在其DriverEntry例程中执行一些实例初始化的动作,并调用FltRegisterFilter向过滤管理器注册回调函数,调用FltStartFiltering函数通知过滤管理器,微小过滤驱动已经对附加卷和过滤IO请求的操作做好了准备。

            微小过滤驱动在其INF文件中定义的实例被用来安装微小过滤驱动。其INF文件中必须定义一个默认的实例,也可以增加一些额外的实例。这些定义适应于所有的卷每一个实例定义包含一个实例名字,高度值,一个标志指明实例是否可以被自动附加,或者手动附加,还是都可以。默认的实例被用来排序微小过滤驱动,保证过滤管理器调用微小过滤驱动的绑定和安装回调函数都按正确的顺序操作。默认的实例也被用来处理一些调用者没有指定实例名的请求操作。

            过滤管理器在卷已经被绑定后,在卷上发生的第一个创建操作发生的时候,调用微小过滤驱动的InstanceSetupCallback例程,通知微小过滤驱动卷已经可用了。这也可以发生在FltStartFiltering函数返回之前,当过滤挂历器在系统启动阶段枚举已经存在的卷的时候。也可以实时发生在,一个已经被绑定,在一个明确附加请求之后
(fltmc attach FltA
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值