次の方法で共有


IoCsqInsertIrpEx 関数 (wdm.h)

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

構文

NTSTATUS IoCsqInsertIrpEx(
  [in, out]       PIO_CSQ             Csq,
  [in, out]       PIRP                Irp,
  [out, optional] PIO_CSQ_IRP_CONTEXT Context,
  [in, optional]  PVOID               InsertContext
);

パラメーター

[in, out] Csq

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

[in, out] Irp

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

[out, optional] Context

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

[in, optional] InsertContext

ドライバー定義のコンテキスト値へのポインター。 このパラメーターは、ドライバーの CsqInsertIrpEx ルーチン (存在する場合) に渡されます。 それ以外の場合、このパラメーターは無視されます。

戻り値

Csq パラメーター IoCsqInitializeで初期化された場合、IoCsqInsertIrpEx は常にSTATUS_SUCCESSを返します。 Csq が ioCsqInitializeEx で初期化された場合、IoCsqInsertIrpEx は、ドライバーの CsqInsertIrpEx ルーチンによって返された値を返します。

備考

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

  1. キューの CsqAcquireLock ルーチンを呼び出して、キューをロックします。
  2. キューの IO_CSQ 構造体が IoCsqInitialize によって初期化された場合、IoCsqInsertIrpEx は、キューの CsqInsertIrp ルーチンを呼び出して IRP を挿入します。 IoCsqInitializeEx によってキューの IO_CSQ 構造が初期化された場合、IoCsqInsertIrpEx 、キューの CsqInsertIrpEx ルーチンを呼び出して IRP を挿入します。 CsqInsertIrpEx InsertContext パラメーターとして InsertContext パラメーター渡します。
  3. キューの CsqReleaseLock ルーチンを呼び出して、キューのロックを解除します。
挿入する IRP が既に取り消されている場合、IoCsqInsertIrpEx は、キューに IRP を挿入しようとしません。

詳細については、「Cancel-Safe IRP キューの」を参照してください。

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

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

必要条件

要件 価値
サポートされる最小クライアント Windows Server 2003 以降のバージョンの Windows オペレーティング システムで使用できます。 このルーチンは、Windows Driver Kit (WDK) と Windows Server 2003 用ドライバー開発キット (DDK) に付属する Csq.lib ライブラリでも使用できます。 Windows XP、Windows 2000、および Windows 98/Me でも動作する必要があるドライバーは、代わりに Csq.lib にリンクしてルーチンを使用できます。
ターゲット プラットフォーム 万国
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (「解説」セクションを参照)
DDI コンプライアンス規則 する IoAllocateFree(wdm), IoReuseIrp(wdm), IrpCancelField(wdm), RemoveLockCheck(wdm)、 RemoveLockForward(wdm) 、 RemoveLockForward2(wdm) 、 RemoveLockForwardDevice Control(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

IoCsqInsertIrp

IoCsqRemoveIrp

IoCsqRemoveNextIrp