MINIPORT_HALT Rückruffunktion (ndis.h)
NDIS ruft die MiniportHaltEx-Funktion eines Miniporttreibers auf, um Ressourcen freizugeben, wenn ein Miniportadapter entfernt wird, und um die Hardware zu beenden. Diese Funktion versetzt den Miniport in den Zustand Angehalten, in dem kein anderer Rückruf erfolgen kann (einschließlich MiniportShutdownEx). Weitere Informationen zu Miniporttreiberzuständen finden Sie unter Status und Vorgänge des Miniportadapters.
Syntax
MINIPORT_HALT MiniportHalt;
void MiniportHalt(
[in] NDIS_HANDLE MiniportAdapterContext,
[in] NDIS_HALT_ACTION HaltAction
)
{...}
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.
[in] HaltAction
Der Grund für das Anhalten des Miniportadapters. Es kann sich um einen der folgenden Werte handeln:
NdisHaltDeviceDisabled
NDIS hält den Miniportadapter als Reaktion auf eine Plug & Play (PnP) Remove-Nachricht an.
NdisHaltDeviceInstanceDeInitialized
NDIS hält den Miniportadapter als Reaktion auf einen Zwischentreiber an, der die NdisIMDeInitializeDeviceInstance-Funktion .
NdisHaltDevicePoweredDown
NDIS hält den Miniportadapter an, da das System in einen Ruhezustand wechselt.
NdisHaltDeviceSurpriseRemoved
Der Miniportadapter wurde überraschend entfernt, und die Hardware ist nicht vorhanden.
NdisHaltDeviceFailed
Der Miniportadapter wird aufgrund eines Hardwarefehlers entfernt. Entweder der Miniporttreiber, der die NdisMRemoveMiniport-Funktion genannt hat, oder ein Bustreiber hat die NIC beim Fortsetzen nicht eingeschaltet.
NdisHaltDeviceInitializationFailed
NDIS konnte den Miniportadapter aus einem unbekannten Grund nicht initialisieren, nachdem die MiniportInitializeEx-Funktion erfolgreich abgeschlossen wurde.
NdisHaltDeviceStopped
NDIS hält den Miniportadapter als Reaktion auf eine PnP-Meldung zum Beenden des Geräts an.
Rückgabewert
Keine
Bemerkungen
Ein Treiber gibt den MiniportHaltEx-Einstiegspunkt an, wenn er die NdisMRegisterMiniportDriver-Funktion .
NDIS kann MiniportHaltEx jederzeit aufrufen, nachdem die MiniportInitializeEx-Funktion eines Treibers erfolgreich zurückgegeben wurde. Wenn der Treiber eine physische NIC steuert, sollte MiniportHaltEx die NIC beenden. Wenn ein NDIS-Zwischentreiber den NdisIMDeInitializeDeviceInstance-Funktion , NDIS ruft die MiniportHaltEx-Funktion für das virtuelle Gerät des Treibers auf.
MiniportHaltEx muss alle Ressourcen freigeben, die in MiniportInitializeEx für ein Gerät zugeordnet wurden. MiniportHaltEx gibt auch alle anderen Ressourcen frei, die der Treiber in nachfolgenden Vorgängen für dieses Gerät zugewiesen hat. Der Treiber muss die Kehrfunktionen der NdisXxx-Funktionen aufrufen, denen er ursprünglich die Ressourcen zugeordnet hat. In der Regel sollte eine MiniportHaltEx-Funktion die NdisXxx-Funktionen in umgekehrter Reihenfolge zu den Aufrufen des Treibers von MiniportInitializeEx aufrufen.
Wenn eine NIC Interrupts generiert, kann die MiniportHaltEx-Funktion eines Miniport-Treibers von der MiniportInterrupt-Funktion des Treibers vorzeitig entfernt werden, bis der MiniportHaltEx-Aufruf des Die NdisMDeregisterInterruptEx-Funktion gibt zurück. Eine solche MiniportHaltEx-Funktion des Treibers sollte Unterbrechungen deaktivieren und aufrufen NdisMDeregisterInterruptEx so bald wie möglich. Beachten Sie, dass ein Treiber Unterbrechungen erhalten kann, bis NdisMDeregisterInterruptEx gibt zurück. NdisMDeregisterInterruptEx wird erst zurückgegeben, wenn der Treiber alle geplanten DPCs abgeschlossen hat (weitere Informationen finden Sie in der MiniportInterruptDPC-Funktion ).
Wenn der Treiber über eine NetTimerCallback-Funktion verfügt, die einem Timerobjekt zugeordnet ist, das sich in der Systemtimerwarteschlange befinden könnte, sollte MiniportHaltEx die NdisCancelTimerObject-Funktion aufrufen. Wenn NdisCancelTimerObject fehlschlägt , hat der Timer möglicherweise bereits ausgelöst. In diesem Fall sollte der Treiber warten, bis die Timerfunktion abgeschlossen ist, bevor der Treiber von MiniportHaltEx zurückkehrt.
NDIS ruft MiniportHaltEx nicht auf, wenn ausstehende OID-Anforderungen oder Sendeanforderungen vorliegen. NDIS sendet keine weiteren Anforderungen für das betroffene Gerät, nachdem NDIS MiniportHaltEx aufgerufen hat.
Wenn der Treiber auf den Abschluss eines Vorgangs warten muss, kann MiniportHaltEx die NdisWaitEvent-Funktion oder die NdisMSleep-Funktion verwenden.
NDIS ruft MiniportHaltEx am IRQL = PASSIVE_LEVEL auf.
Beispiele
Um eine MiniportHaltEx-Funktion zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten 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 MiniportHaltEx-Funktion mit dem Namen "MyHaltEx" zu definieren, verwenden Sie den typ MINIPORT_HALT , wie in diesem Codebeispiel gezeigt:
MINIPORT_HALT MyHaltEx;
Implementieren Sie dann Ihre Funktion wie folgt:
_Use_decl_annotations_
VOID
MyHaltEx(
NDIS_HANDLE MiniportAdapterContext,
NDIS_HALT_ACTION HaltAction
)
{...}
Der MINIPORT_HALT Funktionstyp ist in der Ndis.h-Headerdatei 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 MINIPORT_HALT 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 (include Ndis.h) |
IRQL | PASSIVE_LEVEL |
DDI-Complianceregeln | WlanAssociation, WlanConnectionRoaming, WlanDisassociation, WlanTimedAssociation, WlanTimedConnectionRoaming, WlanTimedConnectRequest, WlanTimedLinkQuality, WlanTimedScan |
Weitere Informationen
Adapterzustände eines Miniporttreibers
Anhalten eines Miniportadapters
Status und Vorgänge des Miniportadapters
Funktionen zum Zurücksetzen und Anhalten des Miniporttreibers
MiniportReturnNetBufferLists NdisIMDeInitializeDeviceInstance