Freigeben über


IRP_MN_QUERY_POWER

Dieser IRP fragt ein Gerät ab, um zu bestimmen, ob der Systembetriebszustand oder der Gerätestromzustand geändert werden kann.

Hauptcode

IRP_MJ_POWER

Wenn gesendet

Der Energie-Manager oder ein Geräte-Energierichtlinienbesitzer sendet diesen IRP, um zu bestimmen, ob es den System- oder Gerätestromzustand ändern kann, in der Regel, um in den Ruhezustand zu wechseln. Ein Treiber muss PoRequestPowerIrp aufrufen, um dieses IRP zuzuweisen und zu senden.

Der Power Manager sendet dieses IRP bei IRQL = PASSIVE_LEVEL an Gerätestapel, die das DO_POWER_PAGABLE Flag in der PDO festlegen.

Der Power Manager kann das IRP bei IRQL = DISPATCH_LEVEL senden, wenn das DO_POWER_INRUSH Flag festgelegt ist. Solche Treiber können nicht direkt oder indirekt auf seitenseitigen Code oder Daten zugreifen.

Eingabeparameter

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

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

  • Wenn Parameters.Power.Type"SystemPowerState" 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

Keiner.

E/A-Statusblock

Ein Treiber legt "Irp-IoStatus.Status>" auf STATUS_SUCCESS fest, um anzugeben, dass das Gerät den angeforderten Zustand eingeben kann. Ein Treiber legt einen geeigneten Fehlerstatus fest, um anzugeben, dass er den angeforderten Zustand nicht eingeben kann.

Vorgang

Die Parameter für IRP_MN_QUERY_POWER sind mit denen für IRP_MN_SET_POWER identisch. Anstatt Treiber über eine unwiderrufliche Änderung des Energiezustands zu benachrichtigen, fragt IRP_MN_QUERY_POWER jedoch ab, ob das System oder ein Gerät einen bestimmten Energiezustand eingeben 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 in Calling PoStartNextPowerIrp beschrieben. Ab Windows Vista ist das Aufrufen von PoStartNextPowerIrp nicht erforderlich, und ein solcher Anruf führt keinen Energieverwaltungsvorgang durch.

IRP_MN_QUERY_POWER für einen System-Energiezustand

Der Power Manager sendet dieses IRP, um sicherzustellen, dass er den System-Energiezustand ändern kann, ohne die Arbeit zu unterbrechen, z. B. das Ablegen von Netzwerkverbindungen.

Nach Möglichkeit fragt der Power Manager vor dem Senden von IRP_MN_SET_POWER ab, um einen Systemzustand oder ein normales Herunterfahren des Systems anzufordern. Unter einigen kritischen Bedingungen (z. B. dem Benutzer, der den Netzschalter ausschaltet oder einen Akku abläuft), sendet der Energiemanager möglicherweise eine IRP_MN_SET_POWER Anforderung, ohne zuerst eine Abfrage-Energieanforderung zu senden. Der Power Manager fragt nur nach Ruhezustand ab; es fragt nie ab, bevor er in den Arbeitszustand zurückkehrt.

Wenn ein Treiber ein System-Leistungsabfrage-IRP empfängt, sollte der IRP fehlschlagen, wenn er keinen 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 das IRP an den nächsten unteren Treiber übergeben. Der Busfahrer schließt das IRP ab.

Ab Windows Vista gilt der Übergang zu einem Ruhezustand des Systems als kritischer Vorgang. Obwohl ein Treiber möglicherweise ein Systemabfrage-IRP fehlschlägt, kann der Energiemanager den Systemstromzustand dennoch in einen Energiesparmodus ändern. Nachdem ein Treiber ein System-Abfrage-Energie-IRP erhält, sollte der Treiber immer für eine nachfolgende Änderung im Systemstromzustand vorbereitet sein.

Wenn ein Geräte-Energierichtlinienbesitzer ein System-Energieabfrage-IRP empfängt, sollte er eine IoCompletion-Routine im IRP festlegen, bevor er ihn übergibt. In der IoCompletion-Routine sollte eine IRP_MN_QUERY_POWER für einen Gerätestatus gesendet werden, der für den abgefragten Systemstatus gültig ist. Weitere Informationen finden Sie unter Handling a System Query-Power IRP in a Device Power Policy Owner.

Wenn das IRP PowerSystemShutdown (S5) angibt, gibt der Wert bei Parameters.Power.ShutdownType einen Grund für das Herunterfahren an. Der ShutdownType teilt dem Treiber mit, ob das System zurückgesetzt wird (PowerActionShutdownReset) oder unbefristet zum Neustart (PowerActionShutdownOff). Bei Treibern der meisten Geräte ist der Unterschied inkonsequential. Bei bestimmten Geräten, z. B. bei einem Videostreaminggerät, das DMA ausführt, kann ein Treiber jedoch entscheiden, sein Gerät herunterzuschalten, wenn das System zurückgesetzt wird, wodurch alle laufenden E/A-Vorgänge beendet werden.

Auf Microsoft Windows 2000- und höher-Systemen kann der Wert bei ShutdownType auch PowerActionShutdown sein. In diesem Fall kann der Treiber nicht feststellen, welche Art von Herunterfahren angefordert wird, und sollte daher wie bei einer Zurücksetzung fortgesetzt werden.

Wenn ein Treiber eine IRP_MN_QUERY_POWER Anforderung für einen Systemstromzustand fehlschlägt, antwortet der Power Manager in der Regel, indem ein IRP_MN_SET_POWER IRP ausgestellt wird. In der Regel wird dieses IRP den aktuellen Systemzustand bekräftigen. Es ist jedoch möglich, dass Treiber möglicherweise eine IRP_MN_SET_POWER für den abgefragten Zustand oder einen anderen Zwischenzustand erhalten. Die Fahrer sollten darauf vorbereitet sein, diese Situationen zu behandeln.

IRP_MN_QUERY_POWER für einen Geräte-Power-Zustand

Ein Geräte-Energierichtlinienbesitzer sendet dieses 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 das IRP an den nächsten unteren Treiber und so weiter, bis der IRP den Bustreiber erreicht. Wenn ein Treiber im Stapel das IRP nicht ausführen muss, sollte dieser Treiber das IRP sofort abschließen, indem IoCompleteRequest aufgerufen und ein Fehlerstatus zurückgegeben wird. Treiber, die das IRP fehlschlagen, ü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 ein Set-Power-IRP abgeschlossen wird, das das Gerät in einen akzeptablen Leistungszustand zurückgibt.

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

Anforderungen

Kopfball: Wdm.h (enthalten Wdm.h, Ntddk.h oder Ntifs.h)

Siehe auch

IRP_MN_SET_POWER

PoRequestPowerIrp

PoStartNextPowerIrp