Power IRPs für einzelne Geräte
Ein Geräteleistungs-IRP gibt haupt-IRP-Code IRP_MJ_POWER, einen der unten aufgeführten untergeordneten Energie-IRP-Codes und den Wert DevicePowerState im Power.Type-Element an.
Alle Treiber in einem Gerätestapel erhalten solche IRPs; Normalerweise kann nur der Geräteenergierichtlinien-Manager diese IRPs senden. Der Power Manager kann jedoch eine IRP für die Geräteleistung senden, wenn die Leerlauferkennung im Auftrag eines Geräts ausgeführt wird, wie unter Verwenden von Power Manager-Routinen für die Leerlauferkennung erläutert.
Ein Treiber sendet eine IRP für die Geräteleistung aus einem der folgenden Gründe:
So fragen oder ändern Sie den Energiezustand des Geräts als Reaktion auf eine Systemleistungs-IRP
So versetzen Sie das Gerät in einen Energiesparmodus, um Strom zu sparen
So kehren Sie das Gerät in den Betriebszustand zurück, nachdem es eingeschlafen wurde
So aktivieren Sie das Aufwachen des Geräts als Reaktion auf ein externes Signal
So rufen Sie beim Einschalten eines Geräts einen Energiesequenzwert ab
Die folgende Abbildung zeigt die Abfolge der Schritte zum Senden, Weiterleiten und Abschließen eines Geräteleistungs-IRP.
Wie in der vorherigen Abbildung gezeigt, wird ein IRP für die Geräteleistung gesendet, weitergeleitet und in den folgenden Schritten abgeschlossen:
Der Besitzer der Geräteenergierichtlinie ruft PoRequestPowerIrp auf, um eine IRP für die Geräteleistung zuzuweisen. Dabei wird die PDO angegeben, die das Ziel des IRP ist, und eine Rückrufroutine, die aufgerufen werden soll, wenn die IRP abgeschlossen ist.
Der Energie-Manager weist eine Geräteleistungs-IRP zu und sendet sie an den obersten Treiber im Gerätestapel für die Ziel-PDO.
Der Treiber führt die folgenden Aktionen aus:
Legt eine IoCompletion-Routine fest, wenn eine erforderlich ist.
Ruft PoStartNextPowerIrp (Windows Server 2003, Windows XP und Windows 2000) auf, wenn keine Vervollständigungsroutine verwendet wird. Ab Windows Vista ist dieser Aufruf nicht erforderlich, und ein solcher Aufruf führt keinen Energieverwaltungsvorgang aus.
Ruft IoCallDriver (Windows 7 und Windows Vista) auf oder ruft PoCallDriver (Windows Server 2003, Windows XP und Windows 2000) auf, um die IRP an den nächstniedrigen Treiber zu übergeben.
Jeder Treiber im Stapel tut dies, bis der IRP den Bustreiber erreicht. Wenn ein Treiber für die IRP fehlschlagen muss, sollte er dies sofort tun und IoCompleteRequest aufrufen.
Der Bustreiber, der das Geräte-PDO verwaltet, führt die angeforderte Aktion aus und ruft dann IoCompleteRequest auf, um die IRP abzuschließen. Ein Bustreiber kann ein IRP für das Einschalten eines Geräts fehlschlagen, wenn ein Gerät entfernt wird oder gerade entfernt wird.
Der E/A-Manager ruft IoCompletion-Routinen auf, die von Treibern festgelegt wurden, während sie die IRP im Stapel übergeben haben. Nachdem alle IoCompletion-Routinen aufgerufen wurden, wird die Rückrufroutine ausgeführt.
Weitere Informationen zu Geräteleistungs-IRPs finden Sie unter Verwalten der Energie für einzelne Geräte und Unterstützende Geräte, die über Wake-Up-Funktionen verfügen. Ausführliche Informationen zur Energiesequenz-IRP finden Sie unter IRP_MN_POWER_SEQUENCE.