Starten eines Geräts in einem Bustreiber

Ein Bustreiber startet ein untergeordnetes Gerät ( untergeordnetes PDO) mit einer Prozedur wie der folgenden in seiner DispatchPnP-Routine :

  1. Starten Sie das Gerät.

    Die genauen Schritte variieren von Gerät zu Gerät.

    Beispielsweise programmiert der PCI-Bustreiber seine Zuordnungsregister, um Anforderungen für den PCI-Bus zu aktivieren. Der PnP ISA-Bustreiber aktiviert die PnP ISA-Karte, sodass der Funktionstreiber darauf zugreifen kann.

  2. Schließen Sie die IRP ab.

    Wenn die Startvorgänge des Bustreibers erfolgreich waren, legt der Treiber Irp-IoStatus.Status> auf STATUS_SUCCESS fest und ruft IoCompleteRequest auf und gibt eine Prioritätserhöhung von IO_NO_INCREMENT an. Der Bustreiber gibt STATUS_SUCCESS aus seiner DispatchPnP-Routine zurück.

    Wenn beim Bustreiber während seiner Startvorgänge ein Fehler auftritt, legt der Treiber einen Fehler status im IRP fest, ruft IoCompleteRequest mit IO_NO_INCREMENT auf und gibt den Fehler aus seiner DispatchPnP-Routine zurück.

Wenn ein Bustreiber einige Zeit zum Starten des Geräts benötigt, kann er das IRP als ausstehend markieren und STATUS_PENDING zurückgeben.