次の方法で共有


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

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

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

要件

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

こちらもご覧ください

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp