PFLT_INSTANCE_TEARDOWN_CALLBACK 콜백 함수(fltkernel.h)

미니필터 드라이버는 PFLT_INSTANCE_TEARDOWN_CALLBACK 유형의 두 루틴을 미니필터 드라이버의 InstanceTeardownStartCallbackInstanceTeardownCompleteCallback 루틴으로 등록할 수 있습니다.

구문

PFLT_INSTANCE_TEARDOWN_CALLBACK PfltInstanceTeardownCallback;

void PfltInstanceTeardownCallback(
  [in] PCFLT_RELATED_OBJECTS FltObjects,
  [in] FLT_INSTANCE_TEARDOWN_FLAGS Reason
)
{...}

매개 변수

[in] FltObjects

현재 I/O 작업과 관련된 개체에 대한 불투명 포인터를 포함하는 FLT_RELATED_OBJECTS 구조체에 대한 포인터입니다.

[in] Reason

미니필터 드라이버 instance 철거되는 이유를 나타내는 플래그입니다. 다음 중 하나

플래그 의미
FLTFL_INSTANCE_TEARDOWN_MANUAL(0x00000001) 사용자 모드 애플리케이션이 FilterDetach를 호출했거나 커널 모드 구성 요소가 FltDetachVolume을 호출했기 때문에 instance 분리되고 있습니다.
FLTFL_INSTANCE_TEARDOWN_FILTER_UNLOAD(0x00000002) 미니필터 드라이버가 언로드되고 있습니다.
FLTFL_INSTANCE_TEARDOWN_MANDATORY_FILTER_UNLOAD(0x00000004) 미니필터 드라이버가 언로드되고 있습니다.
FLTFL_INSTANCE_TEARDOWN_VOLUME_DISMOUNT(0x00000008) 설정된 경우 볼륨이 분리됩니다. (또는 볼륨이 이미 분리되었습니다. 또는 볼륨 탑재 작업이 실패했습니다. 또는 미니필터 드라이버가 instance 볼륨이 철거되고 있습니다. 또는 파일 시스템이 활성 파일 시스템으로 등록을 취소했습니다.)
FLTFL_INSTANCE_TEARDOWN_INTERNAL_ERROR(0x00000010) 시스템에서 예기치 않은 내부 오류가 발생했습니다.

반환 값

없음

설명

Minifilter 드라이버가 DriverEntry 루틴에서 FltRegisterFilter를 호출하여 자신을 등록하는 경우 PFLT_INSTANCE_TEARDOWN_CALLBACK 유형의 두 루틴을 미니필터 드라이버의 InstanceTeardownStartCallbackInstanceTeardownCompleteCallback 루틴으로 등록할 수 있습니다. 이러한 콜백 루틴을 등록하기 위해 미니필터 드라이버는 미니필터 드라이버가 FltRegisterFilterRegistration 매개 변수로 전달하는 FLT_REGISTRATION 구조체의 InstanceTeardownStartCallbackInstanceTeardownCompleteCallback 멤버에 PFLT_INSTANCE_TEARDOWN_CALLBACK 형식의 두 루틴 주소를 저장합니다.

InstanceTeardownStartCallbackInstanceTeardownCompleteCallback 루틴은 선택 사항이며 NULL일 수 있습니다. 미니필터 드라이버가 InstanceTeardownStartCallback 또는 InstanceTeardownCompleteCallback 루틴에 대해 NULL을 지정하는 경우 instance 여전히 삭제됩니다.

필터 관리자가 미니필터 드라이버 instance 해제하기 시작하면 InstanceTeardownStartCallback 루틴이 호출되어 미니필터 드라이버가 보류 중인 I/O 작업을 완료하고 상태 정보를 저장할 수 있습니다.

InstanceTeardownStartCallback 루틴은 다음을 수행해야 합니다.

  • 미니필터 드라이버의 사전 운용 콜백 루틴에서 보류된 각 I/O 작업에 대해 FltCompletePendedPreOperation 을 호출하여 작업을 완료하거나 작업의 제어를 필터 관리자에게 반환합니다.
  • 새 I/O 작업을 보류하지 않습니다. 미니필터 드라이버가 콜백 데이터 큐를 사용하는 경우 FltCbdqDisable 을 호출하여 사용하지 않도록 설정해야 합니다.
  • 미니필터 드라이버의 사후 콜백 루틴에서 보류된 각 I/O 작업에 대해 FltCompletePendedPostOperation 을 호출하여 작업의 제어를 필터 관리자로 반환합니다.

InstanceTeardownStartCallback 루틴은 필요에 따라 다음을 수행하여 미니필터 드라이버가 가능한 한 빨리 언로드할 수 있도록 할 수 있습니다.

  • 열려 있는 파일을 닫습니다.
  • 작업자 스레드가 미해결 작업 항목의 처리를 완료하는 데 필요한 최소값만 수행하도록 합니다.
  • FltCancelIo를 호출하여 미니필터 드라이버에서 시작한 모든 I/O 작업을 취소합니다.
  • 새 작업 항목 큐를 중지합니다.

미니필터 드라이버의 InstanceTeardownStartCallback 루틴이 호출되면 미니필터 드라이버의 사전 운용 및 사후 콜백 루틴은 새 I/O 작업에 대해 호출되지 않습니다. 그러나 instance 해체가 시작되기 전에 시작된 I/O 작업에 대해 호출될 수 있습니다.

미니필터 드라이버가 열려 있는 파일을 닫고 필요한 다른 정리 처리를 수행할 수 있도록 해체 프로세스가 완료되면 InstanceTeardownCompleteCallback 루틴이 호출됩니다.

InstanceTeardownCompleteCallback 루틴은 미니필터 드라이버에서 연 모든 파일을 닫아야 합니다.

필터 관리자는 미해결 I/O 작업이 모두 완료되거나 드레이닝된 후에만 미니필터 드라이버의 InstanceTeardownCompleteCallback 루틴을 호출합니다.

경고

다음 조건이 충족되면 InstanceTeardownCompleteCallback 루틴이 호출되지 않습니다.

  • 미해결 보류 중인 I/O 작업이 있습니다.
  • 미니필터 드라이버에서 시작한 미해결 I/O 작업이 있습니다.

미니필터 드라이버가 언로드되어 미니필터 드라이버 instance 제거되는 경우 InstanceTeardownCompleteCallback 루틴이 반환될 때까지 언로드 작업이 중단되는 것처럼 보입니다. 이러한 종류의 문제를 디버그하려면 미니필터 드라이버에서 드라이버 검증 도구 를 사용하도록 설정해야 합니다. 필터 검증 도구 I/O 확인 옵션은 미니필터 드라이버가 언로드되지 않도록 하는 릴리스되지 않은 참조와 같은 가능한 원인을 식별하는 데 도움이 될 수 있습니다. 자세한 내용은 필터 검증 도구 를 참조하세요.

FltObjectReference를 호출하여 instance 참조해도 InstanceTeardownCompleteCallback 루틴이 호출되지 않습니다.

필터 관리자는 IRQL PASSIVE_LEVEL InstanceTeardownStartCallbackInstanceTeardownCompleteCallback 루틴을 호출합니다.

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 fltkernel.h(Fltkernel.h 포함)
IRQL 설명 섹션을 참조하십시오.

추가 정보

FLT_REGISTRATION

FLT_RELATED_OBJECTS

FilterDetach

FltCancelIo

FltCbdqDisable

FltCompletePendedPostOperation

FltCompletePendedPreOperation

FltDetachVolume

FltObjectReference

FltRegisterFilter

PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK

PFLT_INSTANCE_SETUP_CALLBACK