FltDoCompletionProcessingWhenSafe 함수(fltkernel.h)
안전한 경우 FltDoCompletionProcessingWhenSafe 함수는 작업 후 미니필터 드라이버 콜백 루틴을 실행합니다.
구문
BOOLEAN FLTAPI FltDoCompletionProcessingWhenSafe(
[in] PFLT_CALLBACK_DATA Data,
[in] PCFLT_RELATED_OBJECTS FltObjects,
[in, optional] PVOID CompletionContext,
[in] FLT_POST_OPERATION_FLAGS Flags,
[in] PFLT_POST_OPERATION_CALLBACK SafePostCallback,
[out] PFLT_POSTOP_CALLBACK_STATUS RetPostOperationStatus
);
매개 변수
[in] Data
I/O 작업에 대한 콜백 데이터 구조(FLT_CALLBACK_DATA)에 대한 포인터입니다. 일반적으로 FltDoCompletionProcessingWhenSafe라는 사후 콜백 루틴(PFLT_POST_OPERATION_CALLBACK)에 전달된 데이터 포인터와 동일합니다.
[in] FltObjects
I/O 작업에 대한 관련 개체 구조체(FLT_RELATED_OBJECTS)에 대한 포인터입니다. 일반적으로 FltDoCompletionProcessingWhenSafe라는 사후 콜백 루틴에 전달된 FltObjects 포인터와 동일합니다.
[in, optional] CompletionContext
SafePostCallback 매개 변수에 지정된 콜백 함수에 전달될 호출자 제공 컨텍스트 정보에 대한 포인터입니다.
[in] Flags
완료 처리가 수행되는 방법을 지정하는 플래그의 비트 마스크입니다. 일반적으로 FltDoCompletionProcessingWhenSafe라는 사후 콜백 루틴에 전달된 Flags 값과 동일합니다. 자세한 내용은 아래 설명 부분을 참조하십시오.
[in] SafePostCallback
안전할 때 운영 체제에서 호출하는 호출자가 제공하는 PFLT_POST_OPERATION_CALLBACK 형식의 콜백 루틴에 대한 포인터입니다.
[out] RetPostOperationStatus
I/O 작업에 대한 최종 상태 값을 수신하는 호출자가 할당한 변수입니다. 이 매개 변수를 설정하는 방법에 대한 자세한 내용은 다음 설명 섹션을 참조하세요.
반환 값
I/O 작업에 대한 완료 처리를 즉시 수행할 수 있거나 I/O 작업이 작업자 스레드에 성공적으로 게시된 경우 FltDoCompletionProcessingWhenSafe는 TRUE를 반환합니다. 그렇지 않으면 FALSE를 반환합니다.
설명
FltDoCompletionProcessingWhenSafe는 호출자가 IRQL <= APC_LEVEL 실행 중인 경우 SafePostCallback을 즉시 실행합니다. 그렇지 않으면 작업을 작업자 스레드에 게시하는 것이 안전한 경우 IRQL <= APC_LEVEL 스레드 컨텍스트에서 호출될 때까지 SafePostCallback 처리가 지연됩니다.
IRQL < DISPATCH_LEVEL 경우:
- FltDoCompletionProcessingWhenSafe 는 SafePostCallback 콜백 루틴을 즉시 호출합니다.
- RetPostOperationStatus 매개 변수는 SafePostCallback에서 반환된 FLT_POSTOP_CALLBACK_STATUS 값을 받습니다.
- FltDoCompletionProcessingWhenSafe 는 TRUE를 반환합니다.
IRQL >= DISPATCH_LEVEL 경우:
- FltDoCompletionProcessingWhenSafe 는 작업자 스레드에 I/O 작업을 게시한 다음 작업자 스레드에서 SafePostCallback 루틴을 호출하려고 시도합니다.
- I/O 작업을 안전하게 게시할 수 있는 경우:
- 필터 관리자는 RetPostOperationStatus 를 FLT_POSTOP_MORE_PROCESSING_REQUIRED 설정합니다.
- FltDoCompletionProcessingWhenSafe 는 TRUE를 반환합니다.
- I/O 작업을 안전하게 게시할 수 없는 경우:
- 필터 관리자는 RetPostOperationStatus 를 FLT_POSTOP_FINISHED_PROCESSING 설정합니다.
- FltDoCompletionProcessingWhenSafe 는 FALSE를 반환합니다.
FltDoCompletionProcessingWhenSafe 는 IRP 기반 작업에 대해서만 호출할 수 있습니다. 작업이 IRP 기반 작업인지 확인하려면 FLT_IS_IRP_OPERATION 매크로를 사용합니다.
FltDoCompletionProcessingWhenSafe 는 페이징 I/O 작업의 완료를 작업자 스레드에 게시하는 데 사용할 수 없습니다.
FltDoCompletionProcessingWhenSafe 는 미니필터 드라이버의 작업 후 콜백 루틴(PFLT_POST_OPERATION_CALLBACK)에서만 호출할 수 있습니다. 사후 콜백의 Flags 매개 변수에 FLTFL_POST_OPERATION_DRAINING 비트 집합이 있는 경우 FltDoCompletionProcessingWhenSafe를 호출해서는 안 됩니다.
미니필터가 FltDoCompletionProcessingWhenSafe를 호출하고 SafePostCallback 이 현재 스레드 컨텍스트에서 호출하는 것이 안전하지 않기 때문에 작업자 스레드에서 호출되는 경우 미니필터가 SafePostCallback에서 FLT_POSTOP_MORE_PROCESSING_REQUIRED 반환하지 않는 한 필터 관리자는 완료 처리를 다시 시작합니다.
미니필터가 SafePostCallback에서 FLT_POSTOP_MORE_PROCESSING_REQUIRED 반환하는 경우 미니필터는 FltCompletePendedPostOperation 을 호출하여 완료 처리를 다시 시작해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | SP4, Windows XP SP2, Windows Server 2003 SP1 이상 운영 체제용 Microsoft Windows 2000 업데이트 롤업 1에서 사용할 수 있습니다. Windows 2000 SP4 및 이전 운영 체제에서는 사용할 수 없습니다. |
대상 플랫폼 | 유니버설 |
헤더 | fltkernel.h(Fltkernel.h 포함) |
라이브러리 | Fltmgr.lib |
IRQL | 임의 값 |