共用方式為


FltCbdqInitialize 函式 (fltkernel.h)

FltCbdqInitialize 會初始化迷你篩選驅動程式的回呼數據佇列分派數據表。

語法

NTSTATUS FLTAPI FltCbdqInitialize(
  [in]      PFLT_INSTANCE                                 Instance,
  [in, out] PFLT_CALLBACK_DATA_QUEUE                      Cbdq,
  [in]      PFLT_CALLBACK_DATA_QUEUE_INSERT_IO            CbdqInsertIo,
  [in]      PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO            CbdqRemoveIo,
  [in]      PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO         CbdqPeekNextIo,
  [in]      PFLT_CALLBACK_DATA_QUEUE_ACQUIRE              CbdqAcquire,
  [in]      PFLT_CALLBACK_DATA_QUEUE_RELEASE              CbdqRelease,
  [in]      PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO CbdqCompleteCanceledIo
);

參數

[in] Instance

要初始化回呼數據佇列之實例的不透明實例指標。

[in, out] Cbdq

迷你篩選驅動程式所配置之回呼數據佇列的指標。

[in] CbdqInsertIo

呼叫端提供的插入回呼例程的指標。 篩選管理員會呼叫這個例程,將指定的回呼數據結構插入佇列中。 此例程宣告如下:

typedef NTSTATUS
(*PFLT_CALLBACK_DATA_QUEUE_INSERT_IO)(
      _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
      _In_ PFLT_CALLBACK_DATA Cbd,
      _In_opt_ PVOID InsertContext
      );

卡里克

迷你篩選驅動程式取消安全回呼數據佇列的指標。 此佇列必須透過呼叫 FltCbdqInitialize 來初始化。

Cbd

要插入佇列之回呼數據結構的指標。

InsertContext

傳遞為 InsertContext 參數至 FltCbdqInsertIo 的內容資訊指標。

[in] CbdqRemoveIo

呼叫端提供的回呼例程指標。 篩選管理員會呼叫此例程,以從佇列中移除指定的回呼數據結構。 此例程宣告如下:

typedef VOID
(*PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO)(
      _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
      _In_ PFLT_CALLBACK_DATA Cbd
      );

卡里克

迷你篩選驅動程式取消安全回呼數據佇列的指標。 此佇列必須透過呼叫 FltCbdqInitialize 來初始化。

Cbd

要從佇列中移除之回呼數據結構的指標。

[in] CbdqPeekNextIo

呼叫端提供的查看回呼例程的指標。 篩選管理員會呼叫此函式,以取得佇列中下一個符合 PeekContext 的 I/O 作業指標;或者,如果 NULL,則為 ,以取得佇列中第一個相符 I/O 作業的指標。 迷你篩選驅動程式會完全定義 PeekContext 的意義,並在 I/O 作業符合指定的 PeekContext 時定義。 此例程宣告如下:

typedef PFLT_CALLBACK_DATA
(*PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO)(
      _In_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
      _In_opt_ PFLT_CALLBACK_DATA Cbd,
      _In_opt_ PVOID PeekContext
      );

卡里克

迷你篩選驅動程式取消安全回呼數據佇列的指標。 此佇列必須透過呼叫 FltCbdqInitialize 來初始化。

Cbd

回呼數據結構的指標,標記佇列中的位置,以開始搜尋 與 PeekContext 的相符專案。 如果 NULL,搜尋就會從佇列的前端開始。

PeekContext

傳遞為 PeekContext 參數至 FltCbdqRemoveNextIo 的內容資訊指標。

[in] CbdqAcquire

呼叫端提供的取得佇列鎖定回呼例程的指標。 篩選管理員會呼叫此例程,以取得佇列的鎖定,然後再嘗試插入或移除佇列中的專案。 此例程宣告如下:

typedef VOID
(*PFLT_CALLBACK_DATA_QUEUE_ACQUIRE)(
      _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
      _Out_opt_ PKIRQL Irql
      );

卡里克

迷你篩選驅動程式取消安全回呼數據佇列的指標。 此佇列必須透過呼叫 FltCbdqInitialize 來初始化。

Irql

接收目前 IRQL 之系統提供之變數的指標。 相同的變數會傳遞至對應的 「對應的」的「快取」版本 例程。

[in] CbdqRelease

呼叫端提供的釋放佇列鎖定回呼例程的指標。 篩選管理員會呼叫此例程,以釋放其透過呼叫對應 之「AzureQAcquire 」例程取得的鎖定。 此例程宣告如下:

typedef VOID
(*PFLT_CALLBACK_DATA_QUEUE_RELEASE)(
      _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
      _In_opt_ KIRQL Irql
      );

卡里克

迷你篩選驅動程式取消安全回呼數據佇列的指標。 此佇列必須透過呼叫 FltCbdqInitialize 來初始化。

Irql

接收目前 IRQL 做為 Irql 參數的相同系統提供的變數,該變數會接收對應至對應的 回應的回應式的回應。Acquire 例程。

[in] CbdqCompleteCanceledIo

呼叫端提供的取消例程的指標。 篩選管理員會呼叫此例程,以向迷你篩選驅動程式發出訊號,以完成已取消的 I/O 作業。 此例程宣告如下:

typedef VOID
(*PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO)(
      _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
      _Inout_ PFLT_CALLBACK_DATA Cbd
      );

卡里克

迷你篩選驅動程式取消安全回呼數據佇列的指標。 此佇列必須透過呼叫 FltCbdqInitialize 來初始化。

Cbd

已取消 I/O 作業之回呼數據結構的指標。

傳回值

FltCbdqInitialize 會傳回STATUS_SUCCESS或適當的 NTSTATUS 值。

備註

新初始化的回呼數據佇列處於啟用狀態,這表示回呼數據結構專案可以插入佇列中。 您可以藉由呼叫 FltCbdqDisable 來停用佇列,並藉由呼叫 FltCbdqEnable 重新啟用佇列。

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

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

迷你篩選驅動程式可以使用佇列的任何內部實作。 篩選管理員只會透過 FltCbdqInitialize 所提供的分派例程集,與迷你篩選驅動程式的佇列實作互動。

系統會視需要自動鎖定和解除鎖定佇列。 Minifilter 驅動程式不會在其 其「Azure AzureInsertIo」、 「建議程式」、「建議程式」和 「AzureqPeekNextIo 例程」內實作任何鎖定。

Minifilter 驅動程式可以使用任何操作系統的同步處理基本類型,做為其「其」的「規則」Acquire 和「BlobqRelease」例程中的鎖定機制,例如微調鎖定mutex 物件資源變數。 請注意,如果迷你篩選驅動程式使用微調鎖定,而不是 mutex 或資源來保護佇列,它可以在 IRQL <= DISPATCH_LEVEL呼叫 FltCbdqXxx 例程。 如果使用 mutex 或資源,迷你篩選驅動程式必須在 IRQL <= APC_LEVEL呼叫 FltCbdqInitialize 以外的任何例程時執行。

迷你篩選驅動程式不會直接操作佇列。 相反地,它會呼叫 FltCbdqInsertIoFltCbdqRemoveIoFltCbdqRemoveNextIo 來新增或移除回呼數據結構。 這些例程會接著呼叫 Minifilter 驅動程式提供給 FltCbdqInitialize 的回呼函式。

迷你篩選驅動程式應該實作佇列例程,如下所示。

卡里克例程 實作
其為一個位置 將指定的回呼數據結構插入佇列中。
儲存資源 從佇列中移除指定的回呼數據結構。
在#2012年1月 此例程應該允許系統迴圈查看佇列中具有相符 PeekContext 的回呼數據結構。 Cbd = ( (的 ( (的 (,PeekContext) 應該會傳 回佇列中的第一個相符專案,而在佇列中指定回呼數據結構之後,) (傳回下一個相符專案。 迷你篩選驅動程式會完全定義 PeekContext 的意義,並在回呼數據結構符合 PeekContext 值時定義。
卡里克文 此例程應該鎖定佇列,讓其他線程無法存取佇列。 迷你篩選驅動程式可以使用任何鎖定機制來鎖定佇列。 如果迷你篩選驅動程式使用 KeAcquireSpinLock 例程,迷你篩選驅動程式可以使用例程 的 Irql 參數所指向的記憶體位置來儲存 IRQL。 否則,迷你篩選驅動程式可以忽略該參數。
此為一元 此例程應該會解除鎖定由其所建立的佇列。 如果迷你篩選驅動程式使用微調鎖定,並在其 Irql 參數中傳回一個 IrQL 值,則系統會在一個參數的 Irql 參數中傳遞該值,而該值會傳回 至一個類型為一文。 迷你篩選驅動程式可以使用 IRQL 來解除鎖定微調鎖定,方法是呼叫 KeReleaseSpinLock。 否則,迷你篩選驅動程式可以忽略 Irql 參數。
其類型為一般 此例程應該會完成已取消的 I/O 作業。 一般而言,迷你篩選驅動程式只能呼叫 FltCompletePendedPreOperation (Data、FLT_PREOP_COMPLETE、 NULL) 。 Minifilter 驅動程式不需要取消佇列回呼數據結構 -- 篩選管理員會在呼叫此佇列的一個個的回應器RemoveIo 之前,先自動呼叫佇列的一個類型。

規格需求

需求
目標平台 Universal
標頭 fltkernel.h (包含 Fltkernel.h)
IRQL 任何層級

另請參閱

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInsertIo

FltCbdqRemoveIo

FltCbdqRemoveNextIo

FltCompletePendedPreOperation

KeAcquireSpinLock

KeReleaseSpinLock