Share via


Wann werden WDM-Geräteobjekte erstellt?

In diesem Abschnitt werden die einzelnen Arten von Geräteobjekten beschrieben, und es wird erwähnt, wann jedes Objekt erstellt wird.

Die folgende Abbildung zeigt die möglichen Arten von Geräteobjekten, die in einem Gerätestapel angefügt werden können, und stellt die Treiber dar, die E/A-Anforderungen für ein Gerät verarbeiten.

Diagramm, das mögliche Geräteobjektebenen für ein Gerät veranschaulicht.

Ab unten in dieser Abbildung:

  • Ein Bustreiber erstellt ein PDO für jedes Gerät, das er auf seinem Bus auflistet.

    Ein Bustreiber erstellt ein PDO für ein untergeordnetes Gerät, wenn er das Gerät auflistet. Ein Bustreiber zählt ein Gerät als Antwort auf eine IRP_MN_QUERY_DEVICE_RELATIONS Anforderung für BusRelations vom PnP-Manager auf. Der Bustreiber erstellt ein PDO für ein untergeordnetes Gerät, wenn das Gerät dem Bus hinzugefügt wurde, seit der Bustreiber zuletzt auf eine Abfrage-Relations-Anforderung für BusRelations reagiert hat (oder wenn dies die erste Abfragebeziehungsanforderung seit dem Start des Computers ist).

    Ein PDO stellt das Gerät für den Bustreiber sowie für andere Kernelmodussystemkomponenten wie den Energie-Manager, den PnP-Manager und den E/A-Manager dar.

    Andere Treiber für geräteanfügende Geräteobjekte über dem PDO, aber die PDO befindet sich immer am unteren Rand des Gerätestapels.

  • Optionale Busfiltertreiber erstellen Filter-DOs für jedes Gerät, das sie filtern.

    Wenn der PnP-Manager ein neues Gerät in einer BusRelations-Liste erkennt, bestimmt er, ob es Busfiltertreiber für das Gerät gibt. Wenn dies der Fall ist, stellt der PnP-Manager sicher, dass er geladen wird (ruft bei Bedarf DriverEntry auf) und ruft die AddDevice-Routine des Treibers auf. Wenn der Busfiltertreiber Vorgänge für dieses Gerät filtert, erstellt der Filtertreiber ein Geräteobjekt und fügt es in seiner AddDevice-Routine an den Gerätestapel an. Wenn mehr als ein Busfiltertreiber vorhanden ist und für dieses Gerät relevant ist, erstellt und fügt jeder dieser Filtertreiber sein eigenes Geräteobjekt an.

  • Optionale Filtertreiber auf niedrigerer Ebene erstellen Filter-DOs für jedes Gerät, das sie filtern.

    Wenn für dieses Gerät ein optionaler Filtertreiber auf niedrigerer Ebene vorhanden ist, stellt der PnP-Manager sicher, dass ein solcher Treiber nach dem Bustreiber und allen Busfiltertreibern geladen wird. Der PnP-Manager ruft die AddDevice-Routine des Filtertreibers auf. In seiner AddDevice-Routine erstellt der Filtertreiber der unteren Ebene eine Filter-DO für das Gerät und fügt es an den Gerätestapel an. Wenn mehr als ein Filtertreiber auf niedriger Ebene vorhanden ist, würde jeder dieser Treiber einen eigenen Filter-DO erstellen und anfügen.

  • Der Funktionstreiber erstellt eine FDO für das Gerät.

    Der PnP-Manager stellt sicher, dass der Funktionstreiber für das Gerät geladen wird, und ruft die AddDevice-Routine des Funktionstreibers auf. Der Funktionstreiber erstellt eine FDO und fügt sie an den Gerätestapel an.

  • Optional erstellen Filtertreiber der oberen Ebene eine Filter-DO für jedes Gerät, das sie filtern.

    Wenn optionale Filtertreiber der oberen Ebene für das Gerät vorhanden sind, stellt der PnP-Manager sicher, dass sie nach dem Funktionstreiber geladen werden, und ruft ihre AddDevice-Routinen auf. Jeder solche Filtertreiber fügt sein Geräteobjekt an den Gerätestapel an.

Zusammengefasst enthält der Gerätestapel ein Geräteobjekt für jeden Treiber, der an der Verarbeitung von E/A für ein bestimmtes Gerät beteiligt ist. Der übergeordnete Bustreiber verfügt über ein PDO, der Funktionstreiber über eine FDO und jeder optionale Filtertreiber über eine Filter-DO.

Beachten Sie, dass alle Geräte, Busadapter-/Controllergeräte und Nichtbusgeräte, eine PDO und eine FDO in ihrem Gerätestapel enthalten. Der PDO für einen Busadapter/Controller wird vom Bustreiber für den übergeordneten Bus erstellt. Wenn beispielsweise ein SCSI-Adapter an einen PCI-Bus anschließen wird, erstellt der PCI-Bustreiber einen PDO für den SCSI-Adapter.

Wenn ein Gerät im rohen Modus verwendet wird, gibt es keine Funktions- oder Filtertreiber (keine FDO oder Filter-DOs). Es gibt nur eine PDO für den übergeordneten Bustreiber und null oder mehr Busfilter-DOs.

Informationen dazu, welche Treiberroutinen für das Erstellen und Anfügen von Geräteobjekten verantwortlich sind, finden Sie unter Erstellen eines Geräteobjekts .

Der Gerätestapel und einige zusätzliche Informationen bilden den Entwicklungsknoten für ein Gerät. Der PnP-Manager verwaltet Informationen im Devnode eines Geräts, z. B. ob das Gerät gestartet wurde und welche Treiber, falls vorhanden, für die Benachrichtigung über Änderungen auf dem Gerät registriert wurden. Der Kerneldebuggerbefehl !devnode zeigt Informationen zu einem Devnode an.