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