刪除虛擬埠
過度配置驅動程式會發出OID_NIC_SWITCH_DELETE_VPORT的物件識別碼 (OID) 集合要求,以刪除網路適配器 NIC 交換器上的非預設虛擬埠 (VPort)。 過度裝載的驅動程式只能刪除先前透過發出 OID_NIC_SWITCH_CREATE_VPORT 的 OID 方法要求所建立的 VPort。
NDIS_OID_REQUEST 結構的 InformationBuffer 成員包含NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS結構的指標。
過度的驅動程式,例如虛擬化堆疊,可以刪除它先前建立的非預設 VPort。 過度裝載的驅動程式會發出 OID_NIC_SWITCH_CREATE_VPORT的 OID 方法要求來建立 VPort。
在發出 OID_NIC_SWITCH_DELETE_VPORT 的 OID 集合要求之前,過度的驅動程式必須執行下列動作:
過度裝載的驅動程式必須先清除或移動驅動程式先前在 VPort 上設定的所有接收篩選,再刪除 VPort。 接收篩選條件是透過 OID_RECEIVE_FILTER_SET_FILTER 的 OID 要求來設定,並且會透過 OID_RECEIVE_FILTER_MOVE_FILTER 的 OID 要求移動。
過度配置驅動程式會將 NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS 結構的 VPortId 成員設定為要刪除之非預設 VPort 的標識碼。
注意 過度的驅動程式不得將 VPortId 成員設定為 NDIS_DEFAULT_PORT_NUMBER。 此 VPort 識別符會保留給網路適配器上附加至 PCI Express (PCIe) 實體函式 (PF) 的預設 VPort。 默認 VPort 一律存在,而且不會明確刪除 OID_NIC_SWITCH_DELETE_VPORT 的 OID 集合要求。
過度部署的驅動程式會呼叫 NdisOidRequest ,對基礎 PF 迷你埠驅動程式發出 OID_NIC_SWITCH_DELETE_VPORT 要求。 當迷你埠驅動程式收到OID_NIC_SWITCH_DELETE_VPORT要求時,驅動程式必須執行下列動作:
驅動程式必須釋放為指定 VPort 配置的硬體和軟體資源。
驅動程式必須中斷指定的 VPort 與 PF 或 PCIe 虛擬函式 (VF) 的卸離。
如果 VPort 已連結至 VF,虛擬化堆疊可確保在客體作業系統中執行的 VF 迷你埠驅動程式先前已暫停並停止。 因此,所有先前指出從 VPort 接收封包都應該傳回至 VF 迷你埠驅動程式。
如果 VPort 附加至 PF,PF 迷你埠驅動程式必須停止任何其他 DMA 到與 VPort 相關聯的共用記憶體。 PF 迷你埠驅動程序必須確定所有先前輸入的 VPort 接收封包都會傳回至迷你埠。 PF 迷你埠驅動程式不得對 NDIS 發出任何其他接收指示,以在封包的 NET_BUFFER_LIST 結構中指定 VPort 的識別碼。 從 VPort 傳回所有指定的接收封包至 PF 迷你埠驅動程序之後,它必須藉由呼叫 NdisFreeSharedMemory 釋放與 VPort 相關聯的共用記憶體。
下列幾點適用於刪除 VPorts:
過度配置通訊協定驅動程式必須刪除它呼叫 NdisCloseAdapterEx 之前所建立的所有非預設 VPorts。
過度的篩選驅動程式必須刪除它在 FilterDetach 函式內建立的所有非預設 VPorts。
在 NDIS 發出一組OID_NIC_SWITCH_DELETE_SWITCH要求以刪除網路適配器上的 NIC 交換器之前,它會保證從該交換器中刪除所有非預設 VPorts。
只有非預設 VPorts 可以透過 OID_NIC_SWITCH_DELETE_SWITCH 的 OID 要求明確刪除。 當 PF 迷你埠驅動程式刪除預設 NIC 參數時,會隱含刪除預設 VPort。 如需詳細資訊,請參閱 刪除 NIC 參數。