枚举网络适配器上的虚拟端口
过度分配的驱动程序或用户应用程序可以获取支持单根 I/O 虚拟化 (SR-IOV) 的网络适配器的 NIC 交换机上 (VPorts) 的所有虚拟端口的列表。 驱动程序或应用程序发出对象标识符 (OID) OID_NIC_SWITCH_ENUM_VPORTS 的方法请求以获取此列表。
从此 OID 查询请求成功返回后,NDIS_OID_REQUEST 结构的 InformationBuffer 成员包含指向包含以下内容的缓冲区的指针:
定义数组中元素数 的NDIS_NIC_SWITCH_VPORT_INFO_ARRAY 结构。
NDIS_NIC_SWITCH_VPORT_INFO 结构的数组。 其中每个结构都包含有关网络适配器的 NIC 交换机上的 VPort 的信息。
注意如果未在网络适配器上创建 VPort,驱动程序会将NDIS_NIC_SWITCH_VPORT_INFO_ARRAY结构的 NumElements 成员设置为零,并且不会返回NDIS_NIC_SWITCH_VPORT_INFO结构。
在过度分配的驱动程序或用户应用程序发出 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 的信息。 在这种情况下, 将忽略 SwitchId 和 AttachedFunctionId 的值。
NDIS 处理微型端口驱动程序 的OID_NIC_SWITCH_ENUM_VPORTS 请求。 NDIS 从它通过检查以下源维护的数据的内部缓存中返回信息:
OID_NIC_SWITCH_CREATE_VPORT的 OID 方法请求。
OID_NIC_SWITCH_VPORT_PARAMETERS的 OID 集请求。