ioCsqRemoveIrp 函数 (wdm.h)
IoCsqRemoveIrp 例程从队列中删除特定的 IRP。
语法
PIRP IoCsqRemoveIrp(
[in, out] PIO_CSQ Csq,
[in, out] PIO_CSQ_IRP_CONTEXT Context
);
参数
[in, out] Csq
指向驱动程序的取消安全 IRP 队列 的IO_CSQ 结构的指针。 此结构必须已由 IoCsqInitialize 或 IoCsqInitializeEx 初始化。
[in, out] Context
指向标识要删除的 IRP 的 IO_CSQ_IRP_CONTEXT 结构的指针。 当 IRP 首次插入队列时,IoCsqInsertIrp 或 IoCsqInsertIrpEx 将初始化 IO_CSQ_IRP_CONTEXT 结构。
返回值
此例程返回指向已从队列中删除的 IRP 的指针;如果已取消该 IRP,则返回 NULL 。
注解
IoCsqRemoveIrp 使用队列的调度例程删除 IRP。 IoCsqRemoveIrp 例程:
- 调用队列的 CsqAcquireLock 例程以锁定队列。
- 使用 IrpContext 参数确定要删除的 IRP,并调用队列的 CsqRemoveIrp 例程来删除该 IRP。
- 调用队列的 CsqReleaseLock 例程来解锁队列。
请注意, IoCsqXxx 例程使用 IRP 的 DriverContext[3] 成员来保存 IRP 上下文信息。 使用这些例程对 IRP 进行排队的驱动程序必须使该成员处于未使用状态。
IoCsqRemoveIrp 的调用方必须在 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 (请参阅备注部分) |