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 ルーチン:
- キューの CsqAcquireLock ルーチンを呼び出して、キューをロックします。
- キューの IO_CSQ 構造体が IoCsqInitialize によって初期化された場合、IoCsqInsertIrpEx は、キューの CsqInsertIrp ルーチンを呼び出して IRP を挿入します。 IoCsqInitializeEx によってキューの IO_CSQ 構造が初期化された場合、IoCsqInsertIrpEx 、キューの CsqInsertIrpEx ルーチンを呼び出して IRP を挿入します。 CsqInsertIrpEx の InsertContext パラメーターとして InsertContext パラメーター渡します。
- キューの CsqReleaseLock ルーチンを呼び出して、キューのロックを解除します。
詳細については、「Cancel-Safe IRP キューの」を参照してください。
IoCsqXxxルーチン IRP の DriverContext[3] メンバーを使用して IRP コンテキスト情報を保持します。 これらのルーチンを使用して IRP をキューに入れるドライバーは、そのメンバーを未使用のままにする必要があります。
IoCsqInsertIrpEx の呼び出し元は、IRQL <= DISPATCH_LEVELで実行されている必要があります。 ドライバーのコールバック ルーチンは、この IRQL で正しく動作する必要があります。
必要条件
関連項目
IoCsqInitializeEx の
IoCsqInsertIrp の