共用方式為


FltCbdqInsertIo 函式 (fltkernel.h)

FltCbdqInsertIo 將 I/O 作業的回呼數據結構插入篩選驅動程式的回呼數據佇列中。

語法

NTSTATUS FLTAPI FltCbdqInsertIo(
  [in, out]      PFLT_CALLBACK_DATA_QUEUE            Cbdq,
  [in]           PFLT_CALLBACK_DATA                  Cbd,
  [in, optional] PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context,
  [in, optional] PVOID                               InsertContext
);

參數

[in, out] Cbdq

呼叫端取消安全回呼數據佇列的指標。 呼叫 FltCbdqInitialize來初始化此佇列。

[in] Cbd

要排入佇列之 I/O 作業的回呼資料 (FLT_CALLBACK_DATA) 結構的指標。 作業必須是 IRP 型 I/O 作業。

[in, optional] Context

呼叫端提供的變數,可接收 I/O 要求的不透明內容指標。 篩選驅動程式可以使用此指標來識別佇列中的特定專案,以便呼叫 fltCbdqRemoveIo 來移除此指標。 如果篩選驅動程式不需要從佇列中移除特定的 I/O 要求,則可以 NULL

[in, optional] InsertContext

要傳遞至篩選驅動程式 CbdqInsertIo 回呼例程的內容指標。

傳回值

FltCbdqInsertIo 會在回呼數據結構插入回呼數據佇列時傳回STATUS_SUCCESS,或適當的 NTSTATUS 值,如下所示:

傳回碼 描述
STATUS_FLT_CBDQ_DISABLED 回呼數據結構並未插入回呼數據佇列,因為佇列目前已停用。 若要重新啟用佇列,請呼叫 FltCbdqEnable。 這是錯誤碼。

注意

如果成功,FltCbdqInsertIo 會傳回篩選條件 InsertIo 回呼傳回的任何內容:例如,篩選可能會傳回STATUS_SUCCESS或STATUS_PENDING來表示成功。 請務必在篩選條件用來指出成功的值上自我一致。

言論

FltCbdqInsertIo 將指定的回呼資料 (FLT_CALLBACK_DATA) 結構插入篩選驅動程式的回呼數據佇列中。

  • 請注意,篩選驅動程式插入回呼數據,以及取消相關聯的 IRP 之間可能有競爭條件。 如果 IRP 已經取消,可以立即叫用佇列的取消例程來避免這種情況。

篩選驅動程式可以使用 FltCbdqXxx 例程來實作 IRP 型 I/O 作業的回呼數據佇列。 使用這些例程,篩選驅動程式可以將佇列設為安全;系統會以透明方式處理篩選驅動程式的 I/O 取消作業。

FltCbdqXxx 例程只能用於 IRP 型 I/O 作業。 若要判斷指定的回呼數據結構是否代表 IRP 型 I/O 作業,請使用 FLT_IS_IRP_OPERATION 巨集。

呼叫 FltCbdqInitialize來初始化回呼數據佇列。 FltCbdqInsertIo 會使用佇列分派數據表中提供的函式來鎖定佇列,並將回呼數據結構插入佇列中。 插入作業本身是由佇列的 CbdqInsertIo 例程來執行。

如需如何建立回呼數據佇列的詳細資訊,請參閱 FltCbdqInitialize。 使用 FltCbdqRemoveIo 從佇列中移除特定 I/O 要求,或 FltCbdqRemoveNextIo 移除下一個可用的 I/O 要求。

如果佇列受到 微調鎖定 保護,而不是 mutex 物件資源變數FltCbdqInsertIo 的呼叫端可以在 IRQL <= DISPATCH_LEVEL 執行。 如果使用 mutex 或資源,呼叫端必須在 IRQL <= APC_LEVEL執行。

要求

要求 價值
目標平臺 普遍
標頭 fltkernel.h (包括 Fltkernel.h)
IRQL 請參閱一節。

另請參閱

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqRemoveIo

FltCbdqRemoveNextIo