共用方式為


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) 。 這通常與傳遞至後置回呼例程 的數據指標相同 (PFLT_POST_OPERATION_CALLBACK) 呼叫 FltDoCompletionProcessingWhenSafe

[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。 否則,如果將作業張貼至背景工作線程是安全的, 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

如果 minifilter 呼叫 FltDoCompletionProcessingWhenSafe ,且背景工作線程中叫用 SafePostCallback ,因為無法在目前的線程內容中叫用它,只要迷你篩選程式不會從 SafePostCallback 傳回FLT_POSTOP_MORE_PROCESSING_REQUIRED,篩選管理員就會繼續完成處理。

如果 minifilter 從 SafePostCallback 傳回FLT_POSTOP_MORE_PROCESSING_REQUIRED,迷你篩選程序必須呼叫 FltCompletePendedPostOperation 以繼續完成處理。

規格需求

需求
最低支援的用戶端 適用於 SP4、Windows XP SP2、Windows Server 2003 SP1 和更新版本的作業系統的 Microsoft Windows 2000 Update 匯總 1。 無法在 Windows 2000 SP4 和舊版作業系統中使用。
目標平台 Universal
標頭 fltkernel.h (包含 Fltkernel.h)
程式庫 Fltmgr.lib
IRQL 任何。

另請參閱

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIo

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK