枚举网络适配器上的虚拟端口

过度分配的驱动程序或用户应用程序可以获取支持单根 I/O 虚拟化 (SR-IOV) 的网络适配器的 NIC 交换机上 (VPorts) 的所有虚拟端口的列表。 驱动程序或应用程序发出对象标识符 (OID) OID_NIC_SWITCH_ENUM_VPORTS 的方法请求以获取此列表。

从此 OID 查询请求成功返回后,NDIS_OID_REQUEST 结构的 InformationBuffer 成员包含指向包含以下内容的缓冲区的指针:

在过度分配的驱动程序或用户应用程序发出 OID_NIC_SWITCH_ENUM_VPORTS 请求之前,它必须初始化随请求一起传递 的NDIS_NIC_SWITCH_VPORT_INFO_ARRAY 结构。 驱动程序或应用程序在初始化 NDIS_NIC_SWITCH_VPORT_INFO_ARRAY 结构时必须遵循以下准则:

  • 如果在 Flags 成员中设置了NDIS_NIC_SWITCH_VPORT_INFO_ARRAY_ENUM_ON_SPECIFIC_SWITCH标志,则会为在指定的 NIC 交换机上创建的所有 VPort 返回信息。 NIC 开关由该结构的 SwitchId 成员指定。

    注意从 Windows Server 2012 开始,SR-IOV 接口仅支持网络适配器上的一个 NIC 交换机。 此开关称为 默认 NIC 开关,由NDIS_DEFAULT_SWITCH_ID标识符引用。 无论 Flags 成员中设置的标志如何, SwitchId 成员都必须设置为 NDIS_DEFAULT_SWITCH_ID。

  • 如果在 Flags 成员中设置了NDIS_NIC_SWITCH_VPORT_INFO_ARRAY_ENUM_ON_SPECIFIC_FUNCTION标志,则会返回网络适配器上连接到指定 PCI Express (PCIe) 物理功能 (PF) 或 Virtual Function (VF) 的所有 VPort 的信息。 PF 或 VF 由该结构的 AttachedFunctionId 成员指定。

    如果将 AttachedFunctionId 成员设置为 NDIS_PF_FUNCTION_ID,则会为所有 VPort 返回信息。 这包括附加到 PF 的默认 VPort。 如果将 AttachedFunctionId 成员设置为有效的 VF 标识符,则会返回附加到指定 VF 的所有 VPort 的信息。

    注意从 Windows Server 2012 开始,只能将一个非默认 VPort 附加到 VF。 但是,可以将多个 VPort (包括默认 VPort) 附加到 PF。

  • 如果 Flags 成员设置为零,则会返回连接到网络适配器上 PF 或 VF 的所有 VPort 的信息。 在这种情况下, 将忽略 SwitchIdAttachedFunctionId 的值。

NDIS 处理微型端口驱动程序 的OID_NIC_SWITCH_ENUM_VPORTS 请求。 NDIS 从它通过检查以下源维护的数据的内部缓存中返回信息: