Miniport Driver Halt Handler
Ein NDIS-Miniporttreiber muss eine MiniportHaltEx-Funktion für NdisMRegisterMiniportDriver bereitstellen.
MiniportHaltEx sollte alles rückgängig machen, was MiniportInitializeEx ausgeführt hat. Der NDIS-Miniporttreiber kann z. B.:
Kostenlose Ports. (Weitere Informationen finden Sie unter Freigeben eines NDIS-Ports.)
Geben Sie alle Hardwareressourcen frei, die Von MiniportInitializeEx beansprucht wurden.
Kostenlose Interruptressourcen durch Aufrufen von NdisMDeregisterInterruptEx.
Geben Sie den von MiniportInitializeEx zugewiesenen Arbeitsspeicher frei.
Beenden Sie die NIC, es sei denn, die MiniportShutdownEx-Funktion hat die NIC bereits in ihrem Ursprünglichen Zustand wiederhergestellt.
Das folgende Diagramm veranschaulicht das Entladen eines Miniporttreibers.
MiniportHaltEx sollte die Vorgänge abschließen, die zum Entladen des Treibers erforderlich sind, bevor er zurückkehrt. Wenn der Miniporttreiber über ausstehende Empfangsanzeigen verfügt (d. h. empfangene Netzwerkdaten, die er bis zu NDIS angegeben hat, die jedoch noch nicht von NDIS zurückgegeben wurden), darf MiniportHaltEx erst dann zurückgeben, wenn diese Daten an die MiniportReturnNetBufferLists-Funktion des Miniporttreibers zurückgegeben werden.
Die vorherige Abbildung zeigt eine Reihe von Aufrufen, die von einer MiniportHaltEx-Funktion ausgeführt werden können. Diese Aufrufe sind nur eine Teilmenge der Aufrufe, die durchgeführt werden können. Die tatsächlichen Aufrufe hängen von vorherigen Aktionen des Miniporttreibers ab. Der Miniporttreiber kann die gleichen Aufrufe in MiniportInitializeEx ausführen, wenn er den Netzwerkadapter aufgrund von Hardwareproblemen nicht erfolgreich initialisieren kann oder weil er keine ressource abrufen kann, die er benötigt. In diesem Fall sollte MiniportInitializeEx den Treiber entladen, indem die vorherigen Aktionen rückgängig werden. Andernfalls wird miniportHaltEx die Aktionen von MiniportInitializeEx rückgängig machen.
In der folgenden Liste werden die Aufrufe beschrieben, die erforderlich sind, um bestimmte Aktionen rückgängig zu machen, die der Miniporttreiber möglicherweise ausführt:
Wenn der Miniporttreiber einen Interrupt registriert hat, sollte er NdisMDeregisterInterruptEx aufrufen.
Wenn der Miniporttreiber einen Timer oder Timer eingerichtet hat, sollte er für jeden erstellten Timer NdisCancelTimerObject aufrufen. Wenn ein Aufruf von NdisCancelTimerObject fehlschlägt , hat der Timer möglicherweise bereits ausgelöst. In diesem Fall sollte der Miniporttreiber warten, bis der Timerhandler abgeschlossen ist, bevor er von MiniportHaltEx zurückkehrt.
Wenn der Miniporttreiber Arbeitsspeicher mit NdisAllocateMemoryWithTagPriority zugewiesen hat, sollte er NdisFreeMemory aufrufen, um diesen Arbeitsspeicher freizugeben.
Wenn der Miniporttreiber Arbeitsspeicher mit NdisMAllocateSharedMemory oder NdisMAllocateSharedMemoryAsyncEx zugewiesen hat, sollte er NdisMFreeSharedMemory aufrufen, um diesen Arbeitsspeicher freizugeben.
Wenn der Miniporttreiber Speicher für einen Pool von Paketdeskriptoren mit NdisAllocateNetBufferPool zugeordnet und initialisiert hat, sollte er NdisFreeNetBufferPool aufrufen, um diesen Speicher freizugeben.
Wenn der Miniporttreiber Hardwareressourcen zugewiesen oder reserviert hat, sollten diese zurückgegeben werden. Wenn der Miniporttreiber beispielsweise einen E/A-Portbereich auf einer NIC zugeordnet hat, sollte er die Ports durch Aufrufen von NdisMDeregisterIoPortRange freigeben.
Zugehörige Themen
Adapterzustände eines Miniporttreibers
Anhalten eines Miniportadapters
Status und Vorgänge des Miniportadapters
Funktionen zum Zurücksetzen und Anhalten des Miniporttreibers