文件系统 Minilter 驱动
声明:
本系列文章源于 ,所有权利归原作者所有,翻译的目的只为交
流和学习。
说明:
所有 及 均简写为 和
所有文件系统过滤驱动均简写为
所有基于 的 即 均简写为
版本:
第 1 章.Filter 管理器和 Minilter 驱动架构
管理器是一个内核模式驱动,它遵照 文件系统 模型并
暴露了 中必需的一般功能。利用这些功能,第三方开发者可以写
驱动,这样的驱动比 更易于开发,因此缩短了开发过
程同时制造出更高质量、更灵活的驱动。
本章包括!
一、Filter 管理器概念
管理器随 " 一起被安装,但它只在一个 驱动被加
载时才会起作用。 管理器绑定到目标卷的文件系统栈上。# 驱动
为它要过滤的 操作而通过向 管理器注册来间接绑定到文件系统栈上。
$ 过滤驱动在文件系统 栈中的位置,相对于其他过滤驱动来说是
在系统启动时由它的加载顺序组决定的。例如,一个 %& 过滤驱动在栈
中的位置应该高于一个 过滤驱动,因而它能在文件被复制到远程
服务器之前探测病毒并消除文件中的病毒。因此,'(& 加载顺
序组中的过滤驱动的加载要先于 组中的过滤驱动。每一
个加载顺序组都有一个相应的系统定义的类和 ) 文件中要使用的类 *+。
像 过滤驱动一样, 驱动的绑定也按照一个特定的顺序。不过,
绑定体的顺序是由一个叫 altitude 的唯一标识符决定的。# 驱动在特
定卷上的一个特定 & 的绑定体被称为这个 驱动的一个
。
# 驱动的 & 确保它的实例总是在相应的位置被加载,它决定
管理器以什么顺序来调用 驱动来处理 。'& 由微软
分配和管理。
下图展示了一个用 管理器简化后的 栈和三个 驱动。
用 管理器简化后的 栈和 # 驱动
# 驱动能过滤 操作、, 和 - 操作。
对每一个它要过滤的 操作它都可以注册一个 - 例程,一
个 -例程或二者都注册。当处理一个 操作时, 管
理器调用每个 为此操作注册的 - 例程。当该 - 例程
返回时, 管理器调用下一 驱动为此操作注册的 - 例程。
举个例子,假设上图中的三个 驱动都为同一 操作注册了
- 例程,则 管理器会以 & 由高到低的顺序.'/0/12调用它
们的 - 例程,然后把此 操作转寄给下一较低级的驱动进
一步处理。当 管理器接收到此 请求的完成时,它以相反的顺序即由低
到高.1/0/'2调用每一个 驱动的 - 例程。
为了同 过滤驱动协同工作, 管理器可以绑定 设备对象到同
一个文件系统 栈的多个位置。每一个 管理器的 设备对象都叫做
一个 , 。从 过滤驱动的角度来说,每一个 管理器 , 仅
仅是另外的一个 过滤驱动。
每一个 管理器 , 都表示一个 & 区间。如果某个 过滤
驱动被绑定到文件系统栈上,系统就为在该 过滤驱动之上或之下的
& 范围绑定一个 管理器 , ,来确保 驱动绑定到正
确的位置上。
如果某个 驱动被卸载并重加载,则它会被重加载到同一 , .它从
其中被卸载2中的同一 & 上。
用两个 管理器 和一个 过滤驱动简化后的 栈
二、Filter 管理器模型的优势
管理器模型在现有的 过滤驱动模型之上提供了以下优势!
33比 加载顺序更易控制4不像 过滤驱动,一个 驱
动可以在任何时候被加载且因其 & 被绑定到合适的位置。
33在系统运行期间的卸载能力4不像在系统运行期间不能被卸载的
过滤驱动, 驱动能在任意时间被卸载且必要时它能阻止它自
己被卸载。 管理器同步所有 驱动绑定体的安全移除,
且它会处理 驱动被卸载之后完成的操作。
33仅需处理必要操作的能力4 管理器使用 - 模型,在这个模
型中 驱动可以挑选要过滤的 操作的类型.基于 的/,
或 2。# 驱动只接收它已经为其注册了 -
例程的 操作。# 驱动可以注册一个唯一的 或
- 例程/或两者都注册,它可以忽略某些类型的操作,
比如分页 和缓存的 。
33内核栈的应用更加高效4 管理器被优化为减少了它所使用的内核栈
的数量,- 模型也大大减少了栈上的 驱动之间的冲
突。 管理器通过支持 初始化的 .这仅能被栈中 " 驱
动看见2减少了递归 的冲突。
33冗余代码更少4 管理器用多种方法减少了 驱动所必需的
代码量,比如提供名产生操作的下部构造和为多个 驱动的使
用缓存文件名。0 管理器绑定卷并通知 驱动什么时候卷
评论0
最新资源