Ladereihenfolge des Dateisystemfilters
Das Windows-Betriebssystem lädt Dateisystemfilter-Treiber basierend auf:
- Starttyp des Treibers, wobei jeder Starttyp Phasen des Systemstarts repräsentiert.
- Ladereihenfolgegruppen für Dateisystemfilter-Treiber, die beim Systemstart geladen werden. Minifiltertreiber benötigen das Konzept der Ladereihenfolgegruppen für die Interoperabilität mit älteren Dateisystemfilter-Treibern. Ein Minifiltertreiber kann jederzeit geladen werden.
Es ist wichtig, die Starttypen und Ladereihenfolgegruppen für Treiber zu verstehen, bevor Sie untersuchen, wann und wie Dateisystemfilter-Treiber während der Systemstartsequenz geladen werden.
Treiberstarttypen
Der Starttyp eines Kernelmodustreibers gibt an, ob der Treiber während des Systemstarts oder danach geladen werden soll. Es gibt fünf mögliche Starttypen:
Starttyp | Beschreibung |
---|---|
SERVICE_BOOT_START (0x00000000) | Zeigt an, dass der Treiber durch das Betriebssystem-Ladeprogramm gestartet wird. Dateisystemfilter-Treiber verwenden häufig diesen Starttyp oder SERVICE_DEMAND_START. Ältere Dateisystemfilter müssen diesen Starttyp verwenden. Weitere Informationen finden Sie unter Ladenreihenfolgegruppen für Dateisystemfilter. |
SERVICE_SYSTEM_START (0x00000001) | Zeigt an, dass der Treiber während der Betriebssysteminitialisierung gestartet wird. Dieser Starttyp wird vom Dateisystem-Erkennungsmodul verwendet. Mit Ausnahme der Dateisysteme, die unter „SERVICE_DISABLED“ aufgeführt sind, verwenden Dateisysteme (einschließlich Netzwerkdateisystem-Komponenten) häufig diesen Starttyp oder SERVICE_DEMAND_START. Dieser Starttyp wird auch von Gerätetreibern für PnP-Geräte verwendet, die während der Systeminitialisierung enumeriert werden, aber nicht zum Laden des Systems erforderlich sind. |
SERVICE_AUTO_START (0x00000002) | Zeigt an, dass der Treiber während des Systemstarts vom Service Control Manager gestartet wird. Selten verwendet. |
SERVICE_DEMAND_START (0x00000003) | Zeigt an, dass der Treiber bedarfsabhängig gestartet wird, entweder vom PnP-Manager (für Gerätetreiber) oder vom Service Control Manager (für Dateisysteme und Dateisystemfilter-Treiber). |
SERVICE_DISABLED (0x00000004) | Zeigt an, dass der Treiber nicht vom Betriebssystem-Ladeprogramm, Service Control Manager oder dem PnP-Manager gestartet wird. Dies wird von Dateisystemen verwendet, die von einem Dateisystem-Erkennungsmodul (außer wenn sie das Startdateisystem sind) oder von einem anderen Dateisystem für EFS geladen werden. Zu diesen Dateisystemen gehören u. a. CDFS, EFS, FastFat, NTFS und UDFS. Dies wird auch zum vorübergehenden Deaktivieren eines Treibers beim Debugging verwendet. |
Alle Treiber, die den Starttyp SERVICE_BOOT_START angeben, werden geladen, bevor Treiber mit dem Starttyp SERVICE_SYSTEM_START oder SERVICE_AUTO_START geladen werden. Innerhalb jeder Starttypkategorie bestimmt die Ladereihenfolgegruppe, wann Dateisystemfilter-Treiber (und ältere Filtertreiber) geladen werden.
Angeben des Starttyps
Beim Schreiben eines Treibers kann der Starttyp für einen Treiber zur Installationszeit auf eine der folgenden Arten angegeben werden:
Durch Angeben des gewünschten Starttyps für den StartType-Eintrag in service-install-section, referenziert durch eine AddService-Anweisung in der INF-Datei des Treibers. Diese Methode wird im Abschnitt ServiceInstall unter Erstellen einer INF-Datei für einen Filtertreiber beschrieben.
Durch Übergeben des gewünschten Starttyps für den dwStartType-Parameter beim Aufrufen von CreateService oder ChangeServiceConfig aus einem Benutzermodus-Installationsprogramm. Diese Methode wird in den Referenzeinträgen für CreateService und ChangeServiceConfig in der Microsoft Windows SDK-Dokumentation beschrieben.
Treiberladereihenfolge-Gruppen
Innerhalb der Starttypen SERVICE_BOOT_START und SERVICE_SYSTEM_START gibt jede Ladereihenfolge der einzelnen Treiber die relative Reihenfolge an, in der Treiber geladen werden.
Treiber, deren Starttyp SERVICE_BOOT_START ist, werden als Starttreiber (oder Bootstarttreiber) bezeichnet. Filter, die Starttreiber sind, gehören in der Regel zu einer der FSFilter-Ladereihenfolgegruppen. Diese Ladereihenfolgegruppen werden in Ladereihenfolgegruppen für Dateisystemfilter-Treiber ausführlich beschrieben.
Treiber, deren Starttyp SERVICE_SYSTEM_START ist, werden ebenfalls in der Reihenfolge der Ladereihenfolgegruppen geladen, zu denen sie gehören. Es wird jedoch kein Systemstarttreiber geladen, bevor alle Starttreiber geladen wurden.
Für Treiber, deren Starttyp SERVICE_AUTO_START, SERVICE_DEMAND_START oder SERVICE_DISABLED ist, werden Ladereihenfolgegruppen ignoriert.
Eine vollständige, sortierte Liste der Ladereihenfolgegruppen finden Sie unter dem ServiceGroupOrder-Unterschlüssel des Registrierungsschlüssels HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control.
Dieselbe Reihenfolge der Ladegruppen wird für SERVICE_BOOT_START- und SERVICE_SYSTEM_START-Treiber verwendet. Allerdings werden alle SERVICE_BOOT_START-Treiber geladen und gestartet, bevor SERVICE_SYSTEM_START-Treiber geladen werden.
Angeben der Ladereihenfolgegruppe
Beim Schreiben eines Treibers kann die Ladereihenfolgegruppe für einen Treiber zur Installationszeit auf eine der folgenden Arten angegeben werden:
Durch Angeben der gewünschten Ladereihenfolgegruppe für den LoadOrderGroup-Eintrag in service-install-section, referenziert von einer AddService-Anweisung in der INF-Datei des Treibers. Diese Methode wird im Abschnitt ServiceInstall unter Erstellen einer INF-Datei für einen Filtertreiber beschrieben.
Durch Übergeben des gewünschten Starttyps für den lpLoadOrderGroup-Parameter beim Aufrufen von CreateService oder ChangeServiceConfig aus einem Benutzermodus-Installationsprogramm. Diese Methode wird in den Referenzeinträgen für CreateService und ChangeServiceConfig in der Microsoft Windows SDK-Dokumentation beschrieben.
Allgemeine Informationen zu Treiberladereihenfolgen und Ladereihenfolgegruppen finden Sie unter Angeben der Treiberladereihenfolge.
Regeln für das Laden eines Filtertreibers
Die folgenden Regeln zu Starttypen und Ladereihenfolgegruppen legen fest, wann ein Filtertreiber geladen wird:
Ein Filtertreiber, der einen bestimmten Starttyp und eine bestimmte Ladereihenfolgegruppe angibt, wird gleichzeitig mit allen anderen Filtertreibern in diesem Starttyp und dieser Ladereihenfolgegruppe geladen.
In jeder Ladereihenfolgegruppe werden Minifilter und ältere Filtertreiber in der Regel in zufälliger Reihenfolge geladen. Dies führt normalerweise dazu, dass Treiber basierend auf der Reihenfolge geladen werden, in der sie installiert wurden.
Wenn ein Minifilter oder ein älterer Filtertreiber keine Ladereihenfolgegruppe angibt, wird er nach allen anderen Treibern desselben Starttyps geladen, die eine Ladereihenfolgegruppe angeben.