Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Für die meisten Systeme bestimmt die physische Hierarchie der Geräte auf einem Computer die Reihenfolge, in der Windows und der PnP-Manager Treiber laden. Windows und der PnP-Manager konfigurieren Geräte, beginnend mit dem Systemstammgerät, und konfigurieren dann die untergeordneten Geräte des Stammgeräts (z. B. einen PCI-Adapter), die untergeordneten Geräte dieser Geräte usw. Der PnP-Manager lädt die Treiber für jedes Gerät, sobald das Gerät konfiguriert wird, wenn die Treiber zuvor nicht für ein anderes Gerät geladen wurden.
Einstellungen in der INF-Datei können die Ladereihenfolge des Treibers beeinflussen. In diesem Thema werden die relevanten Werte beschrieben, die Anbieter im service-install-section angeben sollten, auf den die INF-AddService-Direktive eines Treibers verweist. In diesem Thema werden insbesondere die Einträge StartType, BootFlags, LoadOrderGroup und Dependencies erläutert.
Treiber sollten die folgenden Regeln zum Angeben von StartType befolgen:
PnP-Treiber wird beim frühen Start nicht benötigt
Ein PnP-Treiber sollte über einen Starttyp von SERVICE_DEMAND_START (0x3) verfügen, der angibt, dass der PnP-Manager den Treiber laden kann, wenn der PnP-Manager ein Gerät findet, das vom Treiber unterstützt wird.
Treiber für ein Gerät, das zum Starten des Computers erforderlich ist
Wenn ein Gerät zum Starten des Computers erforderlich ist, sollten die Treiber für das Gerät über einen Starttyp von SERVICE_BOOT_START (0x0) verfügen.
Nicht-Bootstarttreiber, der Geräte(n) erkennt, die nicht PnP-enumerierbar sind
Für ein Gerät, das nicht PnP-aufzählbar ist, meldet ein Treiber das Gerät an den PnP-Manager durch Aufrufen von IoReportRootDevice oder IoReportDetectedDevice. Ein solcher Treiber sollte den Starttyp SERVICE_SYSTEM_START (0x01) aufweisen, damit Windows den Treiber während der Systeminitialisierung lädt.
Nur Treiber, die keine PnP-Hardware melden, sollten diesen Starttyp festlegen. Wenn ein Treiber sowohl PnP- als auch Nicht-PnP-Geräte unterstützt, sollte dieser Starttyp festgelegt werden.
Nicht-PnP-Treiber, der vom Dienststeuerungs-Manager gestartet werden muss
Ein solcher Treiber sollte den Starttyp SERVICE_AUTO_START (0x02) haben. PnP-Treiber dürfen diesen Starttyp nicht festlegen.
Ein PnP-Treiber sollte so geschrieben werden, dass er geladen werden kann, wenn Windows ein Gerät konfiguriert, das von diesem Treiber unterstützt wird. Umgekehrt sollte ein Treiber jederzeit entladen werden können, wenn der PnP-Manager feststellt, dass keine Geräte mehr vorhanden sind, die von dem Treiber bedient werden. Die einzigen Treiberladereihenfolgen, von denen PnP-Treiber abhängig sein sollten, sind wie folgt:
Die Treiber für ein untergeordnetes Gerät können davon abhängen, dass die Treiber für das übergeordnete Gerät geladen werden.
Ein Treiber im Gerätestapel kann sich darauf verlassen, dass alle darunter liegenden Treiber geladen sind.
Beispielsweise kann der Funktionstreiber sicher sein, dass alle untergeordneten Filtertreiber geladen werden.
Beachten Sie jedoch, dass sich ein Treiber im Gerätestapel nicht darauf verlassen kann, nach den niedrigeren Treibern eines Geräts sequenziell geladen zu werden, da der Treiber möglicherweise zuvor geladen wurde, wenn ein anderes Gerät konfiguriert wurde.
Filtertreiber in einer Filtergruppe können ihre Ladefolge nicht vorhersehen. Wenn ein Gerät beispielsweise drei obere Filtertreiber registriert hat, werden diese drei Treiber nach dem Funktionstreiber geladen, könnten aber in beliebiger Reihenfolge innerhalb ihrer oberen Filtergruppe geladen werden.
Wenn ein Treiber über eine explizite Abhängigkeit von der Ladereihenfolge eines anderen Treibers verfügt, sollte diese Abhängigkeit über eine Parent-/Child-Beziehung implementiert werden. Ein Treiber für ein untergeordnetes Gerät kann von den Treibern für das übergeordnete Gerät abhängen, dass die Treiber des übergeordneten Geräts geladen werden, bevor die untergeordneten Treiber geladen werden.
Um die Bedeutung des Festlegens des richtigen StartType-Werts zu unterstreichen, beschreibt die folgende Liste, wie Windows und der PnP-Manager die StartType-Einträge in INF-Dateien verwenden:
Beim Systemstart lädt das Betriebssystemladeprogramm Treiber vom Typ SERVICE_BOOT_START, bevor die Steuerung an den Kernel übertragen wird. Diese Treiber befinden sich im Arbeitsspeicher, wenn der Kernel die Kontrolle erhält.
Bootstarttreiber werden geladen, bevor die meisten Geräte konfiguriert sind, sodass ihre Ladereihenfolge nicht von der Gerätehierarchie bestimmt werden kann. Starttreiber können INF LoadOrderGroup-Einträge verwenden, um deren Ladevorgang zu bestellen. Das Betriebssystem ignoriert INF-Dependencies-Einträge für Bootstarttreiber.
Der PnP-Manager ruft die DriverEntry-Routinen der SERVICE_BOOT_START Treiber auf, damit die Treiber die Bootgeräte bedienen können.
Wenn ein Startgerät über untergeordnete Geräte verfügt, werden diese Geräte aufgezählt. Die untergeordneten Geräte werden konfiguriert und gestartet, wenn ihre Treiber auch Starttreiber sind. Wenn die Treiber eines Geräts nicht alle Starttreiber sind, erstellt der PnP-Manager einen Geräteknoten (Devnode) für das Gerät, startet das Gerät aber noch nicht.
Nachdem alle Starttreiber geladen und die Startgeräte gestartet wurden, konfiguriert der PnP-Manager die restlichen PnP-Geräte und lädt ihre Treiber.
Der PnP-Manager durchläuft den Gerätebaum und lädt die Treiber für die Devnodes, die noch nicht gestartet sind (d. h. alle nicht gestarteten Devnodes aus dem vorherigen Schritt). Sobald jedes Gerät gestartet wird, listet der PnP-Manager die untergeordneten Elemente des Geräts auf, falls vorhanden.
Beim Konfigurieren dieser Geräte lädt der PnP-Manager die Treiber für die Geräte, unabhängig von den StartType-Werten der Treiber (außer wenn StartType SERVICE_DISABLED ist), bevor er mit dem Starten der Geräte fortfährt. Viele dieser Treiber sind SERVICE_DEMAND_START Treiber.
Der PnP-Manager ignoriert Registrierungseinträge, die aufgrund von INF-Abhängigkeitseinträgen und LoadOrderGroup-Einträgen für Treiber erstellt wurden, die er in diesem Schritt lädt. Die Reihenfolge des Ladens basiert auf der physischen Gerätehierarchie.
Am Ende dieses Schritts werden alle Geräte konfiguriert, mit Ausnahme von Geräten, die nicht per PnP enumerierbar sind, und den untergeordneten Geräten dieser Geräte. (Die Nachfolger können PnP-enumerable sein oder auch nicht.)
Der PnP-Manager lädt Treiber mit dem StartType SERVICE_SYSTEM_START, die noch nicht geladen wurden.
Diese Treiber erkennen und melden ihre Nicht-PnP-Geräte. Der PnP-Manager verarbeitet Registrierungseinträge, die das Ergebnis von INF LoadOrderGroup-Einträgen für diese Treiber sind. Es ignoriert Registrierungseinträge, die aufgrund von INF-Dependencies-Einträgen für diese Treiber erstellt wurden.
Der Dienststeuerungs-Manager lädt Treiber mit dem StartType SERVICE_AUTO_START, die noch nicht geladen wurden.
Der Dienststeuerungs-Manager verarbeitet die Dienstdatenbankinformationen in Bezug auf die DependOnGroup und DependOnServices der Dienste. Diese Informationen stammen aus Abhängigkeitseinträgen in INF-AddService-Einträgen. Beachten Sie, dass die Abhängigkeitsinformationen nur für Nicht-PnP-Treiber verarbeitet werden, da alle erforderlichen PnP-Treiber in einem früheren Schritt des Systemstarts geladen wurden. Der Dienststeuerungs-Manager ignoriert INF-LoadOrderGroup-Informationen.
Weitere Informationen zum Dienststeuerungs-Manager finden Sie in der Microsoft Windows SDK-Dokumentation.
Verwenden von BootFlags zum Höherstufen des Starttyps eines Treibers beim Start abhängig vom Startszenario
Das Betriebssystem kann den StartType eines Treibers abhängig vom im INF des Treibers angegebenen BootFlags-Wert zu einem Bootstarttreiber heraufstufen. Sie können einen oder mehrere (ORed) der folgenden numerischen Werte in der INF-Datei angeben, ausgedrückt als Hexadezimalwert:
- Wenn ein Treiber höhergestuft werden soll, um beim Netzwerkstart als Bootstarttreiber zu fungieren, geben Sie 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD) an.
- Wenn ein Treiber beim Starten von einer VHD heraufgestuft werden soll, geben Sie 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD) an
- Wenn ein Treiber beim Starten von einem USB-Datenträger höhergestuft werden soll, geben Sie 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD) an.
- Wenn ein Treiber beim Starten von SD-Speicher hochgestuft werden soll, geben Sie 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD) an.
- Wenn ein Treiber beim Starten von einem Datenträger auf einem USB 3.0-Controller heraufgestuft werden soll, geben Sie 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD) an.
- Wenn ein Treiber beim Starten mit aktiviertem gemessenem Start höhergestuft werden soll, geben Sie 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD) an.
- Wenn ein Treiber beim Starten mit aktiviertem Verifier-Boot zum Bootstart hochgestuft werden soll, geben Sie 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD) an.
- Wenn ein Treiber beim WinPE-Start geladen werden soll, geben Sie 0x80 (CM_SERVICE_WINPE_BOOT_LOAD) an.
Weitere Informationen zum Heraufstufen des StartType eines Treibers beim Start finden Sie je nach Startszenario unter INF AddService-Direktive.