共用方式為


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 結構的指標。 這個結構必須由 IoCsqInitializeIoCsqInitializeEx初始化。

[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 會提供其他功能。 如需詳細資訊,請參閱 取消安全的 IRP 佇列

請注意, IoCsqXxx 例程會使用 IRP 的 DriverContext[3] 成員來保存 IRP 內容資訊。 使用這些例程來將 IRP 排入佇列的驅動程式,必須讓該成員保持未使用狀態。

IoCsqInsertIrp 的呼叫端必須在 IRQL <= DISPATCH_LEVEL執行。 驅動程式的回呼例程必須在該 IRQL 正常運作。

規格需求

需求
最低支援的用戶端 可在 Windows XP 和更新版本的 Windows 中使用。 也必須在 Windows 2000 和 Windows 98/Me 中運作的驅動程式可以改為連結至 Csq.lib 以使用例程。
目標平台 Universal
標頭 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) 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