IO_CSQ_PEEK_NEXT_IRP回调函数 (wdm.h)

系统使用 CsqPeekNextIrp 例程在驱动程序实现的取消安全 IRP 队列中查找下一个匹配的 IRP。

语法

IO_CSQ_PEEK_NEXT_IRP IoCsqPeekNextIrp;

PIRP IoCsqPeekNextIrp(
  [in]           PIO_CSQ Csq,
  [in, optional] PIRP Irp,
  [in, optional] PVOID PeekContext
)
{...}

参数

[in] Csq

指向取消安全 IRP 队列 的IO_CSQ 结构的指针。

[in, optional] Irp

指向驱动程序的 IRP 队列中的 IRP 的指针,或 NULL ,用于指定队列的开头。

[in, optional] PeekContext

指向驱动程序定义的上下文信息的指针。 CsqPeekNextIrp 例程返回 Irp 后面的第一个 IRP,并匹配 PeekContext

返回值

CsqPeekNextIrp 返回队列中 Irp 之后的第一个 IRP ,并匹配 PeekContext;如果没有匹配的 IRP,则返回 NULL 。 如果 IrpNULL则 CsqPeekNextIrp 返回队列中第一个匹配的 IRP;如果没有匹配的 IRP,则返回 NULL

注解

驱动程序在初始化队列的IO_CSQ结构时为取消安全 IRP 队列指定 CsqPeekNextIrp 例程。 驱动程序在初始化IO_CSQ时,将例程指定为 IoCsqInitializeIoCsqInitializeExCsqPeekNextIrp 参数。 有关详细信息,请参阅 取消安全 IRP 队列

系统使用 CsqPeekNextIrp 循环访问驱动程序 IRP 队列中的 IRP。 例如, IoCsqRemoveNextIrp 例程使用此例程来查找要删除的 IRP。

示例

若要定义 CsqPeekNextIrp 回调例程,必须首先提供一个函数声明,用于标识要定义的回调例程的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析静态驱动程序验证程序 (SDV) 和其他验证工具查找错误,并且这是编写适用于 Windows 操作系统的驱动程序的要求。

例如,若要定义名为 MyCsqPeekNextIrpCsqPeekNextIrp 回调例程,请使用IO_CSQ_PEEK_NEXT_IRP类型,如以下代码示例所示:

IO_CSQ_PEEK_NEXT_IRP MyCsqPeekNextIrp;

然后,按如下所示实现回调例程:

_Use_decl_annotations_
PIRP 
 MyCsqPeekNextIrp(
    PIO_CSQ  Csq,
    PIRP  Irp,
    PVOID  PeekContext
    )
  {
      // Function body
  }

IO_CSQ_PEEK_NEXT_IRP函数类型在 Wdm.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 _Use_decl_annotations_ 注释添加到函数定义。 注释 _Use_decl_annotations_ 可确保使用应用于头文件中IO_CSQ_PEEK_NEXT_IRP函数类型的注释。 有关函数声明要求的详细信息,请参阅 使用 WDM 驱动程序的函数角色类型声明函数。 有关 的信息 _Use_decl_annotations_,请参阅 批注函数行为

要求

要求
目标平台 桌面
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)

另请参阅

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp