次の方法で共有


IoCsqRemoveNextIrp 関数 (wdm.h)

IoCsqRemoveNextIrp ルーチンは、キュー内の次の一致する IRP を削除します。

構文

PIRP IoCsqRemoveNextIrp(
  [in, out]      PIO_CSQ Csq,
  [in, optional] PVOID   PeekContext
);

パラメーター

[in, out] Csq

キャンセル セーフ IRP キューのドライバーのディスパッチ テーブルへのポインター。 ディスパッチ テーブルは、IoCsqInitializeによって初期化する必要があります。

[in, optional] PeekContext

ドライバー定義のコンテキスト値へのポインター。 IoCsqRemoveNextIrp は、ドライバーの CsqPeekNextIrp ルーチンにこのパラメーターを渡します。 詳細については、次の「解説」セクションを参照してください。

戻り値

このルーチンは、キュー内の次に一致する IRP へのポインターを返すか、使用できる IRP がなくなった場合は NULL します。 このルーチンは、まだ取り消されていない IRP のみを返します。

備考

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

  1. キューの CsqAcquireLock ルーチンを呼び出して、キューをロックします。
  2. キューの CsqPeekNextIrp ルーチンを呼び出して、キュー内の次の一致する IRP を検索します。 IoCsqRemoveNextIrp は、PeekContext パラメーターの値 CsqPeekNextIrpPeekContext パラメーターとして渡します。 CsqPeekNextIrp は、次に一致する IRP へのポインターを返します。一致する IRP がない場合は NULL します。
  3. CsqPeekNextIrp の戻り値が非NULLの場合、IoCsqRemoveNextIrp キューの CsqRemoveIrp ルーチンを呼び出して IRP を削除します。
  4. キューの CsqReleaseLock ルーチンを呼び出して、キューのロックを解除します。
詳細については、「Cancel-Safe IRP キューの」を参照してください。

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

IoCsqRemoveNextIrp の呼び出し元は、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

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp