次の方法で共有


FltCbdqRemoveIo 関数 (fltkernel.h)

FltCbdqRemoveIo は、ミニフィルター ドライバーのコールバック データ キューから特定の項目を削除します。

構文

PFLT_CALLBACK_DATA FLTAPI FltCbdqRemoveIo(
  [in, out] PFLT_CALLBACK_DATA_QUEUE            Cbdq,
  [in]      PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context
);

パラメーター

[in, out] Cbdq

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

[in] Context

削除する項目のコンテキスト ポインター。 このコンテキストは、I/O 要求がキューに最初に挿入されるときに FltCbdqInsertIo によって初期化されます。 このパラメーターは必須であり、NULL 以外である必要があります。

戻り値

FltCbdqRemoveIo は、キューから削除された I/O 要求のコールバック データ構造へのポインターを返します。 一致する I/O 要求が見つからない場合、またはキューが空の場合、 FltCbdqRemoveIo はNULL を返します。

注釈

FltCbdqRemoveIo は、ミニフィルター ドライバーのコールバック データ キューから特定の I/O 操作のコールバック データ (FLT_CALLBACK_DATA) 構造体を削除します。 FltCbdqRemoveIo は、 Context 構造体が関連付けられているコールバック データ構造の削除にのみ使用できます。 この関連付けは、コールバック データ構造が FltCbdqInsertIo によってコールバック データ キューに挿入されるときに作成されます。

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

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

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

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

取り消された I/O 要求を削除するフィルター マネージャーと、フィルター ドライバーが完了したために削除する間に競合が発生する可能性があります。 要求コンテキストは最初に削除された後も有効なままであり、2 回目の削除試行が失敗する可能性があることに注意してください。

要件

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

こちらもご覧ください

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqInsertIo

FltCbdqRemoveNextIo