NDIS_PD_QUERY_QUEUE_DEPTH回调函数 (ndis.h)

PacketDirect (PD) 平台调用支持 PD 的微型端口驱动程序的 PDQueryQueueDepth 函数,以返回发布到 队列的未处理的 PD_BUFFER 结构的数量。

Note 必须使用 NDIS_PD_QUERY_QUEUE_DEPTH 类型声明函数。 有关详细信息,请参阅以下示例部分。

 

语法

NDIS_PD_QUERY_QUEUE_DEPTH NdisPdQueryQueueDepth;

VOID() NdisPdQueryQueueDepth(
  [in]  const NDIS_PD_QUEUE *Queue,
  [out] ULONG64 *Depth
)
{...}

参数

[in] Queue

指向传输或接收队列的指针。

[out] Depth

在接收队列中,这是可用于将传入数据包放入的 PD_BUFFER 结构的数量。 例如,如果已发布 10 个缓冲区,并且提供程序已提取 10 个缓冲区中的 3 个用于将传入数据包放入其中,则此值应为 7。 在传输队列中,这是提供程序尚未从队列中提取的用于传输的 PD_BUFFER 结构数。

返回值

此回调函数不返回值。

言论

注意 IHV 合作伙伴:监视队列深度的能力对于客户端访问拥塞生成并采取预防措施非常重要。 传输队列的队列深度增加是出站链路上增加拥塞的迹象。 RX 队列的队列深度减少是客户端无法在入站链接上快速处理传入数据包的标志。 客户端可能需要频繁监视队列深度状态(例如,获取每个帖子和作的队列深度),因此查询队列深度的成本(以 CPU 周期为单位)与单个 PDPostAndDrainBufferList 调用的成本相比,不能明显。
 

示例

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

例如,若要定义名为“MyPDQueryQueueDepth”的 PDQueryQueueDepth 函数,请使用 NDIS_PD_QUERY_QUEUE_DEPTH 类型,如以下代码示例所示:

NDIS_PD_QUERY_QUEUE_DEPTH MyPDQueryQueueDepth;

然后,按如下所示实现函数:

_Use_decl_annotations_
VOID
 MyPDQueryQueueDepth(
    CONST NDIS_PD_QUEUE*  Queue,
    ULONG64*  Depth
    )
  {...}

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

有关 Use_decl_annotations的信息,请参阅 批注函数行为

要求

要求 价值
最低支持的客户端 Windows 10
支持的最低服务器 Windows Server 2016
目标平台 窗户
标头 ndis.h
IRQL <= DISPATCH_LEVEL