附註 這個方法只能由在 Hyper-V 父分割區的管理作業系統中執行的上層驅動程式使用。
PCI Express (PCIe) 虛擬函式 (VF) 的迷你埠驅動程式會在 Hyper-V 子磁碟分區的客體作系統中執行。 因此,VF 迷你埠驅動程式無法直接存取硬體資源,例如 VF 的 PCIe 設定空間。 只有 PCIe 實體函式的迷你埠驅動程式 (PF) 可以存取 VF 的 PCIe 組態空間。 PF 迷你埠驅動程式會在 Hyper-V 父磁碟分區的管理作系統中執行,並具有 VF 資源的特殊許可權存取權。
在管理操作系統中執行的負責驅動程式會發出 OID_SRIOV_READ_VF_CONFIG_SPACE 的對象識別碼(OID)方法請求,以從網路適配器上指定 VF 的 PCIe 配置空間讀取數據。
例如,當 VF 迷你埠驅動程式呼叫 NdisMGetBusData 從 VF PCIe 組態空間讀取時,在管理作業系統中運行的虛擬化堆疊會發出 OID_SRIOV_READ_VF_CONFIG_SPACE 的 OID 方法要求。
在發出這個 OID 方法要求之前,上層驅動程式必須以下列方式設定 NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 結構的成員:
VFId 成員必須設定為要讀取資訊的 VF 識別符。
Offset 欄位必須設定為要從中讀取數據的 VF 之 PCIe 配置空間內的位移。
Length 成員必須設定為要從 VF 的 PCIe 組態空間中讀取的位元組數量。
BufferOffset 成員必須設定為緩衝區內的位移(由 InformationBuffer 成員參考),其中包含從指定 VF 的 PCI 組態空間讀取的數據。 這個位移是以位元組為單位,從 NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 結構的開頭來指定。
當它處理 OID_SRIOV_READ_VF_CONFIG_SPACE的 OID 方法要求時,PF 迷你埠驅動程式必須遵循下列指導方針:
迷你埠驅動程序必須驗證由 VFId 所指定的 VF 是否已擁有之前配置的資源,這些資源由 NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 結構的成員進行指定。 迷你埠驅動程式會透過 OID_NIC_SWITCH_ALLOCATE_VF的 OID 方法要求,為 VF 配置資源。 如果未配置指定 VF 的資源,驅動程式必須使 OID 要求失敗。
迷你埠驅動程式必須驗證,由 InformationBuffer 成員所參考的 NDIS_OID_REQUEST 結構中的緩衝區是否足夠大,以便返回所請求的 PCIe 組態空間數據。 如果這不正確,驅動程式必須拒絕 OID 要求。
迷你埠驅動程式通常會呼叫 NdisMGetVirtualFunctionBusData 來查詢要求的PCIe組態空間。 不過,迷你埠驅動程式也可以傳回驅動程式從PCIe組態空間先前讀取或寫入作業快取之 VF 的PCIe 設定空間數據。
注意 如果獨立硬體廠商 (IHV) 在其 SR-IOV 驅動程式套件中提供虛擬總線驅動程式 (VBD),則其迷你埠驅動程式不得呼叫 NdisMGetVirtualFunctionBusData。 而是驅動程式需透過私人通道與 VBD 介接,並要求 VBD 呼叫 ReadVfConfigBlock。 此功能呈現於由虛擬PCI (VPCI) 總線驅動程式支援的 GUID_VPCI_INTERFACE_STANDARD 介面。
成功返回此 OID 方法請求後,NDIS_OID_REQUEST 結構中的 InformationBuffer 成員包含指向呼叫者配置的緩衝區的指標。 此緩衝區的格式設定為包含下列內容:
NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 結構,其中包含 VF 之 PCIe 組態空間讀取作業的參數。
從PCIe設定空間讀取數據所需的額外緩衝區空間。 驅動程式將數據複製到緩衝區,位置由NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 結構的BufferOffset 成員所指定的位移。