Freigeben über


MINIPORT_RESTART Rückruffunktion (ndis.h)

Die MiniportRestart-Funktion initiiert eine Neustartanforderung für einen angehaltenen Miniportadapter.

Hinweis Sie müssen die Funktion mit dem typ MINIPORT_RESTART deklarieren. Weitere Informationen finden Sie im folgenden Abschnitt Beispiele.
 

Syntax

MINIPORT_RESTART MiniportRestart;

NDIS_STATUS MiniportRestart(
  [in] NDIS_HANDLE MiniportAdapterContext,
       PNDIS_MINIPORT_RESTART_PARAMETERS RestartParameters
)
{...}

Parameter

[in] MiniportAdapterContext

Ein Handle für einen Kontextbereich, den der Miniporttreiber in seiner MiniportInitializeEx-Funktion zugeordnet hat. Der Miniporttreiber verwendet diesen Kontextbereich, um Zustandsinformationen für einen Miniportadapter zu verwalten.

RestartParameters

Ein Zeiger auf einen NDIS_MINIPORT_RESTART_PARAMETERS Struktur, die die Neustartparameter für den Miniportadapter definiert.

Rückgabewert

MiniportRestart gibt einen der folgenden status Werte zurück:

Rückgabecode Beschreibung
NDIS_STATUS_SUCCESS

MiniportRestart hat den Netzwerkdatenfluss über den Miniportadapter erfolgreich neu gestartet.

NDIS_STATUS_PENDING
MiniportRestart hat den Neustartvorgang nicht abgeschlossen, und der Vorgang wird asynchron abgeschlossen. Der Miniporttreiber muss die NdisMRestartComplete-Funktion aufrufen, wenn der Vorgang abgeschlossen ist.
NDIS_STATUS_RESOURCES

MiniportRestart ist aufgrund unzureichender Ressourcen fehlgeschlagen.

NDIS_STATUS_FAILURE
Keiner der obigen status-Werte gilt. In dieser Situation sollte der Treiber die NdisWriteErrorLogEntry-Funktion mit Parametern aufrufen, die den Grund für den Fehler angeben.

Hinweise

Ein Treiber gibt den MiniportRestart-Einstiegspunkt an, wenn er die NdisMRegisterMiniportDriver-Funktion .

Der Miniportadapter, der durch den Parameter MiniportAdapterContext angegeben wird, wechselt in den Zustand Neustarten , wenn NDIS MiniportRestart aufruft.

Wenn NDIS MiniportRestart aufruft, ein Miniporttreiber:

  • Muss alle Aufgaben ausführen, die zum Fortsetzen von Sende- und Empfangsvorgängen erforderlich sind.
  • Ändert optional die Neustartattribute, die im RestartAttributes-Member des NDIS_MINIPORT_RESTART_PARAMETERS Struktur. Wenn der Zeiger in RestartAttributesNULL ist, sollte der Miniporttreiber die Liste der Neustartattribute nicht ändern oder hinzufügen. Wenn der Zeiger in RestartAttributes nicht NULL ist, zeigt er auf eine NDIS_RESTART_ATTRIBUTES-Struktur . Wenn ein Miniporttreiber nicht neu gestartet wird, sollte er keine Attribute ändern.
  • Kann status Hinweise mit dem NdisMIndicateStatusEx-Funktion .
  • Sollte status Anforderungen in der MiniportOidRequest-Funktion behandeln.
Wenn ein Miniporttreiber die Liste der Neustartattribute ändert, wird der Miniporttreiber:
  • Kann der Liste der Neustartattribute neue medienspezifische Attribute hinzufügen. In dieser Situation muss der Miniporttreiber eine neue Zuweisung durchführen. NDIS_RESTART_ATTRIBUTES Struktur, z. B. mit dem NdisAllocateMemoryWithTagPriority-Funktion - und bereitstellen Speicherplatz für die neuen Attribute. Nach der Weitergabe der Neustartattribute an überlastende Treiber gibt NDIS den Attributespeicher für die Miniporttreiber frei.
  • Kann die medienspezifischen Attribute in der Liste der Neustartattribute ändern. Wenn der Miniporttreiber mehr Speicherplatz benötigt, kann er eine NDIS_RESTART_ATTRIBUTES-Struktur mit der NdisFreeMemory-Funktion freigeben und eine neue Struktur zuweisen, um die geänderten Informationen zu enthalten. Nach der Weitergabe der Neustartattribute an überlastende Treiber gibt NDIS den Attributespeicher für die Miniporttreiber frei.
  • Kann jedes Feld in der NDIS_RESTART_GENERAL_ATTRIBUTES Struktur. Wenn NDIS einen Nicht-NULL-Zeiger im RestartAttributes-Element des NDIS_MINIPORT_RESTART_PARAMETERS Struktur enthält die Attributliste einen Eintrag, in dem sich das Element Oid in der NDIS_RESTART_ATTRIBUTES-Struktur befindet. OID_GEN_MINIPORT_RESTART_ATTRIBUTES und das Data-Element enthält eine NDIS_RESTART_GENERAL_ATTRIBUTES-Struktur.
  • Sollte sicherstellen, dass NDIS_RESTART_GENERAL_ATTRIBUTES Struktur enthält die richtigen Informationen. Um sicherzustellen, dass die NDIS_RESTART_GENERAL_ATTRIBUTES-Struktur die erforderlichen Informationen enthält, sollten Sie zunächst die Version der Struktur bestimmen, indem Sie den Revisionsmember in der NDIS_OBJECT_HEADER Struktur überprüfen, die im Header-Member der NDIS_RESTART_GENERAL_ATTRIBUTES-Struktur angegeben ist.
