取消注册微筛选器

微筛选器驱动程序的 FilterUnloadCallback 例程必须调用 FltUnregisterFilter 以取消注册微筛选器驱动程序。 调用 FltUnregisterFilter 会导致发生以下情况:

  • 微筛选器驱动程序的回调例程已取消注册。

  • 微筛选器驱动程序的实例被拆解,并为每个微筛选器驱动程序实例调用微筛选器驱动程序的 InstanceTeardownStartCallbackInstanceTeardownCompleteCallback 例程。

  • 如果微筛选器驱动程序在卷、实例、流或流句柄上设置任何上下文,则会删除这些上下文。 如果微筛选器驱动程序已注册给定上下文类型的 CleanupContext 回调例程,筛选器管理器会在删除上下文之前调用 CleanupContext 例程。

如果微筛选器驱动程序的不透明筛选器指针上存在未完成的断开引用, 则 FltUnregisterFilter 将进入等待状态,直到删除它们。 由于微筛选器驱动程序调用 FltQueueGenericWorkItem 将工作项插入到系统工作队列中,而工作项尚未取消排队和处理,因此通常会发生未完成的断开引用。 (筛选器管理器在微筛选器驱动程序调用 FltQueueGenericWorkItem 时添加断开引用,并在微筛选器驱动程序的工作例程返回时将其删除。)

如果微筛选器驱动程序调用了向微筛选器驱动程序的不透明筛选器指针添加断开引用的任何例程(例如 FltObjectReferenceFltGetFilterFromInstance),但随后未调用 FltObjectDereference,也可能发生未完成的断开引用。