過料驅動程式會發出 OID_NIC_SWITCH_DELETE_VPORT 的物件識別碼(OID)設置請求,用於刪除網路適配器的 NIC 交換器上的非預設虛擬埠(VPort)。 上層驅動程式只能刪除它先前建立的 VPort,方法是發出 OID_NIC_SWITCH_CREATE_VPORT的 OID 方法請求。
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 要求來移動。
上層驅動程式將 VPortId 成員設定為 NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS 結構中的識別符,以刪除非預設 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 從 PF 或 PCIe 虛擬函式 (VF) 中分離。
如果 VPort 已連結至 VF,虛擬化堆疊可確保在客體作業系統中執行的 VF 小型端口驅動程式先前已被暫停和終止。 因此,所有先前標示為從 VPort 接收的封包都應該被傳回至 VF 小型埠驅動程式。
當 VPort 附加至 PF 時,PF 迷你埠驅動程式必須停止對與 VPort 相關聯的共用記憶體進行任何其他的 DMA 運作。 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 交換器。