Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses IRP benachrichtigt einen Treiber einer Änderung an den Systembetriebszustand oder legt den Gerätestromzustand für ein Gerät fest.
Hauptcode
Wenn gesendet
Entweder der System-Power-Manager oder ein Geräte-Energierichtlinienbesitzer können diese IRP senden.
Der Power Manager sendet dieses IRP, um Treiber über eine Änderung an den Systemstromzustand zu benachrichtigen. Wenn ein Treiber sein Gerät für die Leerlauferkennung registriert, sendet der Power Manager dieses IRP, um den Energiezustand eines Leerlaufgeräts zu ändern.
Ein Treiber, der die Energierichtlinie besitzt, sendet dieses IRP, um den Gerätestromzustand für sein Gerät festzulegen. Ein Treiber muss PoRequestPowerIrp aufrufen, um dieses IRP 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. Treiber in solchen Stapeln können seitenseitigen Code oder Daten berühren, um die Anforderung abzuschließen.
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
The Parameters.Power.Type member specifies the type of power state being set, either SystemPowerState or DevicePowerState.
Das Parameter.Power.State-Mitglied 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.
Das Parameter.Power.ShutdownType-Element gibt zusätzliche Informationen zum angeforderten Übergang an. Die möglichen Werte für dieses Element sind POWER_ACTION Enumerationswerte. Weitere Informationen finden Sie unter "System Power Actions".
Der Parameter.Power.SystemPowerStateContext-Member ist eine schreibgeschützte, teilweise undurchsichtige SYSTEM_POWER_STATE_CONTEXT Struktur, die Informationen zu den vorherigen Systemleistungszuständen eines Computers enthält. Wenn Parameters.Power.TypeSystemPowerState und Parameters.Power.StatePowerSystemWorking ist, geben zwei Flagbits in dieser Struktur an, ob ein schneller Start oder eine Wake-from-Hibernation bewirkt hat, dass der Computer in den Systemzustand S0 (funktionsfähig) wechselt. Weitere Informationen finden Sie unter Distinguishing Fast Startup from Wake-from-Hibernation.
Systemstromübergangskontext für IRP_MN_SET_POWER
Die folgende Tabelle zeigt den Inhalt von IRP_MN_SET_POWER. Parameters.Power. {Bundesland|ShutdownType} und die Bitfelder CurrentSystemState, TargetSystemState und EffectiveSystemState in der SYSTEM_POWER_STATE_CONTEXT Struktur für jeden Systemstromübergang. Jede Zeile stellt eine IRP_MN_SET_POWER dar.
| Übergang | Staat | Herunterfahren-Typ | Aktueller SystemState-Wert | ZielsystemState | Effektives SystemState | Kommentare |
|---|---|---|---|---|---|---|
| Schlafen zu... | S3 | Schlafen | S0 | S3 | S3 | |
| ... Aufwachen | S0 | Schlafen | S3 | S0 | S0 | |
| Hybrid sleep to... | S4 | Ruhezustand | S0 | S3 | S4 | Ruhezustand mit Ruhezustandsdatei (Fast S4) |
| ... Aufwachen | S0 | Schlafen | S3 | S0 | S0 | |
| ... Wake/PwrLost | S0 | Schlafen | S4 | S0 | S0 | |
| Ruhezustand bis... | S4 | Ruhezustand | S0 | S4 | S4 | |
| ... Aufwachen | S0 | Schlafen | S4 | S0 | S0 | |
| Hybrid herunterfahren zu... | S4 | Ruhezustand | S0 | S5 | S4 | Apps geschlossen, Der Benutzer hat sich abgemeldet, als ob das Herunterfahren (Ruhezustandsstart) |
| ... Schneller Start | S0 | Schlafen | S4 | S0 | S0 | |
| Herunterfahren bis... | S5 | Herunterfahren/Zurücksetzen/Deaktivieren | S0 | S5 | S5 | |
| ... Systemstart | Kein S-IRP zum Starten |
Ausgabeparameter
Parameters.Power.SystemContext ist für die Systemverwendung reserviert.
E/A-Statusblock
Ein Treiber legt "Irp-IoStatus.Status>" auf STATUS_SUCCESS fest, um anzugeben, dass das Gerät den angeforderten Zustand eingegeben hat.
Ein Treiber darf keine Anforderung zum Festlegen des Systemstromzustands nicht bestehen.
Funktions- und Filtertreiber, die sich über einem Bustreiber befinden, dürfen keine Anforderung zum Festlegen eines Gerätestromzustands nicht bestehen. Der Bustreiber kann eine Geräte-Einschaltanforderung fehlschlagen, wenn das Gerät entfernt oder entfernt wird.
Vorgang
Der Strom-Manager oder ein Treiber kann eine IRP_MN_SET_POWER IRP anfordern. Der Power Manager sendet diesen IRP aus einem der folgenden Gründe:
So benachrichtigen Sie Treiber über eine Änderung am Systembetriebszustand
So ändern Sie den Energiezustand eines Geräts, für das der Power Manager die Leerlauferkennung durchführt
Um den aktuellen Systemzustand zu bekräftigen, nachdem ein Treiber eine IRP_MN_QUERY_POWER Anforderung für einen Systemstromzustand fehlschlägt. Weitere Informationen finden Sie unter IRP_MN_QUERY_POWER.
Ein Treiber, der die Energierichtlinie des Geräts besitzt, sendet IRP_MN_SET_POWER , um den Energiezustand des Geräts zu ändern.
Zu einem bestimmten Zeitpunkt kann das System nur ein solches IRP für jedes Geräteobjekt aktiv sein.
Jeder Treiber muss jeden Strom-IRP an den nächsten niedrigeren Treiber übergeben, indem IoCallDriver (beginnend mit Windows Vista) oder PoCallDriver (Windows Server 2003, Windows XP und Windows 2000) aufgerufen wird. Die PoCallDriver-Schnittstelle ähnelt dem von IoCallDriver, mit der Ausnahme, dass das Energieverwaltungssubsystem das IRP verzögern kann, bevor es an den nächsten Treiber übergeben wird. So können z. B. Verzögerungen bei einer PowerDeviceD0-Anforderung auftreten, wenn für das Gerät Einrushstrom erforderlich ist und daher seriell mit einem anderen solchen Gerät eingeschaltet werden muss.
Nachdem ein Treiber eine IRP_MN_SET_POWER Anforderung unter Windows Server 2003, Windows XP oder 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 Stromverwaltungsvorgang durch.
IRP_MN_SET_POWER für Systemleistungszustände
Nur der System-Power Manager kann ein System-Set-Power-IRP senden.
Ein Treiber darf keine Anforderung zum Festlegen des Systemstromzustands nicht bestehen.
Wenn möglich, sendet der Power Manager IRP_MN_QUERY_POWER , bevor IRP_MN_SET_POWER gesendet wird, um einen Systemschlafzustand anzufordern. Unter bestimmten Bedingungen (z. B. dem Benutzer, der den Netzschalter drückt oder einen Akku abläuft), kann der Power Manager jedoch IRP_MN_SET_POWER ohne erste Abfrage ausstellen. Der Power Manager fragt nur nach Ruhezustand ab; es fragt nie ab, bevor das Einschalten ausgeführt wird.
Die IRP_MN_SET_POWER Anforderung wird an den obersten Treiber im Gerätestapel für ein Gerät gesendet. Der obere Fahrer übergibt das IRP bis zum nächsten unteren Fahrer und so weiter, bis das IRP den Bustreiber erreicht, der das IRP abschließen muss.
Ein Filtertreiber muss in der Regel nicht auf ein System-Set-Power-IRP reagieren, außer es weiterzuversetzen.
Der Besitzer der Gerätestromrichtlinie legt jedoch eine IoCompletion-Routine fest, bevor das IRP übergeben wird. In der IoCompletion-Routine sendet sie eine IRP_MN_SET_POWER Anforderung für ein Geräteleistungs-IRP. Weitere Informationen finden Sie unter Handling a System Set-Power IRP in a Device Power Policy Owner.
Ein System-Set-Power-IRP informiert Treiber darüber, dass eine Änderung des Systemstromzustands unmittelbar bevorsteht und die Treiber darauf vorbereiten müssen. Ein Treiber sollte jedoch den Energiezustand seines Geräts erst ändern, wenn er eine IRP_MN_SET_POWER für einen Gerätestromzustand empfängt.
Der Wert unter Parameters.Power.ShutdownType enthält zusätzliche Informationen zu den ausstehenden Aktionen. Wenn das IRP PowerSystemShutdown (S5) angibt, kann ein Treiber bestimmen, ob das System zurückgesetzt wird (PowerActionShutdownReset) oder wenn es später (PowerActionShutdownOff) auf unbestimmte Zeit ausgeschaltet wird. Bei Treibern der meisten Geräte ist der Unterschied inkonsequential. Bei bestimmten Geräten, z. B. Videostreaminggeräten, wird ein Treiber jedoch möglicherweise vom Gerät ausgeschaltet, um die E/A-Verbindung zu beenden, wenn das System zurückgesetzt wird.
Der Wert bei ShutdownType kann auch PowerActionShutdown sein. In diesem Fall kann der Treiber nicht feststellen, welche Art von Herunterfahren angefordert wird, und sollte daher wie für eine Zurücksetzung fortgesetzt werden.
Geräte-Energiezustände
Funktions- und Filtertreiber, die sich über einem Bustreiber befinden, dürfen keine Anforderung zum Festlegen eines Gerätestromzustands nicht bestehen. Der Bustreiber kann eine Geräte-Einschaltanforderung fehlschlagen, wenn das Gerät entfernt oder entfernt wird.
Ein Treiber muss das Gerät in den angeforderten Zustand setzen, bevor das IRP abgeschlossen wird.
Wenn das IRP einen Übergang zu einem niedrigeren Leistungszustand anfordert, müssen Treiber das IRP verarbeiten, da er den Gerätestapel nach unten bewegt. Dadurch wird der Kontext gespeichert, den der Treiber benötigt, um das Gerät in den Arbeitszustand wiederherzustellen. Nachdem ein Busfahrer ein IRP erhält, ist der Fahrer:
Speichert alle Kontexte, die der Treiber benötigt, um das Gerät in den Arbeitszustand wiederherzustellen.
Legt das Gerät auf den angeforderten Energiezustand fest.
Ruft PoSetPowerState auf, um den Power Manager zu benachrichtigen.
Ruft PoStartNextPowerIrp auf, um das nächste Leistungs-IRP (nur Windows Server 2003, Windows XP und Windows 2000) zu starten.
Schließt das Geräteleistungs-IRP ab.
Der Treiber muss dieses IRP zeitnah abschließen. Im Allgemeinen sollten Treiber eine Verzögerung vermeiden, die ein typischer Benutzer merklich langsam finden würde. Beispielsweise könnte ein Treiber eine Änderung des Systemzustands verzögern, um zwischengespeicherte Datenträger oder Netzwerkdaten zu leeren, eine Netzwerkverbindung jedoch nicht aktiv zu halten oder ein Band zu formatieren. Weitere Informationen finden Sie unter Übergeben von Power IRPs.
Wenn das IRP unter Windows 2000 und höheren Versionen des Betriebssystems PowerDeviceD1, PowerDeviceD2 oder PowerDeviceD3 angibt und ein System-Set-Power-IRP aktiv ist, enthält der Wert unter Parameters.Power.ShutdownType Informationen zum System-IRP.
Treiber von Geräten auf dem Ruhezustandspfad sollten diesen Wert prüfen. Wenn das IRP PowerDeviceD3 anfordert und ShutdownTypePowerActionHibernate ist, sollte ein solcher Treiber einen kontext speichern, der zum Wiederherstellen des Geräts erforderlich ist, das Gerät jedoch nicht heruntergefahren werden sollte; das Gerät wechselt in den D3-Zustand, wenn der Computer die Leistung verliert.
Unter Windows 2000 und höheren Versionen des Betriebssystems sollten Treiber nicht auf den Wert bei ShutdownType angewiesen sein, wenn der angeforderte Energiezustand PowerDeviceD0 ist.
Unter Windows 98/Me ist der ShutdownType immer PowerActionNone, wenn das IRP einen Gerätestromzustand anfordert.
Der Treiber, der bestimmt, wann ein Gerät herunterzuschalten ist, hängt von der Geräteklasse ab.
Der Treiber, der bestimmt, wann ein Gerät einschalten soll, ist fast immer ein Treiber, der auf das Gerät zugreift. Der Treiber muss überprüfen, ob sich das Gerät im D0-Zustand befindet, bevor auf die Hardwareregister des Geräts zugegriffen wird. Wenn sich das Gerät nicht im D0-Zustand befindet, muss der Treiber PoRequestPowerIrp aufrufen, um ein IRP zum Einschalten des Geräts zu senden. Ein Treiber kann nicht auf sein Gerät zugreifen, es sei denn, das Gerät befindet sich im D0-Zustand.
Wenn ein Treiber einen Set-Power-IRP für den Gerätezustand D0 empfängt, legt er eine IoCompletion-Routine fest und übergibt das IRP an den nächsten niedrigeren Treiber.
Wenn der IRP den Bustreiber erreicht, wendet dieser Treiber die Stromversorgung auf das Gerät an (oder setzt diese zurück), ruft PoStartNextPowerIrp (Nur Windows Server 2003, Windows XP und Windows 2000) auf und ruft PoSetPowerState auf, um den Power Manager über den neuen Energiezustand für das Gerät zu informieren.
Nachdem der Bustreiber das Einschalt-IRP abgeschlossen hat, verarbeiten Funktions- und Filtertreiber die IRP in ihren IoCompletion-Routinen , während er den Gerätestapel zurückgibt. In der IoCompletion-Routine stellt jeder Treiber den Gerätekontext wieder her oder neu initialisiert und führt alle anderen erforderlichen Startaufgaben aus.
Weitere Informationen finden Sie unter "Handling IRP_MN_SET_POWER for Device Power States".
Anforderungen
Kopfball: Wdm.h (enthalten Wdm.h, Ntddk.h oder Ntifs.h)