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 會提供其他功能。 如需詳細資訊,請參閱 取消安全的 IRP 佇列。
請注意, IoCsqXxx 例程會使用 IRP 的 DriverContext[3] 成員來保存 IRP 內容資訊。 使用這些例程來將 IRP 排入佇列的驅動程式,必須讓該成員保持未使用狀態。
IoCsqInsertIrp 的呼叫端必須在 IRQL <= DISPATCH_LEVEL執行。 驅動程式的回呼例程必須在該 IRQL 正常運作。