Freigeben über


MINIPORT_SHUTDOWN Rückruffunktion (ndis.h)

NDIS ruft die MiniportShutdownEx-Funktion eines Miniporttreibers auf, wenn das System heruntergefahren wird. Diese Funktion versetzt den Miniport in den Zustand Herunterfahren, in dem kein anderer Rückruf erfolgen kann (einschließlich MiniportHaltEx). Weitere Informationen zu Miniporttreiberzuständen finden Sie unter Status und Vorgänge des Miniportadapters.

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

Syntax

MINIPORT_SHUTDOWN MiniportShutdown;

void MiniportShutdown(
  [in] NDIS_HANDLE MiniportAdapterContext,
  [in] NDIS_SHUTDOWN_ACTION ShutdownAction
)
{...}

Parameter

[in] MiniportAdapterContext

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

[in] ShutdownAction

Der Grund, warum NDIS die Funktion zum Herunterfahren aufgerufen hat. Folgende Werte sind gültig:

NdisShutdownPowerOff

Gibt an, dass NDIS MiniportShutdownEx aufgerufen hat, weil das System heruntergefahren wird.

NdisShutdownBugCheck

Gibt an, dass NDIS aufgrund eines Systemfehlers MiniportShutdownEx aufgerufen hat.

Rückgabewert

Keine

Bemerkungen

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

MiniportShutdownEx stellt den Miniportadapter in einen bekannten Anfangszustand zurück (der Zustand vor NDIS, der als MiniportInitializeEx-Funktion des Miniporttreibers für den Miniportadapter bezeichnet wurde). Dadurch wird sichergestellt, dass sich der Miniportadapter in einem bekannten Zustand befindet und wieder initialisiert werden kann, wenn der Computer neu gestartet wird, nachdem das System aus irgendeinem Grund heruntergefahren wird, einschließlich eines nicht behebbaren Systemfehlers.

MiniportShutdownEx kann E/A-Ports, im Speicher zugeordneten Geräte-E/A-Speicherplatz oder busspezifischen Konfigurationsraum lesen oder schreiben, indem die Funktion NdisMGetBusData oder NdisMSetBusData aufgerufen wird, um eine DMA-Engine zu deaktivieren, Unterbrechungen zu deaktivieren oder die Hardware auf einen bekannten Zustand zurückzusetzen, damit die Hardware sicher neu gestartet werden kann.

Wenn NDIS MiniportShutdownEx aufgrund eines nicht behebbaren Fehlers aufruft, wird der ShutdownAction-Parameter auf NdisShutdownBugCheck festgelegt, und MiniportShutdownEx wird mit einem hohen IRQL-Wert ausgeführt. In diesem Fall darf der Miniporttreiber keine NdisXxx-Funktionen mit Ausnahme der Funktionen aufrufen, die in jedem IRQL aufgerufen werden können.

Wenn NDIS MiniportShutdownEx aufgrund eines vom Benutzer initiierten Herunterfahrens aufruft, wird MiniportShutdownEx unter IRQL = PASSIVE_LEVEL ausgeführt, und der Miniporttreiber kann andere NdisXxx-Funktionen aufrufen.

Wenn NDIS MiniportShutdownEx aufgrund eines nicht behebbaren Fehlers aufruft, wird der ShutdownAction-Parameter auf NdisShutdownBugCheck festgelegt, und MiniportShutdownEx wird mit einem hohen IRQL-Wert ausgeführt. In diesem Fall darf der Miniporttreiber keine NdisXxx-Funktionen mit Ausnahme der Funktionen aufrufen, die in jedem IRQL aufgerufen werden können. Ab NDIS 6.30-Miniports ruft NDIS MiniportShutdownEx während einer BugCheck-Überprüfung nicht auf, es sei denn, der Miniport stellt das flag NDIS_MINIPORT_ATTRIBUTES_REGISTER_BUGCHECK_CALLBACK in seinen Adapterregistrierungsattributen bereit.

Wenn der Wert von ShutdownActionNdisShutdownPowerOff ist, kann der Miniporttreiber seine Ressourcen optional freigeben. Dies ist jedoch weder erforderlich noch empfohlen, da das Herunterfahren des Systems es unnötig macht.

Wenn der Wert von ShutdownActionNdisShutdownBugCheck ist, darf der Miniporttreiber seine Ressourcen nicht freigeben.

Wichtig Wenn MiniportHaltEx einen Systemfehler verursacht, wird dem Miniporttreiber ein geschachtelter Aufruf von MiniportShutdownEx mit ShutdownActionNdisShutdownBugCheck angezeigt. In diesem Fall sollte MiniportShutdownEx sofort ohne Arbeit zurückkehren.

 

Beispiele

Um eine MiniportShutdownEx-Funktion zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der zu definierenden Funktion identifiziert. Windows bietet eine Reihe von Funktionstypen für Treiber. 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 Voraussetzung für das Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine MiniportShutdownEx-Funktion mit dem Namen "MyShutdownEx" zu definieren, verwenden Sie den typ MINIPORT_SHUTDOWN , wie in diesem Codebeispiel gezeigt:

MINIPORT_SHUTDOWN MyShutdownEx;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
VOID
 MyShutdownEx(
    NDIS_HANDLE  MiniportAdapterContext,
    NDIS_SHUTDOWN_ACTION  ShutdownAction
    )
  {...}

Der MINIPORT_SHUTDOWN Funktionstyp ist in der Headerdatei Ndis.h definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, müssen Sie der Funktionsdefinition die anmerkung Use_decl_annotations hinzufügen. Die Use_decl_annotations-Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den funktionstyp MINIPORT_SHUTDOWN 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 (include Ndis.h)
IRQL Siehe Abschnitt "Hinweise"

Weitere Informationen

Adapterzustände eines Miniporttreibers

Herunterfahren des Miniportadapters

Status und Vorgänge des Miniportadapters

MiniportInitializeEx

NdisMGetBusData

NdisMRegisterMiniportDriver

NdisMSetBusData