閱讀英文

共用方式為


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)。 這通常與傳遞至 postoperation 回呼例程 (PFLT_POST_OPERATION_CALLBACKFltDoCompletionProcessingWhenSafeData 指標相同。

[in] FltObjects

I/O 作業之相關對象結構的指標(FLT_RELATED_OBJECTS)。 這通常與 FltObjects 指標相同,該指標會傳遞至呼叫 FltDoCompletionProcessingWhenSafe的後置回呼例程。

[in, optional] CompletionContext

將傳入 SafePostCallback 參數中指定的回呼函式之呼叫端提供之內容資訊的指標。

[in] Flags

旗標的位掩碼,指定完成處理的執行方式。 這通常與傳遞至 FltDoCompletionProcessingWhenSafe的 postoperation 回呼例程 Flags 值相同。 如需詳細資訊,請參閱下列一節。

[in] SafePostCallback

由呼叫端提供的 PFLT_POST_OPERATION_CALLBACK型別回呼例程指標,作系統在安全執行此動作時會呼叫該例程。

[out] RetPostOperationStatus

呼叫端配置的變數,可接收 I/O 作業的最終狀態值。 如需如何設定此參數的詳細資訊,請參閱下列一節。

傳回值

FltDoCompletionProcessingWhenSafe 傳回 TRUE,如果可以立即執行 I/O 作業的完成處理,或成功將 I/O 作業張貼至背景工作線程;否則,它會傳回 false

言論

FltDoCompletionProcessingWhenSafe 會在呼叫者在 IRQL <= APC_LEVEL 上執行時,立即執行 SafePostCallback。 否則,如果將作業張貼至背景工作線程是安全的,SafePostCallback 處理會延後,直到可以在 IRQL <= APC_LEVEL 的線程內容中呼叫它為止。

如果 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) 呼叫。 請注意,如果 postoperation 回呼的 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