NDIS_PD_QUERY_QUEUE_DEPTH回调函数 (ndis.h)

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

注意 必须使用 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 队列的队列深度降低表明客户端无法在入站链接上以足够快的速度处理传入数据包。 客户端可能需要通过频繁 (监视队列深度状态例如,获取每个帖子和操作的队列深度,因此与单个 PDPostAndDrainBufferList 调用的成本相比,查询队列深度) CPU 周期中的成本 (不得明显。
 

示例

若要定义 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
目标平台 Windows
标头 ndis.h
IRQL <= DISPATCH_LEVEL