Freigeben über


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.

IRP_MN_QUERY_POWER

IRP_MN_SET_POWER

IRP_MN_WAIT_WAKE

IRP_MN_POWER_SEQUENCE

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.

Diagramm, das den Pfad eines Geräteleistungs-irp veranschaulicht.

Wie in der vorherigen Abbildung gezeigt, wird ein IRP für die Geräteleistung gesendet, weitergeleitet und in den folgenden Schritten abgeschlossen:

  1. 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.

  2. Der Energie-Manager weist eine Geräteleistungs-IRP zu und sendet sie an den obersten Treiber im Gerätestapel für die Ziel-PDO.

  3. 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.

  4. 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.

  5. 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.