IoCsqRemoveNextIrp 函数 (wdm.h)

IoCsqRemoveNextIrp 例程删除队列中的下一个匹配 IRP。

语法

PIRP IoCsqRemoveNextIrp(
  [in, out]      PIO_CSQ Csq,
  [in, optional] PVOID   PeekContext
);

参数

[in, out] Csq

指向驱动程序调度表的指针,用于取消安全的 IRP 队列。 调度表必须由 ioCsqInitialize 初始化。

[in, optional] PeekContext

指向驱动程序定义的上下文值的指针。 IoCsqRemoveNextIrp 将此参数传递给驱动程序的 CsqPeekNextIrp 例程。 有关详细信息,请参阅以下“备注”部分。

返回值

此例程返回指向队列中下一个匹配的 IRP 的指针,或者如果没有更多的 IRP 可用,NULL。 例程仅返回尚未取消的 IRP。

言论

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

  1. 调用队列的 CsqAcquireLock 例程来锁定队列。
  2. 调用队列的 CsqPeekNextIrp 例程来查找队列中的下一个匹配 IRP。 IoCsqRemoveNextIrpPeekContext 参数的值作为 CsqPeekNextIrpPeekContext 参数传递。 CsqPeekNextIrp 返回指向下一个匹配 IRP 的指针,如果没有匹配的 IRP,则返回 NULL NULL
  3. 如果 CsqPeekNextIrp 的返回值非NULLIoCsqRemoveNextIrp 调用队列的 CsqRemoveIrp 例程以删除 IRP。
  4. 调用队列的 CsqReleaseLock 例程来解锁队列。
有关详细信息,请参阅 Cancel-Safe IRP 队列

请注意,IoCsqXxx 例程使用 IRP 的 DriverContext[3] 成员来保存 IRP 上下文信息。 使用这些例程对 IRP 进行排队的驱动程序必须将该成员保留为未使用状态。

IoCsqRemoveNextIrp 的调用方必须在 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

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp