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 ルーチン:
- キューの CsqAcquireLock ルーチンを呼び出して、キューをロックします。
- キューの CsqInsertIrp ルーチンを 呼び出して、IRP を挿入します。
- IRP を保留中としてマークします。
- キューの CsqReleaseLock ルーチンを 呼び出して、キューのロックを解除します。
ドライバーは、 IoCsqInsertIrpEx を使用して、IRP をキューに挿入することもできます。 IoCsqInitializeEx によって指定されたキューの場合、IoCsqInsertIrpEx には追加の機能が用意されています。 詳細については、「 Cancel-Safe IRP Queues」を参照してください。
IoCsqXxx ルーチンは、IRP の DriverContext[3] メンバーを使用して IRP コンテキスト情報を保持します。 これらのルーチンを使用して IRP をキューに入れるドライバーは、そのメンバーを未使用のままにしておく必要があります。
IoCsqInsertIrp の呼び出し元は、IRQL <= DISPATCH_LEVELで実行されている必要があります。 ドライバーのコールバック ルーチンは、その IRQL で正しく動作する必要があります。