DriverEntry-Funktion für Zwischentreiber
Der anfänglich erforderliche Einstiegspunkt eines Zwischentreibers muss explizit DriverEntry genannt werden, damit er vom Ladeprogramm ordnungsgemäß identifiziert werden kann. Alle anderen exportierten Treiberfunktionen, die in diesem Abschnitt als MiniportXxx und ProtocolXxx beschrieben werden, können einen beliebigen vom Hersteller angegebenen Namen aufweisen, da sie als Adressen an NDIS übergeben werden.
In einem Zwischentreiber muss DriverEntry mindestens folgendes ausführen:
Rufen Sie NdisMRegisterMiniportDriver auf, und speichern Sie das Handle, das im Parameter NdisMiniportDriverHandle zurückgegeben wird.
Rufen Sie NdisRegisterProtocolDriver auf, um die ProtocolXxx-Funktionen des Treibers zu registrieren, wenn sich der Treiber anschließend an einen zugrunde liegenden NDIS-Treiber bindet.
Rufen Sie NdisIMAssociateMiniport auf, um NDIS über die Zuordnung zwischen dem oberen Rand des Miniports und dem unteren Protokollrand des Treibers zu informieren.
Ein Zwischentreiber muss einen MiniportDriverUnload-Entladehandler registrieren. Dieser Entladehandler wird aufgerufen, wenn das System den zwischengeschalteten Treiber entladen. Wenn DriverEntry fehlschlägt, wird dieser Entladenshandler nicht aufgerufen. stattdessen wird der Treiber einfach entladen. Weitere Informationen zum Entladen des Handlers finden Sie unter Entladen eines zwischengeschalteten Treibers.
Der Entladehandler sollte NdisDeregisterProtocolDriver aufrufen, um die Registrierung des Protokollteils des Zwischentreibers aufzuheben. Der Entladehandler sollte auch alle erforderlichen Bereinigungsvorgänge ausführen, z. B. die Neuzuweisung von Ressourcen, die vom Protokollteil des Treibers verwendet werden.
Beachten Sie, dass sich ein Entladenshandler von einer MiniportHaltEx-Funktion unterscheidet: Der Entladenshandler verfügt über einen globaleren Bereich, und der Bereich der MiniportHaltEx-Funktion ist auf einen bestimmten Miniportadapter beschränkt. Der Zwischentreiber sollte Zustandsinformationen sauber und Ressourcen neu ordnet, wenn jeder zugrunde liegende Miniporttreiber, der an ihn gebunden ist, angehalten wird. Informationen zum Behandeln des Angehalten-Vorgangs für virtuelle Miniports finden Sie unter Anhalten eines virtuellen Miniports.
ProtocolUninstall ist ein optionaler Entladehandler. Registrieren Sie einen Einstiegspunkt für diese Funktion in der ProtocolCharacteristics-Struktur , die Sie an NdisRegisterProtocolDriver übergeben. NDIS ruft ProtocolUninstall als Antwort auf eine Benutzeranforderung zum Deinstallieren eines Zwischentreibers auf. NDIS ruft ProtocolUnbindAdapterEx einmal für jeden gebundenen Adapter auf, und dann ruft NDIS ProtocolUninstall auf. Dieser Handler wird aufgerufen, bevor das System den Treiber tatsächlich entlädt. Dieses Timing bietet die Möglichkeit, geräteobjekte oder andere Ressourcen freizugeben, die andernfalls verhindern könnten, dass das System den bei NdisMRegisterMiniportDriver registrierten Entladehandler aufruft und den Treiber entladen kann.
DriverEntry kann Spinsperren initialisieren, um alle global freigegebenen Ressourcen zu schützen, die der Zwischentreiber zuweist, z. B. Zustandsvariablen, Strukturen und Speicherbereiche. Der Treiber verwendet diese Ressourcen zum Nachverfolgen von Verbindungen und zum Nachverfolgen von gesendeten oder vom Treiber zugewiesenen Warteschlangen.
Wenn DriverEntry keine Ressourcen zuordnen kann, die der Treiber zum Ausführen von Netzwerk-E/A-Vorgängen benötigt, sollte er alle zuvor zugewiesenen Ressourcen freigeben und einen entsprechenden Fehler status zurückgeben.
In den folgenden Themen wird weiter beschrieben, wie Sie Zwischentreiber registrieren:
Registrierung als NDIS Intermediate Driver