Initialisieren eines Filtertreibers

Die Initialisierung des Filtertreibers erfolgt unmittelbar nach dem Laden des Treibers durch das System. Filtertreiber werden als Systemdienste geladen. Das System kann die Filtertreiber jederzeit vor, während oder nach dem Laden der Miniporttreiber laden. NDIS kann ein Filtermodul an einen Miniportadapter anfügen, nachdem ein Miniportadapter des vom Filtertreiber unterstützten Typs verfügbar ist und die Initialisierung des Filtertreibers abgeschlossen ist.

Während ein Treiberstapel gestartet wird, lädt das System die Filtertreiber, wenn sie noch nicht geladen sind. Weitere Informationen zum Starten eines Treiberstapels mit Filtermodulen finden Sie unter Starten eines Treiberstapels.

Nachdem ein Filtertreiber geladen wurde, ruft das System die DriverEntry-Routine des Treibers auf.

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.

DriverEntry gibt STATUS_SUCCESS oder den entsprechenden NDIS_STATUS_SUCCESS zurück, wenn der Treiber erfolgreich als NDIS-Filtertreiber registriert wurde. Wenn driverEntry bei der Initialisierung fehlschlägt, indem ein Fehler weitergegeben status von einer NdisXxx-Funktion oder einer Kernelmodusunterstützungsroutine zurückgegeben wird, bleibt der Treiber nicht geladen. DriverEntry muss synchron ausgeführt werden. Das heißt, es kann keine STATUS_PENDING oder äquivalente NDIS_STATUS_PENDING zurückgeben.

Der Filtertreiber übergibt das Treiberobjekt an die NdisFRegisterFilterDriver-Funktion , wenn er sich bei NDIS als Filtertreiber registriert. Der Treiber kann den Registrierungspfad verwenden, um Konfigurationsinformationen abzurufen. Weitere Informationen zum Zugreifen auf Filtertreiberkonfigurationsinformationen finden Sie unter Zugreifen auf Konfigurationsinformationen für einen Filtertreiber.

Ein Filtertreiber ruft NdisFRegisterFilterDriver über seine DriverEntry-Routine auf. Filtertreiber exportieren einen Satz von FilterXxx-Funktionen , indem sie eine NDIS_FILTER_DRIVER_CHARACTERISTICS-Struktur an NdisFRegisterFilterDriver über den Parameter FilterCharacteristics übergeben.

Die NDIS_FILTER_DRIVER_CHARACTERISTICS-Struktur gibt Einstiegspunkte für obligatorische und optionale FilterXxx-Funktionen an. Einige optionale Funktionen können umgangen werden. Weitere Informationen zur Umgehung von Funktionen finden Sie unter Datenumgehungsmodus.

Treiber, die NdisFRegisterFilterDriver aufrufen, müssen auf einen sofortigen Aufruf einer ihrer FilterXxx-Funktionen vorbereitet sein.

Die NDIS_FILTER_DRIVER_CHARACTERISTICS-Struktur gibt die Einstiegspunkte für diese obligatorischen FilterXxx-Funktionen an:

FilterAttach

FilterDetach

FilterRestart

FilterPause

Die NDIS_FILTER_DRIVER_CHARACTERISTICS-Struktur gibt die Einstiegspunkte für diese optionalen und zur Laufzeit nicht änderbaren FilterXxx-Funktionen an:

FilterSetOptions

FilterSetModuleOptions

FilterOidRequest

FilterOidRequestComplete

FilterStatus

FilterNetPnPEvent

FilterDevicePnPEventNotify

FilterCancelSendNetBufferLists

Die NDIS_FILTER_DRIVER_CHARACTERISTICS-Struktur gibt die Standardeinstiegspunkte für diese optionalen und zur Laufzeit änderbaren FilterXxx-Funktionen an:

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

FilterReturnNetBufferLists

FilterReceiveNetBufferLists

Die vorherigen vier Funktionen sind auch in der NDIS_FILTER_PARTIAL_CHARACTERISTICS-Struktur definiert. Diese Struktur gibt die Funktionen an, die zur Laufzeit geändert werden können, indem die NdisSetOptionalHandlers-Funktion aus der FilterSetModuleOptions-Funktion aufgerufen wird. Wenn ein Filtertreiber diese partiellen Merkmale zur Laufzeit ändert, muss er den Einstiegspunkt für FilterSetModuleOptions bereitstellen. Die Teileigenschaften können für jedes Filtermodul unterschiedlich sein. Weitere Informationen finden Sie unter Starten eines Filtermoduls.

NDIS ruft die FilterSetOptions-Funktion im Kontext des Aufrufs von NdisFRegisterFilterDriver auf. FilterSetOptions registriert optionale Dienste bei NDIS. Weitere Informationen finden Sie unter Konfigurieren optionaler Filtertreiberdienste.

Wenn der Aufruf von NdisFRegisterFilterDriver erfolgreich ist, füllt NDIS die Variable bei NdisFilterDriverHandle mit einem Filtertreiberhandle. Der Filtertreiber speichert dieses Handle und übergibt dieses Handle später an NDIS-Funktionen, z. B. NdisFDeregisterFilterDriver, für die ein Filtertreiberhandle als Eingabeparameter erforderlich ist. Wenn der Treiber entladen wird, muss er die NdisFDeregisterFilterDriver-Funktion aufrufen, um die von NdisFRegisterFilterDriver zugewiesenen Treiberressourcen freizugeben.

Nachdem FilterSetOptions zurückgegeben wurde, befinden sich die Filtermodule im Status Getrennt . NDIS kann die FilterAttach-Funktion des Filtertreibers jederzeit aufrufen, nachdem der Aufruf von FilterSetOptions zurückgegeben wurde. Der Treiber führt eine filtermodulspezifische Initialisierung in der FilterAttach-Funktion durch. Weitere Informationen zum Anfügen eines Filtermoduls an einen Treiberstapel finden Sie unter Anfügen eines Filtermoduls.

Ein Filtertreiber führt auch alle anderen treiberspezifischen Initialisierungen durch, die er in DriverEntry benötigt. Der Filtertreiber muss die treiberspezifischen Ressourcen freigeben, die er in seiner FilterDriverUnload-Routine ordnet. Weitere Informationen finden Sie unter Entladen eines Filtertreibers.