调用 FilterUnloadCallback 例程时
筛选器管理器调用微筛选器驱动程序的 FilterUnloadCallback 例程,然后通过以下方式之一卸载微筛选器驱动程序:
非强制卸载。 当用户模式应用程序名为 FilterUnload 或内核模式驱动程序调用 FltUnloadFilter 时,会发生这种类型的卸载。 在命令提示符下键入 fltmc unload 时也会发生这种情况。
强制卸载。 在命令提示符下键入 sc stop 或 net stop 发出服务停止请求时,会发生这种类型的卸载。 (有关 sc stop 和 net stop 命令的详细信息,请单击“开始”菜单上的“ 帮助和支持 ”。) 当用户模式应用程序调用 Microsoft Win32 ControlService 函数,将SERVICE_CONTROL_STOP控件代码作为 dwControl 参数传递时,也会发生这种情况。 (有关 Win32 服务函数的详细信息,请参阅 Microsoft Windows SDK 文档。)
对于非强制卸载,如果微筛选器驱动程序的 FilterUnloadCallback 例程返回错误或警告 NTSTATUS 值(如STATUS_FLT_DO_NOT_DETACH),则筛选器管理器不会卸载微筛选器驱动程序。
对于强制卸载,筛选器管理器在调用微筛选器驱动程序的 FilterUnloadCallback 例程后卸载微筛选器驱动程序,即使 FilterUnloadCallback 例程返回错误或警告 NTSTATUS 值(例如STATUS_FLT_DO_NOT_DETACH)。
若要禁用微筛选器驱动程序的强制卸载,微筛选器驱动程序在 FLT_REGISTRATION 结构的Flags 成员中设置FLTFL_REGISTRATION_DO_NOT_SUPPORT_SERVICE_STOP标志,该标志作为参数传递给其 DriverEntry 例程中的 FltRegisterFilter。 设置此标志后,筛选器管理器通常会处理非强制卸载请求。 但是,强制卸载请求将失败。 筛选器管理器不会为失败的卸载请求调用微筛选器驱动程序的 FilterUnloadCallback 例程。
请注意,如果微筛选器驱动程序的 DriverEntry 例程返回警告或错误 NTSTATUS 值,则不调用 FilterUnloadCallback 例程;筛选器管理器只是卸载微筛选器驱动程序。
系统关闭时不调用 FilterUnloadCallback 例程。 必须执行关闭处理的微筛选器驱动程序应为IRP_MJ_SHUTDOWN操作注册预操作回调例程。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