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
  3. 如果 CsqPeekNextIrp 的返回值为非 NULL则 IoCsqRemoveNextIrp 调用队列的 CsqRemoveIrp 例程以删除 IRP。
  4. 调用队列的 CsqReleaseLock 例程以解锁队列。
有关详细信息,请参阅 取消安全 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)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (请参阅“备注”部分)

请参阅

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp