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_CALLBACK) FltDoCompletionProcessingWhenSafe的 Data 指標相同。
[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 | 任何。 |