文件系统Minifilter驱动

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Minifilter驱动能过滤IRP-I/O操作、fastI/O和FSFilter callback操作。对每一个它要过滤的I/O操作它都可以注册一个preopercallback例程,一个post-oper callback例程或二者都注册。当处理一个I/O操作时,filter管理器调用每个minifilter为此操 作注册的callback例程。当该callback例程返回时,filter管理器调用下一minifilter驱动为此操作注册的callback例程。 举个例子,假设上图中的三个minifilter驱动都为同一I/O操作注册了callback例程,则filter管理器会以altitude由高到低的顺 序(A,B,C)调用它们的pre-opercallback例程,然后把此I/O操作转寄给下一较低级的驱动进一步处理。当filter管理器接收到 此I/O请求的完成时,它以相反的顺序即由低到高(C,B,A)调用每一个minifilter驱动的post-opercallback例程。 为了同legacy过滤驱动协同工作,filter管理器可以绑定filter设备对象到同一个文件系统I/O栈的多个位置。每一个filter管 理器的filter设备对象都叫做一个frame。从legacy过滤驱动的角度来说,每一个filter管理器frame仅仅是另外的一个legacy 过滤驱动。
1.1 Filter管理器概念
Filter管理器随Windows一起被安装,但它只在一个minifilter驱动被加载时才会起作用。Filter管理器绑定到目标卷的文件 系统栈上。Minifilter驱动为它要过滤的I/O操作而通过向filter管理器注册来间接绑定到文件系统栈上。 Legacy过滤驱动在文件系统I/O栈中的位置,相对于其他过滤驱动来说是在系统启动时由它的加载顺序组决定的。例 如,一个antivirus过滤驱动在栈中的位置应该高于一个replication过滤驱动,因而它能在文件被复制到远程服务器之前 探测病毒并消除文件中的病毒。因此,FSFilterAnti-Virus加载顺序组中的过滤驱动的加载要先于FSFilterReplication组中的 过滤驱动。每一个加载顺序组都有一个相应的系统定义的类和INF文件中要使用的类GUID。 像legacy过滤驱动一样,minifilter驱动的绑定也按照一个特定的顺序。不过,绑定体的顺序是由一个叫altitude的唯一标 识符决定的。Minifilter驱动在特定卷上的一个特定altitude的绑定体被称为这个minifilter驱动的一个instance。 Minifilter驱动的altitude确保它的实例总是在相应的位置被加载,它决定filter管理器以什么顺序来调用minifilter驱动来处理 I/O。Altitudes由微软分配和管理。 下图展示了一个用filter管理器简化后的I/O栈和三个minifilter驱动。
分类: FileSystem Filters callbackfilterbuffer数据结构service工作
/pyq881120/article/details/6765076(第 1/90 页)2014-6-26 13:19:47
2011-09-09 22:59 2427人阅读 评论(0) 收藏 举报
件系统的不同)提供支持例程简化了I/O请求的过滤。Filter管理器代表minifilter驱动处理某些任务,比如pending IRP和枚举并绑定到文件系统栈。

更易于添加新操作.因为minifilter驱动仅为其将要处理的I/O操作注册,对新操作的支持可以在不破坏现有minifilter 驱动的前提下被添加到filter管理器中。

