IRP_MN_POWER_SEQUENCE
Dieser IRP gibt die Energiesequenzwerte für ein Gerät zurück.
Hauptcode
Sendebedingungen
Ein Treiber sendet dieses IRP als Optimierung, um zu bestimmen, ob sein Gerät tatsächlich in einen bestimmten Energiezustand gelangt ist. Die Unterstützung für dieses IRP ist optional.
Um dieses IRP zu senden, muss ein Treiber IoAllocateIrp aufrufen, um das IRP zuzuordnen, wobei der Haupt-IRP-Code IRP_MJ_POWER und neben dem IRP-Code IRP_MN_POWER_SEQUENCE angegeben wird. Der Treiber muss dann IoCallDriver (Windows Vista) oder PoCallDriver (Windows Server 2003, Windows XP und Windows 2000) aufrufen, um das IRP an den nächsten niedrigeren Treiber zu übergeben. Der Energie-Manager kann diese IRP nicht senden.
Absender dieses IRP müssen unter IRQL <= DISPATCH_LEVEL ausgeführt werden.
Eingabeparameter
Keine.
Ausgabeparameter
Parameters.PowerSequence verweist auf eine POWER_SEQUENCE-Struktur mit den folgenden Membern:
SequenceD1
Anzahl der Geräte im Energiezustand D1 oder niedriger.
SequenceD2
Anzahl der Geräte im Energiezustand D2 oder niedriger.
SequenceD3
Anzahl der Geräte im Energiezustand D3.
Die Sequenzwerte verfolgen, wie oft sich ein Gerät mindestens im entsprechenden Energiezustand oder in einem niedrigeren Leistungszustand befunden hat.
Der Bustreiber inkrementiert die Werte in SequenceD1, SequenceD2 und SequenceD3 mindestens bei jedem Wechsel des Geräts in den entsprechenden Leistungszustand oder einen niedrigeren Leistungszustand.
E/A-Statusblock
Ein Treiber legt Irp-IoStatus.Status> auf STATUS_SUCCESS fest, um anzugeben, dass die angeforderten Informationen zurückgegeben wurden, oder STATUS_NOT_IMPLEMENTED, um anzugeben, dass diese IRP nicht unterstützt wird.
Vorgang
Dieser IRP gibt die Energiesequenzwerte für ein Gerät zurück. Busfahrer können optional damit umgehen; Funktions- und Filtertreiber können sie optional senden.
Für ein Gerät, das lange dauert, um den Zustand zu ändern, bietet dieser IRP eine nützliche Optimierung. Jedes Mal, wenn das Gerät seinen Energiezustand ändert, erhöht der Bustreiber den Sequenzwert für diesen Energiezustand. Der Bustreiber initialisiert die Sequenzwerte zur Startzeit und erhöht sie anschließend kontinuierlich. sie müssen nicht auf 0 zurückgesetzt werden.
Ein Geräterichtlinienbesitzer kann diese IRP einmal senden, um die Sequenzwerte vor dem Ausschalten des Geräts abzurufen und erneut neue Werte zu erhalten, wenn der Strom auf dem Gerät wiederhergestellt wird. Durch den Vergleich der beiden Wertesätze kann der Treiber ermitteln, ob das Gerät tatsächlich in den Zustand mit niedrigerer Leistung gelangt ist. Wenn das Gerät nicht an Strom verloren hat, kann der Treiber eine zeitaufwändige Neuinitialisierung vermeiden, wenn das Gerät in den D0-Zustand zurückkehrt.
Wenn das Gerät beispielsweise beim Erreichen des D2-Zustands lange dauert, bis die Stromversorgung wiederhergestellt wird, kann der Treiber den SequenceD2-Wert speichern, bevor er den Gerätezustand auf D2 oder niedriger festlegt. Später, wenn die Stromversorgung auf dem Gerät wiederhergestellt wird, kann der Treiber den neuen SequenceD2-Wert mit dem gespeicherten Wert vergleichen, um zu ermitteln, ob der Gerätezustand tatsächlich unter D2 gesunken ist. Wenn die Werte übereinstimmen, hat das Gerät nicht tatsächlich den Energiezustand D2 oder einen niedrigeren Zustand erhalten, und der Treiber kann eine erneute Initialisierung des Geräts vermeiden.
Anforderungen
Header |
Wdm.h (einschließen Wdm.h, Ntddk.h oder Ntifs.h) |