筛选器管理器概念

筛选器管理器 (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 堆栈,其中包含两个筛选器管理器帧、微型筛选器驱动程序实例和一个旧筛选器驱动程序。