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 结构的指针。 此结构必须由 IoCsqInitializeIoCsqInitializeEx初始化。

[in, out] Context

指向标识要删除的 IRP 的 IO_CSQ_IRP_CONTEXT 结构的指针。 首次在队列中插入 IRP 时,IoCsqInsertIrpIoCsqInsertIrpEx 初始化 IO_CSQ_IRP_CONTEXT 结构。

返回值

此例程返回指向从队列中删除的 IRP 的指针,或 NULL(如果该 IRP 已被取消)。

言论

IoCsqRemoveIrp 使用队列的调度例程删除 IRP。 IoCsqRemoveIrp 例程:

  1. 调用队列的 CsqAcquireLock 例程来锁定队列。
  2. 使用 IrpContext 参数来确定要删除的 IRP,并调用队列的 CsqRemoveIrp 例程来删除该 IRP。
  3. 调用队列的 CsqReleaseLock 例程来解锁队列。
驱动程序可以使用 IoCsqRemoveNextIrp 例程删除与特定条件匹配的 IRP。 有关详细信息,请参阅 Cancel-Safe IRP 队列

请注意,IoCsqXxx 例程使用 DriverContext[3] IRP 成员来保存 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)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (请参阅“备注”部分)

另请参阅

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveNextIrp