Share via


FilterUnloadCallback 루틴이 호출되는 경우

필터 관리자는 다음 방법 중 하나로 미니필터 드라이버를 언로드하기 전에 미니필터 드라이버의 FilterUnloadCallback 루틴을 호출합니다.

  • 필수가 아닌 언로드입니다. 이 유형의 언로드는 사용자 모드 애플리케이션이 FilterUnload 를 호출했거나 커널 모드 드라이버가 FltUnloadFilter를 호출한 경우에 발생합니다. 명령 프롬프트에서 fltmc 언로드 를 입력할 때도 발생합니다.

  • 필수 언로드. 이 유형의 언로드는 명령 프롬프트에서 sc stop 또는 net stop 을 입력하여 서비스 중지 요청을 실행할 때 발생합니다. sc stopnet stop 명령에 대한 자세한 내용은 시작 메뉴에서 도움말 및 지원을 클릭합니다. 또한 사용자 모드 애플리케이션이 Microsoft Win32 ControlService 함수를 호출하여 SERVICE_CONTROL_STOP 제어 코드를 dwControl 매개 변수로 전달하는 경우에도 발생합니다. (Win32 서비스 함수에 대한 자세한 내용은 Microsoft Windows SDK 설명서를 참조하세요.)

필수가 아닌 언로드의 경우 미니필터 드라이버의 FilterUnloadCallback 루틴이 오류 또는 경고 NTSTATUS 값(예: STATUS_FLT_DO_NOT_DETACH)을 반환하는 경우 필터 관리자는 미니필터 드라이버를 언로드하지 않습니다.

필수 언로드의 경우 FilterUnloadCallback 루틴이 오류 또는 경고 NTSTATUS 값(예: STATUS_FLT_DO_NOT_DETACH)을 반환하더라도 필터 관리자는 미니필터 드라이버의 FilterUnloadCallback 루틴이 호출된 후 미니필터 드라이버를 언로드합니다.

미니필터 드라이버에 대한 필수 언로드를 사용하지 않도록 설정하려면 미니필터 드라이버는 driverEntry 루틴에서 미니필터 드라이버가 FltRegisterFilter에 매개 변수로 전달하는 FLT_REGISTRATION 구조체의 Flags 멤버에 FLTFL_REGISTRATION_DO_NOT_SUPPORT_SERVICE_STOP 플래그를 설정합니다. 이 플래그가 설정되면 필터 관리자는 일반적으로 필수가 아닌 언로드 요청을 처리합니다. 그러나 필수 언로드 요청은 실패합니다. 필터 관리자는 실패한 언로드 요청에 대해 미니필터 드라이버의 FilterUnloadCallback 루틴을 호출하지 않습니다.

미니필터 드라이버의 DriverEntry 루틴이 경고 또는 오류 NTSTATUS 값을 반환하는 경우 FilterUnloadCallback 루틴이 호출되지 않습니다. 필터 관리자는 미니필터 드라이버를 언로드하기만 하면 됩니다.

FilterUnloadCallback 루틴은 시스템 종료 시 호출되지 않습니다. 종료 처리를 수행해야 하는 미니필터 드라이버는 IRP_MJ_SHUTDOWN 작업에 대한 사전 운용 콜백 루틴을 등록해야 합니다.