다음을 통해 공유


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(사후 콜백 루틴)에 전달된 Data 포인터와 동일합니다.

[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 작업에 대한 최종 상태 값을 수신하는 호출자 할당 변수입니다. 이 매개 변수를 설정하는 방법에 대한 자세한 내용은 다음 설명 섹션을 참조하세요.

반환 값

FltDoCompletionProcessingWhenSafe I/O 작업에 대한 완료 처리를 즉시 수행할 수 있거나 I/O 작업이 작업자 스레드에 성공적으로 게시된 경우 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 작업자 스레드에서 호출되는 경우 필터 관리자는 미니 필터가 SafePostCallbackFLT_POSTOP_MORE_PROCESSING_REQUIRED 반환하지 않는 한 완료 처리를 다시 시작합니다.

미니 필터가 SafePostCallbackFLT_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