IRP_MN_QUERY_POWER

Dieser IRP fragt ein Gerät ab, um zu bestimmen, ob der Energiezustand des Systems oder der Energiezustand des Geräts geändert werden kann.

Hauptcode

IRP_MJ_POWER

Sendebedingungen

Der Energie-Manager oder der Besitzer einer Geräteenergierichtlinie sendet diese IRP, um zu bestimmen, ob der Energiezustand des Systems oder Geräts geändert werden kann, in der Regel, um in den Standbymodus zu wechseln. Ein Treiber muss PoRequestPowerIrp aufrufen, um diese IRP zuzuordnen und zu senden.

Der Energie-Manager sendet diesen IRP bei IRQL = PASSIVE_LEVEL an Gerätestapel, die das DO_POWER_PAGABLE-Flag im PDO festlegen.

Der Energie-Manager kann den IRP unter IRQL = DISPATCH_LEVEL senden, wenn das flag DO_POWER_INRUSH festgelegt ist. Solche Treiber können nicht direkt oder indirekt auf ausgelagerten Code oder Daten zugreifen.

Eingabeparameter

Parameters.Power.Type gibt den Typ des festzulegenden Energiezustands an, entweder SystemPowerState oder DevicePowerState.

Parameters.Power.State gibt den Energiezustand selbst wie folgt an:

  • Wenn Parameters.Power.TypesystemPowerState ist, ist der Wert ein Enumerator des SYSTEM_POWER_STATE Typs.

  • Wenn Parameters.Power.TypedevicePowerState ist, ist der Wert ein Enumerator des DEVICE_POWER_STATE Typs.

Parameters.Power.ShutdownType gibt zusätzliche Informationen zum angeforderten Übergang an. Mögliche Werte sind Enumeratoren des POWER_ACTION Typs.

Ausgabeparameter

Keine.

E/A-Statusblock

Ein Treiber legt Irp-IoStatus.Status> auf STATUS_SUCCESS fest, um anzugeben, dass das Gerät in den angeforderten Zustand wechseln kann. Ein Treiber legt alle geeigneten Fehler status fest, um anzugeben, dass er nicht in den angeforderten Zustand wechseln kann.

Vorgang

Die Parameter für IRP_MN_QUERY_POWER sind identisch mit denen für IRP_MN_SET_POWER. Anstatt Treiber jedoch über eine unwiderrufliche Änderung des Energiezustands zu informieren, fragt IRP_MN_QUERY_POWER ab, ob das System oder ein Gerät in einen bestimmten Energiezustand wechseln kann.

Ein Treiber darf den Energiezustand seines Geräts nicht als Reaktion auf eine IRP_MN_QUERY_POWER-Anforderung ändern.

Nachdem ein Treiber eine IRP_MN_QUERY_POWER Anforderung unter Windows Server 2003, Windows XP und Windows 2000 erhalten hat, muss ein Treiber PoStartNextPowerIrp aufrufen, wie unter Aufrufen von PoStartNextPowerIrp beschrieben. Ab Windows Vista ist der Aufruf von PoStartNextPowerIrp nicht erforderlich, und ein solcher Aufruf führt keinen Energieverwaltungsvorgang aus.

IRP_MN_QUERY_POWER für einen Systemleistungszustand

Der Energie-Manager sendet diese IRP, um sicherzustellen, dass er den Energiezustand des Systems ändern kann, ohne die Arbeit zu unterbrechen, z. B. das Löschen von Netzwerkverbindungen.

Wenn möglich, fragt der Power Manager vor dem Senden von IRP_MN_SET_POWER ab, um einen Ruhezustand des Systems oder ein normales Herunterfahren des Systems anzufordern. Unter einigen kritischen Bedingungen (z. B. wenn der Benutzer die Aus-Taste drückt oder der Akku abläuft), sendet der Energie-Manager möglicherweise eine IRP_MN_SET_POWER-Anforderung , ohne vorher eine Abfrage-Energieanforderung zu senden. Der Power Manager fragt nur nach Ruhezustand ab. Es fragt nie ab, bevor der Arbeitszustand zurückgegeben wird.

Wenn ein Treiber eine Systemleistungsabfrage-IRP empfängt, sollte die IRP fehlschlagen, wenn er keine der Gerätezustände unterstützt, die für den abgefragten Systemzustand gültig sind. Weitere Informationen finden Sie unter DeviceState. Andernfalls sollte der Treiber den IRP an den nächstniedringen Treiber übergeben. Der Bustreiber schließt die IRP ab.

Ab Windows Vista wird der Übergang in einen Systemzustand im Ruhezustand als kritischer Vorgang betrachtet. Obwohl bei einem Treiber möglicherweise ein Systemabfrage-Power-IRP fehlschlägt, kann der Energie-Manager den Systemenergiezustand dennoch in einen Ruhezustand ändern. Nachdem ein Treiber eine Systemabfrage-Leistungs-IRP erhalten hat, sollte der Treiber immer auf eine nachfolgende Änderung des Systemleistungszustands vorbereitet sein.

Wenn ein Besitzer einer Geräteenergierichtlinie eine Systemleistungsabfrage-IRP empfängt, sollte er eine IoCompletion-Routine im IRP festlegen, bevor er sie übergibt. In der IoCompletion-Routine sollte eine IRP_MN_QUERY_POWER für einen Gerätezustand gesendet werden, der für den abgefragten Systemzustand gültig ist. Weitere Informationen finden Sie unter Handling a System Query-Power IRP in a Device Power Policy Owner.For more information, see Handling a System Query-Power IRP in a Device Power Policy Owner.For more information, see Handling a System Query-Power IRP in a Device Power Policy Owner.

Wenn der IRP PowerSystemShutdown (S5) angibt, gibt der Wert unter Parameters.Power.ShutdownType einen Grund für das Herunterfahren an. ShutdownType teilt dem Treiber mit, ob das System zurückgesetzt (PowerActionShutdownReset) oder unbegrenzt ausgeschaltet wird, um später neu zu starten (PowerActionShutdownOff). Für Treiber der meisten Geräte ist der Unterschied nicht belanglos. Bei bestimmten Geräten, z. B. einem Videostreaminggerät, das DMA ausführt, kann sich ein Treiber jedoch entscheiden, sein Gerät herunterzuschalten, wenn das System zurückgesetzt wird, sodass alle laufenden E/A-Vorgänge beendet werden.

Unter Microsoft Windows 2000 und höher kann der Wert unter ShutdownType auch PowerActionShutdown sein. In diesem Fall kann der Treiber nicht erkennen, welche Art des Herunterfahrens angefordert wird, und sollte daher wie bei einem Zurücksetzen fortfahren.

Wenn ein Treiber eine IRP_MN_QUERY_POWER Anforderung für einen Systemstromzustand fehlschlägt, antwortet der Energie-Manager in der Regel mit einer IRP_MN_SET_POWER IRP. In der Regel bestätigt dieses IRP den aktuellen Systemzustand. Es ist jedoch möglich, dass Treiber eine IRP_MN_SET_POWER zum abgefragten Zustand oder zu einem anderen Zwischenzustand erhalten. Die Fahrer sollten darauf vorbereitet sein, diese Situationen zu bewältigen.

IRP_MN_QUERY_POWER für einen Geräteenergiezustand

Ein Besitzer der Geräteenergierichtlinie sendet diese IRP als Reaktion auf eine System-IRP_MN_QUERY_POWER-Anforderung an seinen Stapel.

Wenn ein Treiber sein Gerät in den angeforderten Gerätezustand versetzen kann, legt er IoStatus.Status auf STATUS_SUCCESS fest und übergibt den IRP an den nächstniedrig liegenden Treiber usw., bis der IRP den Bustreiber erreicht. Wenn ein Treiber im Stapel das IRP nicht erfolgreich ausführen muss, sollte dieser Treiber das IRP sofort abschließen, indem IoCompleteRequest aufgerufen und ein Fehler status zurückgegeben wird. Treiber, bei denen das IRP fehlschlägt, übergeben sie nicht weiter unten im Stapel.

Durch die Rückgabe STATUS_SUCCESS garantiert der Treiber, dass er keinen Vorgang startet, der seine Fähigkeit zum Festlegen des angeforderten Energiezustands ändern würde. Der Treiber sollte alle IRPs in die Warteschlange stellen, die solche Vorgänge erfordern, bis er eine festgelegte Energie-IRP abgeschlossen hat, die das Gerät in einen akzeptablen Energiezustand zurückgibt.

Wenn das IRP unter Windows 2000 und höher PowerDeviceD1, PowerDeviceD2 oder PowerDeviceD3 angibt, enthält der Wert unter Parameters.Power.ShutdownType Informationen zur aktuellen Systemleistungs-IRP, wenn ein Systemleistungs-IRP aktiv ist. In diesem Fall gibt der Wert unter ShutdownType den aktuell angeforderten Systemstromzustand an, oder PowerActionNone , wenn eine Systemanforderung nicht aussteht. Unter Windows 98/Me enthält dieses Feld immer PowerActionNone , wenn der IRP einen Gerätestromzustand anfordert.

Anforderungen

Header

Wdm.h (einschließen Wdm.h, Ntddk.h oder Ntifs.h)

Weitere Informationen

IRP_MN_QUERY_POWER

IRP_MN_SET_POWER

PoRequestPowerIrp

PoStartNextPowerIrp