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 以使用例程。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library 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