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 작업이 작업자 스레드에 성공적으로 게시된 경우 FltDoCompletionProcessingWhenSafeTRUE를 반환합니다. 그렇지 않으면 FALSE를 반환합니다.

설명

FltDoCompletionProcessingWhenSafe는 호출자가 IRQL <= APC_LEVEL 실행 중인 경우 SafePostCallback을 즉시 실행합니다. 그렇지 않으면 작업을 작업자 스레드에 게시하는 것이 안전한 경우 IRQL <= APC_LEVEL 스레드 컨텍스트에서 호출될 때까지 SafePostCallback 처리가 지연됩니다.

IRQL < DISPATCH_LEVEL 경우:

  • FltDoCompletionProcessingWhenSafeSafePostCallback 콜백 루틴을 즉시 호출합니다.
  • RetPostOperationStatus 매개 변수는 SafePostCallback에서 반환된 FLT_POSTOP_CALLBACK_STATUS 값을 받습니다.
  • FltDoCompletionProcessingWhenSafeTRUE를 반환합니다.

IRQL >= DISPATCH_LEVEL 경우:

  • FltDoCompletionProcessingWhenSafe 는 작업자 스레드에 I/O 작업을 게시한 다음 작업자 스레드에서 SafePostCallback 루틴을 호출하려고 시도합니다.
  • I/O 작업을 안전하게 게시할 수 있는 경우:
    • 필터 관리자는 RetPostOperationStatus 를 FLT_POSTOP_MORE_PROCESSING_REQUIRED 설정합니다.
    • FltDoCompletionProcessingWhenSafeTRUE를 반환합니다.
  • I/O 작업을 안전하게 게시할 수 없는 경우:
    • 필터 관리자는 RetPostOperationStatus 를 FLT_POSTOP_FINISHED_PROCESSING 설정합니다.
    • FltDoCompletionProcessingWhenSafeFALSE를 반환합니다.

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 임의 값

추가 정보

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIo

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK