次の方法で共有


FltCbdqRemoveNextIo 関数 (fltkernel.h)

FltCbdqRemoveNextIo は 、ミニフィルター ドライバーのコールバック データ キュー内の次に一致する項目を削除します。

構文

PFLT_CALLBACK_DATA FLTAPI FltCbdqRemoveNextIo(
  [in, out]      PFLT_CALLBACK_DATA_QUEUE Cbdq,
  [in, optional] PVOID                    PeekContext
);

パラメーター

[in, out] Cbdq

キャンセル セーフなコールバック データ キューへのポインター。 このキューは 、FltCbdqInitialize を呼び出して初期化されている必要があります。

[in, optional] PeekContext

一致する項目を識別する呼び出し元定義情報へのポインター。 このパラメーターは省略可能であり、 NULL にすることができます

戻り値

FltCbdqRemoveNextIo は、キューから削除されたアイテムのコールバック データ (FLT_CALLBACK_DATA) 構造体へのポインターを返します。一致する項目が見つからなかった場合は NULL を 返します。 FltCbdqRemoveNextIo は、まだ取り消されていない I/O 操作の項目のみを返します。

注釈

FltCbdqRemoveNextIo は、 ミニフィルター ドライバーのコールバック データ キューから次に一致する項目を削除します。

ミニフィルター ドライバーは 、FltCbdqXxx ルーチンを使用して、IRP ベースの I/O 操作のコールバック データ キューを実装できます。 これらのルーチンを使用することで、ミニフィルター ドライバーはキューをキャンセルセーフにすることができます。システムは、ミニフィルター ドライバーの I/O 取り消しを透過的に処理します。

FltCbdqXxx ルーチンは、IRP ベースの I/O 操作にのみ使用できます。 特定のコールバック データ (FLT_CALLBACK_DATA) 構造体が IRP ベースの I/O 操作を表すかどうかを判断するには、 FLT_IS_IRP_OPERATION マクロを使用します。

コールバック データ キューは、 FltCbdqInitialize によって初期化されます。 FltCbdqRemoveNextIo は、キューのディスパッチ テーブルで提供されるルーチンを使用してキューをロックし、キューから次に一致する項目を削除します。 削除操作自体は、ミニフィルター ドライバーの CbdqRemoveIo コールバック ルーチンによって実行されます。

FltCbdqRemoveNextIo は 、キューの CbdqPeekNextIo コールバック ルーチンを使用して、一致する項目のキューをスキャンします。 PeekContext パラメーターは、一致する項目をループ処理するために、CbdqPeekNextIo コールバック ルーチンに渡されます。 PeekContext の意味と、特定の PeekContext に一致する項目の条件は、ミニフィルター ドライバーに完全に依存します。

キューがミューテックス オブジェクトまたはリソース変数ではなくスピン ロックによって保護されている場合、FltCbdqRemoveNextIo の呼び出し元は IRQL <= DISPATCH_LEVELで実行できます。 ミューテックスまたはリソースを使用する場合、呼び出し元は IRQL <= APC_LEVELで実行されている必要があります。

要件

要件
対象プラットフォーム ユニバーサル
Header fltkernel.h (Fltkernel.h を含む)
IRQL 「解説」を参照してください。

こちらもご覧ください

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqInsertIo

FltCbdqRemoveIo