Quando a rotina FilterUnloadCallback é chamada

O gerenciador de filtros chama a rotina FilterUnloadCallback de um driver de minifiltro antes de descarregar o driver de minifiltro de uma das seguintes maneiras:

  • Descarregamento não obrigatório. Esse tipo de descarregamento ocorre quando um aplicativo de modo de usuário tem chamado FilterUnload ou um driver de modo kernel chamado FltUnloadFilter. Ele também ocorre quando você digita o descarregamento de fltmc no prompt de comando.

  • Descarregamento obrigatório. Esse tipo de descarregamento ocorre quando você emite uma solicitação de parada de serviço digitando sc stop ou net stop no prompt de comando. (Para obter mais informações sobre os comandos sc stop e net stop , clique em Ajuda e Suporte no menu Iniciar.) Isso também ocorre quando um aplicativo de modo de usuário chama a função ControlService do Microsoft Win32, passando o código de controle SERVICE_CONTROL_STOP como o parâmetro dwControl . (Para obter mais informações sobre as funções de serviço do Win32, consulte a documentação do SDK do Microsoft Windows.)

Para um descarregamento não obrigatório, se a rotina FilterUnloadCallback do driver de minifiltro retornar um valor NTSTATUS de erro ou aviso, como STATUS_FLT_DO_NOT_DETACH, o gerenciador de filtros não descarregará o driver de minifiltro.

Para um descarregamento obrigatório, o gerenciador de filtros descarrega o driver de minifiltro depois que a rotina FilterUnloadCallback do driver de minifiltro é chamada, mesmo que a rotina FilterUnloadCallback retorne um valor NTSTATUS de erro ou aviso, como STATUS_FLT_DO_NOT_DETACH.

Para desabilitar o descarregamento obrigatório para um driver de minifiltro, o driver de minifiltro define o sinalizador FLTFL_REGISTRATION_DO_NOT_SUPPORT_SERVICE_STOP no membro Flags da estrutura FLT_REGISTRATION que o driver de minifiltro passa como um parâmetro para FltRegisterFilter em sua rotina DriverEntry . Quando esse sinalizador é definido, o gerenciador de filtros normalmente processa solicitações de descarregamento não obrigatórias. No entanto, as solicitações de descarregamento obrigatórias falharão. O gerenciador de filtros não chama a rotina FilterUnloadCallback do driver de minifiltro para solicitações de descarregamento com falha.

Observe que, se a rotina DriverEntry de um driver de minifiltro retornar um valor NTSTATUS de aviso ou erro, a rotina FilterUnloadCallback não será chamada; o gerenciador de filtros simplesmente descarrega o driver de minifiltro.

A rotina FilterUnloadCallback não é chamada no momento do desligamento do sistema. Um driver de minifiltro que deve executar o processamento de desligamento deve registrar uma rotina de retorno de chamada de pré-operação para operações de IRP_MJ_SHUTDOWN.