PCI Express (PCIe) 實體函式 (PF) 的迷你埠驅動程式會與 PCIe 虛擬函式 (VF) 的迷你埠驅動程序通訊,以發出 VF 組態區塊數據變更的相關通知。 PF 迷你埠驅動程式會發出這些通知,以 VF 組態區塊中的數據失效。 為了回應此通知,VF 迷你埠驅動程式可以發出向 PF 迷你埠驅動程序發出反向通道要求,以從無效的 VF 組態區塊讀取數據。
VF 組態區塊用於 PF 與 VF 迷你埠驅動程式之間的反向通道通訊。 IHV 可以定義裝置的一或多個 VF 組態區塊。 每個 VF 組態區塊都有 IHV 定義的格式、長度和區塊識別碼。
注意 每個 VF 組態區塊中的數據只會由 PF 和 VF 迷你埠驅動程式使用。 此資料的格式和內容對 Windows 作業系統的元件來說是不透明的。
發出和處理無效 VF 組態數據的通知時,會發生下列步驟:
在客體作系統中,NDIS 會發出 IOCTL_VPCI_INVALIDATE_BLOCK的 I/O 控制要求。 當此 IOCTL 完成時,NDIS 會收到 VF 設定數據已變更的通知。
在 Hyper-V 父分割區中執行的管理作系統中,會發生下列步驟:
PF 迷你埠驅動程式會呼叫 NdisMInvalidateConfigBlock 函式,以通知 NDIS VF 組態數據已變更且不再有效。 驅動程式會將 BlockMask 參數設定為 ULONGLONG 位掩碼,指定哪些 VF 組態區塊已變更。 位掩碼中的每個位都會對應至 VF 組態區塊。 如果 bit 設置為1,表示對應的 VF 設定區塊中的資料已變更。
NDIS 會針對 VF 組態區塊數據的變更,向在管理作業系統中執行的虛擬化堆疊發出訊號。 虛擬化堆疊會快取 BlockMask 參數數據。
注意 每次 PF 迷你埠驅動程式呼叫 NdisMInvalidateConfigBlock時,虛擬化堆疊會將 BlockMask 參數數據與快取中的目前值進行 OR 操作。
虛擬化堆疊會通知在客體作業系統中執行的虛擬PCI (VPCI) 驅動程式,關於VF配置數據失效。 虛擬化堆疊會將快取的BlockMask參數數據傳送至VPCI驅動程式。
在執行於 Hyper-V 子分割的客體作業系統中,會發生以下步驟:
在與 IOCTL_VPCI_INVALIDATE_BLOCK 要求相關聯的 VPCI_INVALIDATE_BLOCK_OUTPUT 結構中,VPCI 驅動程式會將快取的 BlockMask 參數數據儲存在 BlockMask 成員中。
VPCI 驅動程式成功完成 IOCTL_VPCI_INVALIDATE_BLOCK 要求。 發生這種情況時,NDIS 會向 VF 迷你埠驅動程式發出 OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK 的物件識別碼 (OID) 方法要求。 NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO 會在 OID 要求中傳遞。 此結構包含快取 BlockMask 參數數據。
NDIS 也會發出另一個 IOCTL_VPCI_INVALIDATE_BLOCK 請求,以處理 VF 設定數據變更的後續通知。
當 VF 驅動程式處理 OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK 要求時,可以呼叫 NdisMReadConfigBlock,從指定的 VF 組態區塊讀取數據。 如需此流程的詳細資訊,請參閱 VF 小型埠驅動程式的 Backchannel Communication。