Freigeben über


Miniport-Treiber-Handler zum Halten

Ein NDIS Miniport-Treiber muss eine MiniportHaltEx-Funktion an NdisMRegisterMiniportDriver übergeben.

MiniportHaltEx sollte alles rückgängig machen, was MiniportInitializeEx getan hat. Der NDIS-Miniport-Treiber könnte zum Beispiel:

Das folgende Diagramm veranschaulicht das Entladen eines Miniporttreibers.

Diagramm, das den Vorgang zum Entladen eines Miniporttreibers veranschaulicht.

MiniportHaltEx sollte die Operationen abschließen, die zum Entladen des Treibers erforderlich sind, bevor er zurückkehrt. Wenn der Miniport-Treiber noch ausstehende Empfangsmeldungen hat (d.h. empfangene Netzwerkdaten, die er an NDIS gemeldet hat, die aber noch nicht zurückgegeben wurden), darf MiniportHaltEx erst zurückkehren, wenn diese Daten an die Funktion MiniportReturnNetBufferLists des Miniport-Treibers zurückgegeben wurden.

Die obige Abbildung zeigt eine Reihe von Aufrufen, die von einer MiniportHaltEx--Funktion ausgeführt werden können. Diese Anrufe sind nur eine Teilmenge der Anrufe, die getätigt werden können. Das tatsächliche Set von Aufrufen hängt von früheren Aktionen des Miniport-Treibers ab. Der Miniporttreiber kann diese 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 einem solchen Fall sollte MiniportInitializeEx den Treiber entladen, indem es seine vorherigen Aktionen rückgängig macht. Andernfalls wird MiniportHaltEx die Aktionen von MiniportInitializeExrückgängig machen.

In der folgenden Liste werden die Aufrufe beschrieben, die zum Umkehren bestimmter Aktionen erforderlich sind, die der Miniporttreiber ausführen kann:

  • Wenn der Miniporttreiber einen Interrupt registriert hat, sollte er NdisMDeregisterInterruptExaufrufen.

  • Wenn der Miniporttreiber einen Timer oder mehrere Timer eingerichtet hat, sollte er NdisCancelTimerObject- für jeden von ihm erstellten Timer aufrufen. Wenn ein Aufruf von NdisCancelTimerObject fehlschlägt, wurde der Timer möglicherweise bereits ausgelöst. In diesem Fall sollte der Miniport-Treiber warten, bis der Handler für den Timer abgeschlossen ist, bevor er von MiniportHaltEx zurückkehrt.

  • Wenn der Miniporttreiber Speicher mit NdisAllocateMemoryWithTagPriority-zugewiesen hat, sollte er NdisFreeMemory- aufrufen, um diesen Speicher freizugeben.

  • Wenn der Miniporttreiber Speicher mit NdisMAllocateSharedMemoryoder NdisMAllocateSharedMemoryAsyncExzugewiesen hat, sollte er NdisMFreeSharedMemory aufrufen, um diesen Speicher freizugeben.

  • Wenn der Miniporttreiber Speicher für einen Pool von Paketdeskriptoren mit NdisAllocateNetBufferPoolzugewiesen 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 z. B. einen E/A-Portbereich einer NIC zugeordnet hat, sollte er durch Aufrufen von NdisMDeregisterIoPortRangedie Ports freigeben.

Adapter-Status eines Miniport-Treibers

Freigeben eines NDIS-Port-

Stoppen eines Miniportadapters

Miniportadapterzustände und -vorgänge

Miniport-Treiber Reset- und Halt-Funktionen