PFLT_INSTANCE_TEARDOWN_CALLBACK 콜백 함수(fltkernel.h)
미니 필터 드라이버는 PFLT_INSTANCE_TEARDOWN_CALLBACK 유형의 두 루틴을 미니 필터 드라이버의 InstanceTeardownStartCallback 및 InstanceTeardownCompleteCallback 루틴으로 등록할 수 있습니다.
통사론
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
미니 필터 드라이버 인스턴스가 삭제되는 이유를 나타내는 플래그입니다. 다음 중 하나입니다.
기 | 의미 |
---|---|
FLTFL_INSTANCE_TEARDOWN_MANUAL(0x00000001) | 사용자 모드 애플리케이션이 FilterDetach 호출했거나 커널 모드 구성 요소가 FltDetachVolume호출했기 때문에 인스턴스가 분리되고 있습니다. |
FLTFL_INSTANCE_TEARDOWN_FILTER_UNLOAD(0x00000002) | 미니 필터 드라이버가 언로드되고 있습니다. |
FLTFL_INSTANCE_TEARDOWN_MANDATORY_FILTER_UNLOAD(0x00000004) | 미니 필터 드라이버가 언로드되고 있습니다. |
FLTFL_INSTANCE_TEARDOWN_VOLUME_DISMOUNT(0x00000008) | 설정된 경우 볼륨이 분리됩니다. (또는 볼륨이 이미 분리되었습니다. 또는 볼륨 탑재 작업이 실패했습니다. 또는 미니 필터 드라이버 인스턴스 또는 볼륨이 축소되고 있습니다. 또는 파일 시스템이 활성 파일 시스템으로 등록을 취소했습니다.) |
FLTFL_INSTANCE_TEARDOWN_INTERNAL_ERROR(0x00000010) | 시스템에서 예기치 않은 내부 오류가 발생했습니다. |
반환 값
없음
발언
미니 필터 드라이버가 DriverEntry 루틴에서 FltRegisterFilter 호출하여 자신을 등록하는 경우 PFLT_INSTANCE_TEARDOWN_CALLBACK 유형의 두 루틴을 미니 필터 드라이버의 InstanceTeardownStartCallback 등록하고 InstanceTeardownCompleteCallback 루틴으로 등록할 수 있습니다. 이러한 콜백 루틴을 등록하기 위해 미니 필터 드라이버는 InstanceTeardownStartCallback PFLT_INSTANCE_TEARDOWN_CALLBACK 형식의 두 루틴 주소를 저장하고 미니 필터 드라이버가 FltRegisterFilterRegistration 매개 변수로 전달하는 FLT_REGISTRATION 구조의 멤버를 InstanceTeardownCompleteCallback을.
InstanceTeardownStartCallback 및 InstanceTeardownCompleteCallback 루틴은 선택 사항이며 NULL 수 있습니다. 미니 필터 드라이버가 InstanceTeardownStartCallback 또는 InstanceTeardownCompleteCallback 루틴에 NULL 지정하는 경우 인스턴스는 여전히 삭제됩니다.
InstanceTeardownStartCallback 루틴은 필터 관리자가 미니 필터 드라이버 인스턴스를 분해하기 시작하여 미니 필터 드라이버가 보류 중인 I/O 작업을 완료하고 상태 정보를 저장할 수 있도록 할 때 호출됩니다.
InstanceTeardownStartCallback 루틴은 다음을 수행해야 합니다.
- 미니 필터 드라이버의 사전 운용 콜백 루틴에서 보류된 각 I/O 작업에 대해 FltCompletePendedPreOperation 호출하여 작업을 완료하거나 작업의 제어를 필터 관리자에게 반환합니다.
- 새 I/O 작업은 보류되지 않습니다. 미니 필터 드라이버가 콜백 데이터 큐를 사용하는 경우 FltCbdqDisable 호출하여 사용하지 않도록 설정해야 합니다.
- 미니 필터 드라이버의 사후 콜백 루틴에서 보류된 각 I/O 작업에 대해 FltCompletePendedPostOperation 호출하여 작업의 제어를 필터 관리자에게 반환합니다.
InstanceTeardownStartCallback 루틴은 필요에 따라 다음을 수행하여 미니 필터 드라이버가 가능한 한 빨리 언로드되도록 할 수 있습니다.
- 열려 있는 파일을 닫습니다.
- 작업자 스레드가 미해결 작업 항목 처리를 완료하는 데 필요한 최소 작업만 수행하도록 합니다.
- FltCancelIo 호출하여 미니 필터 드라이버에서 시작한 I/O 작업을 취소합니다.
- 새 작업 항목 큐를 중지합니다.
미니 필터 드라이버의 InstanceTeardownStartCallback 루틴이 호출되면 미니 필터 드라이버의 사전 운용 및 사후 콜백 루틴은 새로운 I/O 작업에 대해 호출되지 않습니다. 그러나 인스턴스 해체가 시작되기 전에 시작된 I/O 작업에 대해 호출될 수 있습니다.
InstanceTeardownCompleteCallback 루틴은 미니 필터 드라이버가 열려 있는 파일을 닫고 필요한 다른 정리 처리를 수행할 수 있도록 해체 프로세스가 완료되면 호출됩니다.
InstanceTeardownCompleteCallback 루틴은 미니 필터 드라이버에서 연 모든 파일을 닫아야 합니다.
필터 관리자는 모든 미해결 I/O 작업이 완료되거나 드레이닝된 후에만 미니 필터 드라이버의 InstanceTeardownCompleteCallback 루틴을 호출합니다.
경고
다음 조건이 충족되면 InstanceTeardownCompleteCallback 루틴이 호출되지 않습니다.
- 미해결 보류 중인 I/O 작업이 있습니다.
- 미니 필터 드라이버에서 시작한 미해결 I/O 작업이 있습니다.
미니 필터 드라이버가 언로드되어 미니 필터 드라이버 인스턴스가 중단되는 경우 InstanceTeardownCompleteCallback 루틴이 반환될 때까지 언로드 작업이 중단되는 것처럼 보입니다. 이러한 종류의 문제를 디버그하려면 미니 필터 드라이버에서 드라이버 검증 도구 사용하도록 설정해야 합니다. 필터 검증 도구 I/O 확인 옵션은 미니 필터 드라이버의 언로드를 방지하는 미공개 참조와 같은 가능한 원인을 식별하는 데 도움이 될 수 있습니다. 자세한 내용은 필터 검증 도구 참조하세요.
FltObjectReference호출하여 인스턴스를 참조해도 InstanceTeardownCompleteCallback 루틴이 호출되지 않습니다.
필터 관리자는 IRQL PASSIVE_LEVEL InstanceTeardownStartCallback 및 InstanceTeardownCompleteCallback 루틴을 호출합니다.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 바탕 화면 |
헤더 | fltkernel.h(Fltkernel.h 포함) |
IRQL | 설명 섹션을 참조하세요. |
참고 항목
FltCompletePendedPostOperation