次の方法で共有


IoCsqInsertIrp 関数 (wdm.h)

IoCsqInsertIrp ルーチンは、ドライバーのキャンセル セーフ IRP キューに IRP を挿入します。

構文

void IoCsqInsertIrp(
  [in, out]       PIO_CSQ             Csq,
  [in, out]       PIRP                Irp,
  [out, optional] PIO_CSQ_IRP_CONTEXT Context
);

パラメーター

[in, out] Csq

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

[in, out] Irp

キューに入る IRP へのポインター。

[out, optional] Context

IO_CSQ_IRP_CONTEXT構造体へのポインター。 IoCsqInsertIrp は、挿入された IRP のコンテキスト情報を使用してこの構造体を初期化します。 ドライバーは、この値を IoCsqRemoveIrp に渡して、キューから IRP を削除します。 ドライバーが IoCsqRemoveIrp を使用してキューからこの IRP を削除しない場合、コンテキストNULL にすることができます。

戻り値

なし

解説

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

  1. キューの CsqAcquireLock ルーチンを呼び出して、キューをロックします。
  2. キューの CsqInsertIrp ルーチンを 呼び出して、IRP を挿入します。
  3. IRP を保留中としてマークします。
  4. キューの CsqReleaseLock ルーチンを 呼び出して、キューのロックを解除します。
挿入する IRP が既に取り消されている場合、 IoCsqInsertIrp は IRP をキューに挿入しません。

ドライバーは、 IoCsqInsertIrpEx を使用して、IRP をキューに挿入することもできます。 IoCsqInitializeEx によって指定されたキューの場合、IoCsqInsertIrpEx には追加の機能が用意されています。 詳細については、「 Cancel-Safe IRP Queues」を参照してください。

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

IoCsqInsertIrp の呼び出し元は、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 (「解説」セクションを参照)
DDI コンプライアンス規則 IoAllocateFree(wdm)IoReuseIrp(wdm)IrpCancelField(wdm)RemoveLockCheck(wdm)RemoveLockForward(wdm)RemoveLockForward2(wdm)RemoveLockForwardDeviceControl(wdm)RemoveLockForwardDeviceControl2(wdm)RemoveLockForwardDeviceControlInternal(wdm)RemoveLockForwardDeviceControlInternal2(wdm)RemoveLockForwardRead(wdm)RemoveLockForwardRead2(wdm)RemoveLockForwardWrite(wdm)RemoveLockForwardWrite2(wdm)RemoveLockReleaseCleanup(wdm)RemoveLockReleaseClose(wdm)RemoveLockReleaseCreate(wdm)RemoveLockReleaseDeviceControl(wdm)RemoveLockReleaseInternalDeviceControl(wdm)RemoveLockReleasePower(wdm)RemoveLockReleaseRead(wdm)RemoveLockReleaseShutdown(wdm)RemoveLockReleaseSystemControl(wdm)RemoveLockReleaseWrite(wdm)

こちらもご覧ください

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp