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