共用方式為


傳回FLT_PREOP_SYNCHRONIZE

注意

迷你篩選驅動程式不應該使用 FLT_PREOP_SYNCHRONIZE,在作業前和後置呼叫之間保留資源, (與其不應該跨 I/O 呼叫保留資源) 相同。 若要這樣做,不安全,因為它可能會導致死結。

如果迷你篩選驅動程式的 前置作業回呼常式 會藉由傳回FLT_PREOP_SYNCHRONIZE來同步處理 I/O 作業,篩選管理員會在 I/O 完成期間呼叫篩選的 作業後回呼常式

  • 如果篩選未清空,則篩選管理員會在與作業前回呼相同的執行緒內容中呼叫該篩選的後置作業回呼常式,在 IRQL < = APC_LEVEL。 (請注意,此執行緒內容不一定是原始執行緒的內容。)
  • 如果篩選正在清空,篩選管理員不會同步處理回原始執行緒。

注意

如果篩選準則的前置作業回呼常式傳回FLT_PREOP_SYNCHRONIZE,它必須實作作業的後置作業回呼常式。

如果篩選準則的前置作業回呼常式傳回FLT_PREOP_SYNCHRONIZE,它可以在其 CompletionCoNtext 輸出參數中傳回非 Null 值。 此參數是選擇性的內容指標,會傳遞至對應的作業後回呼常式。 作業後回呼常式會在其 CompletionCoNtext 輸入參數中接收此指標。

迷你篩選驅動程式的前置作業回呼常式應該只會針對 IRP 型 I/O 作業傳回FLT_PREOP_SYNCHRONIZE。 不過,其他作業類型可以傳回這個狀態值。 如果針對不是 IRP 型 I/O 作業的 I/O 作業傳回,篩選管理員會將這個傳回值視為FLT_PREOP_SUCCESS_WITH_CALLBACK。 若要判斷作業是否為 IRP 型 I/O 作業,請使用 FLT_IS_IRP_OPERATION 宏。

篩選不應該傳回建立作業的FLT_PREOP_SYNCHRONIZE,因為這些作業已經由篩選管理員同步處理。 如果迷你篩選驅動程式已註冊IRP_MJ_CREATE作業的前置作業和作業後回呼常式,則會在 IRQL = PASSIVE_LEVEL呼叫後續建立回呼常式,與預先建立回呼常式相同的執行緒內容中。

迷你篩選驅動程式絕對不能針對非同步讀取或寫入作業傳回FLT_PREOP_SYNCHRONIZE。 這樣做可能會嚴重降低迷你篩選驅動程式和系統效能,甚至可能會造成死結,例如,修改過的頁面寫入器執行緒遭到封鎖。 在傳回 IRP 型讀取或寫入作業的FLT_PREOP_SYNCHRONIZE之前,迷你篩選驅動程式應該呼叫 FltIsOperationSynchronous來確認作業是否同步。

無法同步處理下列類型的 I/O 作業:

FLT_PREOP_SYNCHRONIZE無法針對任何這些作業傳回。