Beispiel für WDM-Gerätestapel
In diesem Abschnitt werden die Geräteobjekte beschrieben, die von einer möglichen Gruppe von Treibern für USB-Hardware erstellt wurden, um WDM-Geräteobjekte und deren Mehrschichtigkeit zu veranschaulichen.
Die folgende Abbildung zeigt die Geräteobjekte, die von den Beispieltreibern erstellt werden, die unter WDM-Treiberebenen: Ein Beispiel beschrieben werden.
Ab dem unteren Rand dieser Abbildung umfassen die Geräteobjekte in den Beispielgerätestapeln Folgendes:
Ein PDO und ein FDO für den PCI-Bus.
Der Stammbustreiber listet den internen Systembus (den Stammbus) auf und erstellt für jedes gefundene Gerät ein PDO. Einer dieser PDOs ist für den PCI-Bus. (Die PDO und FDO für den Stammbus sind in der Abbildung nicht dargestellt.)
Der PnP-Manager identifiziert den PCI-Treiber als Funktionstreiber für den PCI-Bus, lädt den Treiber (sofern er nicht bereits geladen ist) und übergibt den PDO an den PCI-Treiber. In seiner AddDevice-Routine erstellt der PCI-Treiber eine FDO für den PCI-Bus (IoCreateDevice) und fügt den FDO an den Gerätestapel (IoAttachDeviceToDeviceStack) für den PCI-Bus an. Der PCI-Treiber erstellt und fügt diese FDO im Rahmen seiner Aufgaben als Funktionstreiber für den PCI-Bus an.
In diesem Beispiel gibt es keine Filtertreiber für den PCI-Bus.
Ein PDO und ein FDO für den USB-Hostcontroller.
Der PnP-Manager weist den PCI-Treiber an, sein Gerät zu starten (IRP_MN_START_DEVICE) und fragt dann den PCI-Treiber nach seinen untergeordneten Elementen ab (IRP_MN_QUERY_DEVICE_RELATIONS mit dem Beziehungstyp BusRelations). Daraufhin listet der PCI-Treiber die Geräte auf seinem Bus auf. In diesem Beispiel findet der PCI-Treiber einen USB-Hostcontroller und erstellt ein PDO für dieses Gerät. Der breite Pfeil in der Abbildung gibt an, dass der USB-Hostcontroller ein "untergeordnetes" Element des PCI-Busses ist. Der PCI-Treiber erstellt PDOs für seine untergeordneten Geräte im Rahmen seiner Verantwortung als Bustreiber für den PCI-Bus.
Der PnP-Manager identifiziert das Miniklassen-/Klassentreiberpaar des USB-Hostcontrollers als Funktionstreiber für den USB-Hostcontroller und lädt das Treiberpaar. Der PnP-Manager ruft das Treiberpaar zum geeigneten Zeitpunkt auf, um eine FDO für den USB-Hostcontroller zu erstellen und anzufügen.
In diesem Beispiel gibt es keine Filtertreiber für den USB-Hostcontroller.
Ein PDO und ein FDO für den USB-Hub.
Der USB-Hostcontroller zählt seinen Bus auf, lokalisiert den USB-Hub im einzigen Port und erstellt ein PDO für den Hub. Der USB-Hubtreiber erstellt und fügt eine FDO für den Hub an.
In diesem Beispiel gibt es keine Filtertreiber für den USB-Hub.
Ein PDO, ein FDO und zwei Filter-DOs für das Joystickgerät.
Der USB-Hubtreiber zählt seinen Bus auf, sucht ein HID-Gerät (der Joystick) und erstellt ein PDO für den Joystick.
In diesem Beispiel wurde in der Registrierung für Joystickgeräte ein Filtertreiber auf niedrigerer Ebene eingerichtet, sodass der PnP-Manager den Filtertreiber lädt. Der Filtertreiber ermittelt, dass er für das Gerät relevant ist, und erstellt und fügt eine Filter-DO an den Gerätestapel an.
Der PnP-Manager ermittelt, dass der Funktionstreiber für das Joystickgerät das HID-Klassen-/Miniklassen-Treiberpaar ist und lädt diese Treiber. Das Treiberpaar besteht aus einem Miniklassentreiber, der mit einer Klassentreiber-DLL verknüpft ist. zusammen fungieren sie als ein Funktionstreiber für das Gerät. Das Klassen-/Miniklassentreiberpaar erstellt ein Geräteobjekt, die FDO, und fügt es an den Gerätestapel an.
Ein Filtertreiber der oberen Ebene erstellt und fügt eine Filter-DO an den Gerätestapel an, ähnlich dem Filter der unteren Ebene.
Beachten Sie, dass sich das vom übergeordneten Bustreiber erstellte PDO immer am unteren Rand des Gerätestapels für ein bestimmtes Gerät befindet. Wenn Treiber PnP oder Power IRPs verarbeiten, müssen sie jeden IRP auf dem Gerätestapel an die PDO und den zugehörigen Bustreiber übergeben.
Die folgende Abbildung zeigt dieselben Gerätestapel wie die vorherige Abbildung, hebt jedoch hervor, welche Geräteobjekte von welchen Treibern erstellt und verwaltet werden.
Ein Bustreiber umfasst mehrere Gerätestapel. Ein Bustreiber erstellt die FDO für seinen Busadapter/Controller und eine PDO für jedes seiner untergeordneten Geräte.