Löschen eines virtuellen Ports
Ein übergeordneter Treiber gibt eine OID-Set-Anforderung (Object Identifier) OID_NIC_SWITCH_DELETE_VPORT aus, um einen nicht standardmäßigen virtuellen Port (VPort) auf dem NIC-Switch eines Netzwerkadapters zu löschen. Der übergeordneter Treiber kann nur einen VPort löschen, den er zuvor erstellt hat, indem er eine OID-Methodenanforderung OID_NIC_SWITCH_CREATE_VPORT ausgibt.
Der InformationBuffer-Member der NDIS_OID_REQUEST-Struktur enthält einen Zeiger auf die NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS-Struktur.
Ein übergeordneter Treiber, z. B. der Virtualisierungsstapel, kann einen nicht standardmäßigen VPort löschen, den er zuvor erstellt hat. Der übergeordnete Treiber erstellt einen VPort, indem er eine OID-Methodenanforderung OID_NIC_SWITCH_CREATE_VPORT ausgibt.
Bevor er die OID-Set-Anforderung OID_NIC_SWITCH_DELETE_VPORT ausgibt, muss der übergeordnete Treiber Folgendes ausführen:
Der übergeordnete Treiber muss alle Empfangsfilter löschen oder verschieben, die er zuvor für den VPort festgelegt hat, bevor er den VPort löscht. Empfangsfilter werden über OID-Anforderungen OID_RECEIVE_FILTER_SET_FILTER festgelegt und über OID-Anforderungen OID_RECEIVE_FILTER_MOVE_FILTER verschoben.
Der übergeordnete Treiber legt den VPortId-Member der NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS-Struktur auf den Bezeichner des nicht standardmäßigen VPort fest, der gelöscht werden soll.
Hinweis: Der übergeordnete Treiber darf den VPortId-Member nicht auf NDIS_DEFAULT_PORT_NUMBER festlegen. Dieser VPort-Bezeichner ist für den Standard-VPort reserviert, der mit der PPCI Express (PCIe) Physical Function (PF) auf dem Netzwerkadapter verbunden ist. Der Standard-VPort ist immer vorhanden und wird nur explizit durch eine OID-Set-Anforderung OID_NIC_SWITCH_DELETE_VPORT gelöscht.
Der übergeordnete Treiber ruft NdisOidRequest auf, um die OID_NIC_SWITCH_DELETE_VPORT-Anforderung an den untergeordneten PF-Miniporttreiber auszugeben. Wenn der Miniporttreiber die OID_NIC_SWITCH_DELETE_VPORT-Anforderung empfängt, muss er Folgendes ausführen:
Der Treiber muss die Hardware- und Softwareressourcen freigeben, die für den angegebenen VPort zugeordnet wurden.
Der Treiber muss den angegebenen VPort von der PF oder einer PCIe Virtual Function (VF) trennen.
Wenn der VPort mit einer VF verbunden ist, stellt der Virtualisierungsstapel sicher, dass der im Gastbetriebssystem ausgeführte VF-Miniporttreiber zuvor angehalten wurde. Daher sollten alle zuvor angegebenen Empfangspakete vom VPort an den VF-Miniporttreiber zurückgegeben worden sein.
Wenn der VPort mit der PF verbunden ist, muss der PF-Miniporttreiber alle weiteren DMA für den gemeinsam genutzten Speicher beenden, die dem VPort zugeordnet sind. Der PF-Miniporttreiber muss sicherstellen, dass alle zuvor angegebenen Empfangspakete vom VPort an den Miniport zurückgegeben werden. Der PF-Miniporttreiber darf keine weiteren Empfangsanzeigen an NDIS senden, die den VPort-Bezeichner in der NET_BUFFER_LIST-Struktur des Pakets angeben. Nachdem alle angegebenen Empfangspakete vom VPort an den PF-Miniporttreiber zurückgegeben wurden, muss er den gemeinsam genutzten Speicher freigeben, der dem VPort zugeordnet ist, indem er NdisFreeSharedMemory aufruft.
Folgendes trifft auf das Löschen von VPorts zu:
Der übergeordnete Protokolltreiber muss alle nicht standardmäßigen VPorts löschen, die er erstellt hat, bevor er NdisCloseAdapterEx aufruft.
Der übergeordnete Filtertreiber muss alle nicht standardmäßigen VPorts löschen, die er in seiner FilterDetach-Funktion erstellt hat.
Bevor NDIS eine Set-Anforderung OID_NIC_SWITCH_DELETE_SWITCH ausgibt, um einen NIC-Switch des Netzwerkadapters zu löschen, wird sichergestellt, dass alle nicht standardmäßigen VPorts aus diesem Switch gelöscht werden.
Nur nicht standardmäßige VPorts können explizit über OID-Anforderungen OID_NIC_SWITCH_DELETE_SWITCH gelöscht werden. Der Standard-VPort wird implizit gelöscht, wenn der PF-Miniporttreiber den Standard-NIC-Switch löscht. Weitere Informationen finden Sie unter Löschen eines NIC-Switches.