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 | 「解説」を参照してください。 |