筛选器管理器概念

筛选器管理器 (FltMgr.sys) 是系统提供的内核模式驱动程序,用于实现和公开文件系统筛选器驱动程序中通常所需的功能。 第三方文件系统筛选器开发人员可以使用 FltMgr 的功能编写比旧文件系统筛选器驱动程序更易于开发的“微筛选器”驱动程序。 最终结果是缩短了开发过程和更高质量、更可靠的驱动程序。

FltMgr 随 Windows 一起安装,但仅在加载微筛选器驱动程序时变为活动状态。 它附加到目标卷的文件系统堆栈。 微筛选器驱动程序间接附加到文件系统堆栈,方法是向 FltMgr 注册微筛选器驱动程序选择筛选的 I/O 操作。

微筛选器按特定顺序附加。 操作系统通过 加载顺序组和高度确定附件的顺序。 特定卷上特定高度的微筛选器驱动程序的附件称为微筛选器驱动程序的 实例

微筛选器的高度:

  • 确保微筛选器驱动程序的实例始终加载到相对于其他微筛选器驱动程序实例的适当位置。
  • 确定 FltMgr 调用微筛选器驱动程序以处理 I/O 的顺序。

下图显示了一个简化的 I/O 堆栈,其中包含筛选器管理器和三个微筛选器驱动程序。

说明使用筛选器管理器和三个微筛选器驱动程序的简化 I/O 堆栈的关系图。

微筛选器驱动程序可以筛选基于 IRP 的 I/O 操作,以及快速 I/O 和文件系统筛选器 (FSFilter) 回调操作。 对于它选择筛选的每个 I/O 操作,微筛选器可以注册 操作前回调例程和/或操作后回调例程。 当 FltMgr 处理 I/O 操作时,它会为注册该操作的每个微筛选器驱动程序调用相应的回调例程。 当该回调例程返回时, FltMgr 为为操作注册的下一个微筛选器驱动程序调用相应的回调例程。

例如,假设此图中的所有三个微筛选器驱动程序都为同一 I/O 操作注册。 在这种情况下:

  • 当 FltMgr 收到 I/O 操作时,它会按从最高到最低高度的顺序调用微筛选器预操作回调例程, (A、B、C) 。 然后,FltMgr 将 I/O 请求转发到下一个较低的驱动程序进行进一步处理。
  • FltMgr 收到完成的 I/O 请求时,它会按反向顺序调用每个微筛选器驱动程序的后操作回调例程,从最低到最高 (C、B、A) 。

为了与旧版筛选器驱动程序实现互操作性, FltMgr 可以将筛选器设备对象附加到多个位置的文件系统 I/O 堆栈。 每个 FltMgr 的筛选器设备对象称为。 从旧筛选器驱动程序的角度来看,每个筛选器管理器帧只是另一个旧筛选器驱动程序。

每个筛选器管理器帧表示一个高度范围。 FlgMgr 可以调整现有帧或创建新帧,以允许微筛选器驱动程序附加到正确的位置。

FltMgr 无法在两个附加的旧版筛选器之间附加微筛选器,除非它们之间已有筛选器管理器框架。 如果微筛选器要附加到旧筛选器上方,则可以将其附加到它下面,具体取决于是否存在第二个附加的旧筛选器。 打算附加到旧筛选器下方的微筛选器可以改为附加到该旧筛选器的上方。

重要

请始终验证旧筛选器与微筛选器的互操作性,或考虑将旧筛选器替换为微筛选器。 有关详细信息,请参阅 移植旧版筛选器驱动程序的指南

如果卸载并重新加载微筛选器驱动程序,则会在从中卸载该驱动程序的同一帧中的相同高度重新加载该驱动程序。

下图显示了一个简化的 I/O 堆栈,其中包含两个筛选器管理器帧、微筛选器驱动程序实例和一个旧筛选器驱动程序。

图中显示了一个简化的 i/o 堆栈,其中包含两个筛选器管理器帧、微筛选器驱动程序实例和一个旧筛选器驱动程序。