简化了复杂部分.Filter管理器通过为一般功能(像命名,上下文管理,在用户模式和内核模式之间通信,屏蔽文
/pyq881120/article/details/6765076(第 5/90 页)2014-6-26 13:19:47
文件系统Minifilter驱动 - pyq881120的专栏 - 博客频道 -
1.2 Filter管理器模型的优势
Filter管理器模型在现有的legacy过滤驱动模型之上提供了以下优势: 比filter加载顺序更易控制.不像legacy过滤驱动,一个minifilter驱动可以在任何时候被加载且因其altitude被绑定到 合适的位置。


在系统运行期间的卸载能力.不像在系统运行期间不能被卸载的legacy过滤驱动,minifilter驱动能在任意时间被卸 载且必要时它能阻止它自己被卸载。Filter管理器同步所有minifilter驱动绑定体的安全移除,且它会处理minifilter 驱动被卸载之后完成的操作。
/pyq881120/article/details/6765076(第 6/90 页)2014-6-26 13:19:47
文件系统Minifilter驱动 - pyq881120的专栏 - 博客频道 -
知filter管理器它已经准备好开始绑定到卷并过滤I/O请求了。 Minifilter驱动实例在INFfile被定义来用于安装这个minifilter驱动。Minifilter驱动的INF文件必须定义一个默认实例,它也可 以定义额外的实例。这些定义适用于所有的卷。每一个实例的定义都包括实例名,它的altitude和表示这个实例是否 可以被自动地、手动地或二者都有地绑定的标记。默认实例用于顺序化minifilter驱动以便filter管理器能以正确的顺序 调用minifilter驱动的挂载和实例setup例程。当调用者不指定一个实例名时也用外在的绑定请求来使用默认实例。 在卷挂载后,Filter管理器在首个create操作上调用它的InstanceSetupCallback例程来自动地通知minifilter驱动有一个可用 卷。当filter管理器在系统启动时枚举现有卷时,这会在FltStartFiltering返回之前发生。当某个卷被挂载或作为一个外部 绑定请求(fltmc attach, FltAttachVolume或FilterAttach)的结果时,那也会在运行时期间发生。 当minifilter驱动被卸载,其所绑定的卷被停止或作为一个外部断开请求(fltmc detach,FltDetachVolume或FilterDetach)的结果 时,一个minifilter驱动实例会被拆卸。如果minifilter驱动注册了一个InstanceQueryTeardownCallback例程,它可以通过调用 FilterDetach或FltDetachVolume来令一个外部断开请求失败。拆卸的过程如下: 如果minifilter驱动注册了一个InstanceTeardownStartCallbackcallback例程,那么filter管理器就会在这个过程的开始调 用它。在此例程汇中,minifilter驱动应该完成所有未决操作,取消或完成其他工作(比如由minifilter驱动产生的I/O 请求和停止队列化新的工作项)。
/pyq881120/article/details/6765076(第 2/90 页)2014-6-26 13:19:47
文件系统Minifilter驱动 - pyq881120的专栏 - 博客频道 -
文件系统Minifilter驱动
用Filter管理器简化后的I/O栈和Minifilter驱动

对用户模式应用程序的更好支持.Filter管理器为与minifilter驱动一起工作的用户模式服务及控制程序提供一般功 能。Filter管理器用户模式库,Filterlib.dll, 激活了用户模式服务或控制程序同minifilter驱动之间的通信。Filterlib.dll也 为管理工具提供了接口。
/pyq881120/article/details/6765076(第 3/90 页)2014-6-26 13:19:47
文件系统Minifilter驱动 - pyq881120的专栏 - 博客频道 -
每一个filter管理器frame都表示一个altitude区间。如果某个legacy过滤驱动被绑定到文件系统栈上,系统就为在该legacy 过滤驱动之上或之下的altitude范围绑定一个filter管理器frame,来确保minifilter驱动绑定到正确的位置上。 如果某个minifilter驱动被卸载并重加载,则它会被重加载到同一frame(它从其中被卸载)中的同一altitude上。

仅需处理必要操作的能力.Filter管理器使用callback模型,在这个模型中minifilter驱动可以挑选要过滤的I/O操作的 类型(基于IRP的,fastI/O或FSFilter)。Minifilter驱动只接收它已经为其注册了callback例程的I/O操作。Minifilter驱动可以 注册一个唯一的pre-oper或post-opercallback例程,或两者都注册,它可以忽略某些类型的操作,比如分页I/O和缓 存的I/O。

内核栈的应用更加高效.Filter管理器被优化为减少了它所使用的内核栈的数量,callback模型也大大减少了栈上 的minifilter驱动之间的冲突。Filter管理器通过支持filter初始化的I/O(这仅能被栈中lower驱动看见)减少了递归I/O的 冲突。

冗余代码更少.Filter管理器用多种方法减少了minifilter驱动所必需的代码量,比如提供名产生操作的基础架构和 为多个minifilter驱动的使用缓存文件名。Filter管理器绑定卷并通知minifilter驱动什么时候卷可用。Filter管理器被 优化为支持多处理器系统,这使得锁定更高效且更低错误的可能性。
文件系统Minifilter驱动 - pyq881120的专栏 - 博客频道 -
1.Filter管理器和Minifilter驱动架构
Filter管理器是一个内核模式驱动,它遵照legacy文件系统filter模型并暴露了FSFD中必需的一般功能。利用这些功能, 第三方开发者可以写minifilter驱动,这样的驱动比legacyFSFD更易于开发,因此缩短了开发过程同时制造出更高质量、 更灵活的驱动。
1.3Minifilter驱动的Filter管理器支持
本节描述filter管理器为minifilter驱动执行的一般任务提供的支持:
1.3.1 Loading and Unloading
Minifilter驱动能在系统运行期间的任意时刻被加载。如果minifilter驱动的INFfile 指定其驱动启动类型为 SERVICE_BOOT_START,SERVICE_SYSTEM_START或SERVICE_AUTO_START中的一个,那么minifilter驱动的加载就会依照现 有的FSFD加载顺序组定义来支持与legacy过滤驱动间的互用性。在系统运行期间,minifilter能通过一个服务启动请求 (scstart, net start或者服务APIs)或通过一个外部的加载请求(fltmc load,FltLoadFilter或FilterLoad) 被加载。 当minifilter驱动被加载时,它的DriverEntry例程会被调用,因此minifilter驱动可以执行将应用于该minifilter驱动的所有实例 的初始化操作。在它的DriverEntry例程中它调用FltRegisterFilter来向filter管理器注册callback例程,调用FltStartFiltering来通
文件系统Minifilter驱动 - pyq881120的专栏 - 博客频道 -

登录 | 注册


pyq881120的专栏

目录视图

摘要视图

订阅
有奖征资源,博文分享有内涵 实践文章
5月推荐博文汇总
第二届战神杯编程挑战月赛
2014 CSDN博文大赛
重金悬赏:OpenStack
文件系统Minifilter驱动

对多个平台的更好支持.Minifilter驱动可以运行在支持filter管理器的一切版本的Windows上。如果某个minifilter驱动 为一个在运行时不可用的I/O操作注册了,则filter管理器只是不对该操作调用minifilter驱动。Minifilter驱动可以以 程序的方式决定函数是否可用,filter管理器结构被设计为可扩展的。
文件系统Minifilter驱动
/pyq881120/article/details/6765076(第 4/90 页)2014-6-26 13:19:47
文件系统Minifilter驱动 - pyq881120的专栏 - 博客频道 -
用两个Filter管理器Frame和一个legacy过滤驱动简化后的I/O栈
相关文档
最新文档