Ein Gerät wechselt in einen Low-Power Zustand

Ein Gerät verlässt seinen Arbeitszustand (D0) und wechselt in einen Energiesparzustand, wenn einer der folgenden Aktionen auftritt:

  • Das Gerät befindet sich im Leerlauf (d. h., es wird nicht zugegriffen) und kann in einen Leerlaufzustand mit geringer Leistung wechseln, während das System in seinem Betriebszustand (S0) verbleibt.

  • Der Energiezustand des Systems hat sich von seinem Arbeitszustand (S0) in einen Energiesparzustand geändert. (Treiber können WdfDeviceGetSystemPowerAction aufrufen, um den Grund zu ermitteln, aus dem sich der Energiezustand eines Systems ändert.)

Für jede Funktion und jeden Filtertreiber, der das Gerät unterstützt, führt das Framework nacheinander einen Treiber nacheinander aus, beginnend mit dem Treiber, der am höchsten im Treiberstapel ist:

  1. Wenn der Treiber selbstverwaltete E/A verwendet, ruft das Framework die Rückruffunktion EvtDeviceSelfManagedIoSuspend des Treibers auf.

  2. Das Framework beendet alle stromverwalteten E/A-Warteschlangen des Treibers und ruft ihre EvtIoStop-Rückruffunktionen auf (sofern vorhanden).

  3. Wenn der Treiber der Besitzer der Energierichtlinie des Geräts ist, ruft das Framework seine Rückruffunktion EvtDeviceArmWakeFromS0, EvtDeviceArmWakeFromSx oder EvtDeviceArmWakeFromSxWithReason auf.

  4. Wenn die Hardware und der Treiber DMA unterstützen, ruft das Framework die Rückruffunktionen EvtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlush und EvtDmaEnablerDisablerDisable (sofern vorhanden) des Treibers für jeden erstellten DMA-Kanal auf.

  5. Das Framework ruft die EvtDeviceD0ExitPreInterruptsDisabled-Rückruffunktion des Treibers auf (sofern vorhanden), und ruft dann die EvtInterruptDisable-Rückruffunktion des Treibers (sofern vorhanden) für jeden Interrupt auf, damit der Treiber Geräteunterbrechungen deaktivieren kann.

  6. Das Framework ruft die Rückruffunktion EvtDeviceD0Exit des Treibers auf (sofern vorhanden).

Der Bustreiber ist der Treiber im Stapel, der zuletzt aufgerufen wird. Wenn das Framework die Rückruffunktion EvtDeviceD0Exit des Bustreibers aufruft, legt die Rückruffunktion den Energiezustand des Geräts (ein untergeordnetes Gerät des Busses) auf einen Energiesparzustand fest. Das Framework gibt den D3-Energiesparzustand an, es sei denn, der Besitzer der Energierichtlinie hat einen anderen Energiesparzustand angegeben.

Hinweis

Die vom Bustreiber zum Festlegen des Energiezustands des untergeordneten Geräts verwendete Methode ist busspezifisch. Beispielsweise definiert die PCI-Bus-Energieverwaltungsspezifikation ein 16-Bit-Power Management Control/Status Register (PMCSR). Die niedrigsten zwei Bits ("PowerState") bestimmen den aktuellen Energiezustand des Geräts und werden verwendet, um das Gerät in einen neuen Energiezustand zu versetzen. Wenn das pci.sys PDO IRP_MN_SET_POWER/D3 empfängt, liest es den PMCSR, ändert die PowerState-Bits in 11b (Leistungsstufe D3) und schreibt die PMCSR zurück.