次の方法で共有


IoCsqRemoveIrp 関数 (wdm.h)

IoCsqRemoveIrp ルーチンは、キューから特定の IRP を削除します。

構文

PIRP IoCsqRemoveIrp(
  [in, out] PIO_CSQ             Csq,
  [in, out] PIO_CSQ_IRP_CONTEXT Context
);

パラメーター

[in, out] Csq

ドライバーのキャンセル セーフ IRP キューの IO_CSQ 構造体へのポインター。 この構造体は、IoCsqInitialize または IoCsqInitializeEx によって初期化されている必要があります。

[in, out] Context

削除する IRP を識別する IO_CSQ_IRP_CONTEXT 構造体へのポインター。 IO_CSQ_IRP_CONTEXT 構造体は、IoCsqInsertIrp によって初期化されるか、IRP がキューに最初に挿入されたときに IoCsqInsertIrpEx します。

戻り値

このルーチンは、キューから削除された IRP へのポインターを返します。または、その IRP が取り消された場合は NULL します。

備考

IoCsqRemoveIrp は、キューのディスパッチ ルーチンを使用して IRP を削除します。 IoCsqRemoveIrp ルーチン:

  1. キューの CsqAcquireLock ルーチンを呼び出して、キューをロックします。
  2. IrpContext パラメーターを使用して削除する IRP を決定し、キューの CsqRemoveIrp ルーチンを呼び出して、その IRP を削除します。
  3. キューの CsqReleaseLock ルーチンを呼び出して、キューのロックを解除します。
ドライバーは、IoCsqRemoveNextIrp ルーチンを使用して、特定の条件に一致する IRP を削除できます。 詳細については、「Cancel-Safe IRP キューの」を参照してください。

IoCsqXxx ルーチンは、IRP の DriverContext[3] メンバーを使用して IRP コンテキスト情報を保持します。 これらのルーチンを使用して IRP をキューに入れるドライバーは、そのメンバーを未使用のままにする必要があります。

IoCsqRemoveIrp の呼び出し元は、IRQL <= DISPATCH_LEVELで実行されている必要があります。 ドライバーのコールバック ルーチンは、その IRQL で正しく動作する必要があります。

必要条件

要件 価値
サポートされる最小クライアント Windows XP 以降のバージョンの Windows で使用できます。 Windows 2000 および Windows 98/Me でも動作する必要があるドライバーは、代わりに Csq.lib にリンクしてルーチンを使用できます。
ターゲット プラットフォーム 万国
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (「解説」セクションを参照)

関連項目

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveNextIrp