Freigeben über


Richtlinien für MB Miniport-Treiber-IP-Adressbenachrichtigungen

MB-Miniporttreiber, die "EnableDhcp" in ihren INF-Dateien angeben, können die IP-Hilfsfunktion und die zugehörigen Funktionen im Kernelmodus verwenden, um die IP-Adresse zu erstellen, zu ändern und zu löschen:

Um die IP-Hilfsfunktionen im Kernelmodus zu verwenden, müssen Miniporttreiber die Netioapi.h-Headerdatei und den Link zu Netio.lib enthalten.

Wenn Miniporttreiber "EnableDhcp" auf Null festlegen, müssen sie die folgenden Vorgänge ausführen, um den MB-Dienst über die folgenden Ereignisse zu benachrichtigen:

  • Festlegen der IP-Adresse für die MB-Schnittstelle

  • Festlegen der Standardgatewayadresse

  • Aktualisieren von DNS-Adressen

IP-Adressen und Standardgateways, die mithilfe der IP-Hilfs-API festgelegt werden, speichern Netzwerkverbindungs- oder Trennungsereignisse oder beides. Wenn die neue IP-Adresse oder das Standardgateway oder beide Werte von den derzeit festgelegten Werten abweichen, sollte der Miniporttreiber daher zuerst die vorherigen Werte löschen, bevor neue Werte für ein Netzwerkverbindungsereignis festgelegt werden.

Beachten Sie, dass Miniport-Treiber die LUID und den Index der MB-Schnittstelle aus den Elementen NetLuid oder IfIndex der NDIS_MINIPORT_INIT_PARAMETERS Struktur finden können, die an die MiniportInitializeEx-Funktion des Miniporttreibers übergeben wird.

Zurücksetzen der IP-Adresse und der Gatewayadresse

Bestimmte Änderungen am TCP/IP-Stapel, z. B. das Laden eines obligatorischen Filtertreibers, können die von den IP-Hilfsfunktionen festgelegten IP- und Gatewayadressen entfernen. Miniporttreiber müssen die IP- und Gatewayadressen zurücksetzen, wenn Änderungen am TCP/IP-Stapel die Einstellungen entfernen.

Miniporttreiber sollten das folgende Verfahren verwenden, um benachrichtigt zu werden, wenn die Adressen entfernt werden und erneut zurückgesetzt werden müssen.

  1. Während der Treiberinitialisierung sollten Miniporttreiber eine Rückruffunktion angeben, die bei Änderungsbenachrichtigungen über IP-Schnittstellen mithilfe von NotifyIpInterfaceChange registriert werden soll. Windows ruft die Funktion immer dann auf, wenn eine IP-Schnittstelle hinzugefügt, gelöscht oder geändert wird.

  2. Während der Adapterinitialisierung sollten Miniporttreiber im lokalen Adapterkontext des Miniporttreibers den LUID-Wert aus der NDIS_MINIPORT_INIT_PARAMETERS Struktur speichern, die an die MiniportInitializeEx-Funktion des Miniporttreibers übergeben wird. Der Wert enthält die NetLuid , die die Schnittstelle des Adapters identifiziert, die im Benachrichtigungsrückruf verwendet wird.

  3. Im Benachrichtigungsrückruf übergibt Windows die folgenden Parameter an die mit NotifyIpInterfaceChange registrierte Benachrichtigungsfunktion:

    • Ein Zeiger auf eine MIB_IPINTERFACE_ROW Struktur, die die NetLuid der Schnittstelle des Miniportadapters enthält.
    • Der Typ der Benachrichtigung, die MibAddInstance, MibDeleteInstance oder MibParameterNotification sein kann.

    Miniport-Treiber sollten die IP- und Gatewayadressen zurücksetzen, wenn sich der Adapter in einem verbundenen Zustand befindet, und der Benachrichtigungstyp mibAddInstance ist, und die NetLuid in MIB_IPINTERFACE_ROW entspricht einem der Adapter des Miniporttreibers, der während der Adapterinitialisierung gespeichert wurde.

    Miniport-Treiber sollten dann die Einstellung der IP-Adresse für die MB-Schnittstelle und das Festlegen der Standardgatewayadressenprozeduren befolgen, um die entsprechenden Adressen zurückzusetzen.

  4. Während des Entladens des Treibers sollten Miniporttreiber die Registrierung der Benachrichtigungsrückruffunktion mithilfe der Funktion CancelMibChangeNotify2 IP-Hilfsfunktion aufheben.

Festlegen der IP-Adresse für die MB-Schnittstelle

