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 | 請參閱一節。 |