Initialisieren eines Miniporttreibers

Wenn ein Netzwerkgerät verfügbar wird, lädt das System den NDIS-Miniporttreiber, um das Gerät zu verwalten (wenn der Treiber noch nicht geladen ist). Jeder Miniporttreiber muss eine DriverEntry-Funktion bereitstellen. Das System ruft DriverEntry auf, nachdem es den Treiber geladen hat. DriverEntry registriert die Merkmale des Miniporttreibers bei NDIS (einschließlich der unterstützten NDIS-Version und der Treibereinstiegspunkte).

Das System übergibt zwei Argumente an DriverEntry:

  • Ein Zeiger auf das Treiberobjekt, das vom E/A-System erstellt wurde.

  • Ein Zeiger auf den Registrierungspfad, der angibt, wo treiberspezifische Parameter gespeichert werden.

In DriverEntry übergeben Miniporttreiber beide Zeiger in einem Aufruf der NdisMRegisterMiniportDriver-Funktion . Miniport-Treiber exportieren eine Reihe von MiniportXxx-Standardfunktionen , indem sie ihre Einstiegspunkte in einer NDIS_MINIPORT_DRIVER_CHARACTERISTICS-Struktur speichern und diese Struktur an NdisMRegisterMiniportDriver übergeben.

DriverEntry für Miniporttreiber gibt den Wert zurück, der vom Aufruf von NdisMRegisterMiniportDriver zurückgegeben wird.

Ein Miniporttreiber führt auch alle anderen treiberspezifischen Initialisierungen durch, die er in DriverEntry benötigt. Der Treiber führt eine adapterspezifische Initialisierung in der MiniportInitializeEx-Funktion durch. Weitere Informationen zur Adapterinitialisierung finden Sie unter Initialisieren eines Adapters.

DriverEntry kann die NDIS_MINIPORT_DRIVER_CHARACTERISTICS Struktur auf dem Stapel zuordnen, da die NDIS-Bibliothek die relevanten Informationen in ihren eigenen Speicher kopiert. DriverEntry sollte den Arbeitsspeicher für diese Struktur mit NdisZeroMemory löschen, bevor alle vom Treiber bereitgestellten Werte in den Membern festgelegt werden. Die Member MajorNdisVersion und MinorNdisVersion müssen die Haupt- und Nebenversionen von NDIS enthalten, die vom Treiber unterstützt werden. In jedemXxx-Handler-Member der Merkmalsstruktur muss DriverEntry den Einstiegspunkt einer vom Treiber bereitgestellten MiniportXxx-Funktion festlegen, oder der Member muss NULL sein.

Um einen Miniporttreiber zum Konfigurieren optionaler Dienste zu aktivieren, ruft NDIS die Funktion MiniportSetOptions im Kontext des Aufrufs des Miniporttreibers an NdisMRegisterMiniportDriver auf. Weitere Informationen zu optionalen Diensten finden Sie unter Konfigurieren optionaler Miniport-Treiberdienste.

Treiber, die NdisMRegisterMiniportDriver aufrufen, müssen darauf vorbereitet sein, dass NDIS ihre MiniportInitializeEx-Funktionen jederzeit nach der Rückgabe von DriverEntry aufruft. Ein solcher Treiber muss über ausreichende Installations- und Konfigurationsinformationen verfügen, die in der Registrierung gespeichert sind oder über Aufrufe einer NdisXxx-bustypspezifischen Konfigurationsfunktion verfügbar sind, um alle NIC-spezifischen Ressourcen einzurichten, die der Treiber für die Ausführung von Netzwerk-E/A-Vorgängen benötigt.

Der Miniporttreiber muss schließlich NdisMDeregisterMiniportDriver aufrufen, um zugeordnete Ressourcen freizugeben, indem er NdisMRegisterMiniportDriver aufruft. Wenn die Treiberinitialisierung fehlschlägt, nachdem der Aufruf von NdisMRegisterMiniportDriver erfolgreich war, kann der Treiber NdisMDeregisterMiniportDriver in DriverEntry aufrufen. Andernfalls muss der Miniporttreiber die treiberspezifischen Ressourcen freigeben, die er in seiner MiniportDriverUnload-Funktion ordnet. Anders ausgedrückt: Wenn NdisMRegisterMiniportDriver keine NDIS_STATUS_SUCCESS zurückgibt, muss DriverEntry alle ressourcen freigeben, die ihm zugewiesen wurden, bevor die Steuerung zurückgegeben wird. Der Treiber wird in diesem Fall nicht geladen. Weitere Informationen finden Sie unter Entladen eines Miniporttreibers.