次の方法で共有


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 回目の削除の試行が失敗する可能性があることに注意してください。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー fltkernel.h (Fltkernel.h を含む)
IRQL 「解説」セクションを参照してください。

関連項目

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqInsertIo する

FltCbdqRemoveNextIo