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 队列。
请注意,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) |
库 | 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) |