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 | 任何。 |