Verwenden Sie zum Festlegen einer IPv4-Adresse das folgende Verfahren. Sie können ähnliche IP-Hilfsfunktionen verwenden, um eine IPv6-Adresse festzulegen.

  1. Verwenden Sie die GetUnicastIpAddressTable-IP-Hilfsfunktion , um alle IP-Adresseinträge im System zu finden.

  2. Für jeden Eintrag, dessen InterfaceLuid-Wert mit dem InterfaceLuid der MB-Schnittstelle übereinstimmt:

    1. Suchen Sie den IP-Adresseintrag, der der in früheren Verbindung verwendeten IP-Adresse entspricht. Beim ersten Mal verfügen Verbindungen nicht über eine vorherige IP-Adresse.
    2. Wenn sich die neue IP-Adresse von der vorherigen IP-Adresse unterscheidet, löschen Sie den IP-Adresseintrag für vorherige Verbindungs-IP-Adressen mithilfe der DeleteUnicastIpAddressEntry IP-Hilfsfunktion.
    3. Wenn die neue IP-Adresse mit der vorherigen IP-Adresse identisch ist, überprüfen Sie, ob der gewünschte Eintrag bereits vorhanden ist.
  3. Wenn der Miniporttreiber den gewünschten IP-Adresseintrag in der vorherigen Schleife nicht gefunden hat, sollte er einen neuen Eintrag hinzufügen.

    1. Verwenden Sie die InitializeUnicastIpAddressEntry-IP-Hilfsfunktion, um eine MIB_UNICASTIPADDRESS_ROW Struktur zu initialisieren und die folgenden Elemente der Struktur festzulegen:

      1. Legen Sie die Elemente "InterfaceLuid " oder "InterfaceIndex " entsprechend fest.
      2. Legen Sie das OnlinePrefixLength-Element fest. Dies ist die Anzahl der Bits, die einen Wert in der Subnetzmaske aufweisen. Wenn die Subnetzmaske beispielsweise 255.255.255.0 ist, sollte OnlinePrefixLength 24 sein.
      3. Legen Sie das Adresselement fest.
      4. Legen Sie das PrefixOrigin-Mitglied auf "IpPrefixOriginManual" fest.
    2. Übergeben Sie die initialisierte MIB_UNICASTADDRESS_ROW Struktur an die CreateUnicastIpAddressEntry-IP-Hilfsfunktion , um den IP-Adresseintrag zu erstellen.

Festlegen der Standardgatewayadresse

Verwenden Sie zum Festlegen einer IPv4-Gatewayadresse das folgende Verfahren. Sie können ähnliche IP-Hilfsfunktionen verwenden, um eine IPv6-Gatewayadresse festzulegen.

  1. Verwenden Sie die GetIpForwardTable2-IP-Hilfsfunktion , um alle Routingeinträge im System abzurufen.

  2. Rufen Sie für jeden Eintrag, dessen InterfaceLuid-Wert mit dem InterfaceLuid-Wert der MB-Schnittstelle übereinstimmt, und "DestinationPrefix" "0.0.0.0/0" auf, rufen Sie die DeleteIpForwardEntry2-IP-Hilfsfunktion auf, um die Route zu löschen, wenn NextHop nicht der neuen Gatewayadresse entspricht. Andernfalls befindet sich der Routingeintrag bereits im System.

  3. Wenn der Miniporttreiber den gewünschten Routingeintrag in der vorherigen Schleife nicht gefunden hat, sollte ein neuer Eintrag mithilfe der InitializeIpForwardEntry-IP-Hilfsfunktion hinzugefügt werden, um eine MIB_IPFORWARD_ROW2 Struktur zu initialisieren. Initialisieren Sie die folgenden Elemente der Struktur:

    InterfaceLuid oder InterfaceIndex .

    Legen Sie "DestinationPrefix " für das Standardgateway auf 0.0.0.0/0 fest. (Präfix = 0.0.0.0 und PrefixLength = 0)

    Legen Sie NextHop auf die IP-Adresse des Standardgateways fest.

    Andere Member werden während der Initialisierung auf Standardwerte festgelegt. Miniport-Treiber sollten Standardwerte für diese Member verwenden.

  4. Übergeben Sie die MIB_IPFORWARD_ROW2 Struktur an die CreateIpForwardEntry2-IP-Hilfsfunktion, um eine neue Standardgatewayadresse festzulegen.

So legen Sie DNS-Adressen fest

  • Legen Sie den Registrierungsschlüssel NameServer wie in MB-DNS-Updates beschrieben fest, um Windows über aktualisierte DNS-Adressen zu benachrichtigen.