NdisMGetVirtualFunctionLocation 函数 (ndis.h)

微型端口驱动程序调用 NdisMGetVirtualFunctionLocation 函数来查询 PCI Express (PCIe) Virtual Function (VF) 在 PCI 总线上的设备位置。 驱动程序使用设备位置为 VF 构造 PCIe 请求者 ID (RID) 。

注意NdisMGetVirtualFunctionLocation 只能由微型端口驱动程序为网络适配器的 PCIe 物理函数 (PF) 调用。
 

语法

void NdisMGetVirtualFunctionLocation(
  [in]  NDIS_HANDLE            NdisMiniportHandle,
  [in]  NDIS_SRIOV_FUNCTION_ID VFId,
  [out] PUSHORT                SegmentNumber,
  [out] PUCHAR                 BusNumber,
  [out] PUCHAR                 FunctionNumber
);

参数

[in] NdisMiniportHandle

NDIS 传递给 MiniportInitializeExMiniportAdapterHandle 参数的网络适配器句柄。

[in] VFId

为其返回设备位置的 VF 的标识符。

[out] SegmentNumber

指向调用方提供的变量的指针,在此变量中,此函数返回当前 PCI 段号的 USHORT 值。 此值指定设备所连接的 PCI 总线组。

[out] BusNumber

指向调用方提供的变量的指针,此函数在其中返回 UCHAR 值。 此值指定连接设备的当前 PCI 总线编号。

[out] FunctionNumber

指向调用方提供的变量的指针,此函数在其中返回 UCHAR 值。 此值指定设备上的逻辑设备的函数编号。

返回值

备注

处理 OID_NIC_SWITCH_ALLOCATE_VF 的方法请求时,PF 微型端口驱动程序必须返回驱动程序已成功在网络适配器上分配的 VF 的 RID。 驱动程序按以下方式生成 RID:

  1. 驱动程序首先调用 NdisMGetVirtualFunctionLocation 函数来获取 VF 的总线相关位置信息。
  2. 然后,驱动程序使用与总线相关的位置信息调用 NDIS_MAKE_RID 宏,以生成 RID。

有关如何分配 VF 资源的详细信息,请参阅 虚拟函数初始化序列

有关 SR-IOV 接口的详细信息,请参阅 单根 I/O 虚拟化 (SR-IOV) 概述

与虚拟总线驱动程序交互

如果独立硬件供应商 (IHV) 提供虚拟总线驱动程序 (VBD) 作为其 SR-IOV 驱动程序包的一部分,则其微型端口驱动程序不得调用 NdisMGetVirtualFunctionLocation。 相反,驱动程序必须通过专用信道与 VBD 进行交互,并请求 VBD 调用 GetLocation。 此函数从基础 PCI 总线驱动程序支持的 GUID_PCI_VIRTUALIZATION_INTERFACE 接口公开。

在 Hyper-V 父分区的管理操作系统中运行的 VBD 可以通过在 PCI 总线上向其物理设备对象发出IRP_MN_QUERY_INTERFACE请求来查询GUID_PCI_VIRTUALIZATION_INTERFACE接口, (PDO) 。 必须从 IRQL = PASSIVE_LEVEL 发出此请求。 在此请求中,驱动程序必须将 InterfaceType 参数设置为 GUID_PCI_VIRTUALIZATION_INTERFACE。

要求

要求
最低受支持的客户端 不支持,NDIS 6.30 及更高版本支持。
最低受支持的服务器 Windows Server 2012
目标平台 通用
标头 ndis.h (包括 Ndis.h)
Library Ndis.lib
IRQL PASSIVE_LEVEL

另请参阅

GUID_PCI_VIRTUALIZATION_INTERFACE

GetLocation

NDIS_MAKE_RID

OID_NIC_SWITCH_ALLOCATE_VF