NDIS initiiert keine anderen Plug & Play -Vorgänge (PnP) für den Miniportadapter, z. B. Anhalten, Initialisieren, Stromwechsel oder Pausenanforderung, bis der Neustartvorgang abgeschlossen ist.

Nachdem der Miniporttreiber die Sende- und Empfangsvorgänge erfolgreich neu gestartet hat, muss er den Neustartvorgang abschließen. Wenn der Treiber NDIS_STATUS_SUCCESS von MiniportRestart zurückgibt, ist der Neustartvorgang abgeschlossen. Wenn der Treiber NDIS_STATUS_PENDING zurückgibt, kann er den Neustartvorgang fortsetzen. Der Neustartvorgang ist abgeschlossen, nachdem der Treiber die Funktion NdisMRestartComplete aufgerufen hat . Nach Abschluss des Neustartvorgangs befindet sich der Miniportadapter im Status "Ausgeführt" .

Der Miniporttreiber kann sofort nach dem Aufruf von MiniportRestart und bevor der Treiber NdisMRestartComplete aufruft, die empfangenen Pakete für den Miniportadapter fortsetzen. Der Miniporttreiber sollte bereit sein, Sendeanforderungen zu akzeptieren, nachdem der Treiber die Neustartanforderung abgeschlossen hat.

Wenn der Miniporttreiber die Sende- und Empfangsvorgänge nicht neu startet, muss der Treiber einen entsprechenden Fehler status von MiniportRestart zurückgeben. In dieser Situation muss der Treiber alle gestarteten Sende- oder Empfangsvorgänge beenden und dann in den Zustand Angehalten zurückkehren.

NDIS ruft MiniportRestart unter IRQL = PASSIVE_LEVEL auf.

Beispiele

Um eine MiniportRestart-Funktion zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der zu definierenden Funktion identifiziert. Windows stellt eine Reihe von Funktionstypen für Treiber bereit. Das Deklarieren einer Funktion mithilfe der Funktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine MiniportRestart-Funktion mit dem Namen "MyRestart" zu definieren, verwenden Sie den typ MINIPORT_RESTART , wie in diesem Codebeispiel gezeigt:

MINIPORT_RESTART MyRestart;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
NDIS_STATUS
 MyRestart(
    NDIS_HANDLE  MiniportAdapterContext,
    PNDIS_MINIPORT_RESTART_PARAMETERS  RestartParameters
    )
  {...}

Der MINIPORT_RESTART Funktionstyp wird in der Headerdatei Ndis.h definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzu. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den MINIPORT_RESTART Funktionstyp in der Headerdatei angewendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für NDIS-Treiber.

Informationen zu Use_decl_annotations finden Sie unter Verhalten von Funktionen mit Anmerkungen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt in NDIS 6.0 und höher.
Zielplattform Windows
Kopfzeile ndis.h (einschließlich Ndis.h)
IRQL PASSIVE_LEVEL

Weitere Informationen

MiniportInitializeEx

MiniportOidRequest

MiniportPause

NDIS_MINIPORT_RESTART_PARAMETERS

NDIS_OBJECT_HEADER

NDIS_RESTART_ATTRIBUTES

NDIS_RESTART_GENERAL_ATTRIBUTES NdisAllocateMemoryWithTagPriority

NdisFreeMemory

NdisMIndicateStatusEx

NdisMRegisterMiniportDriver

NdisMRestartComplete

NdisWriteErrorLogEntry

OID_GEN_MINIPORT_RESTART_ATTRIBUTES