Share via


Unterstützung von Leerlauf-Power-Down

Einige Geräte können in einen Zustand mit niedriger Leistung (Dx) wechseln, während das System in seinem Betriebszustand (S0) verbleibt. Ab Windows 8 können Geräte in einen Funktionszustand mit geringer Leistung (Fx) übergehen, bevor sie in einen Dx-Zustand wechseln. Für solche Geräte initiiert das Framework die Leistungsabsenkung des Geräts oder der Komponente, nachdem das Gerät für einen vordefinierten (und festgelegten) Zeitraum im Leerlauf (nicht verwendet) wurde.

Einige dieser Geräte können auch ein Wecksignal auf dem Bus auslösen, wenn sie ein externes Ereignis erkennen. Der Bustreiber reagiert auf dieses Signal, und der Treiberstapel stellt den Betriebszustand des Geräts wieder her. (Geräte, die keine externen Ereignisse erkennen, befinden sich in einem Zustand mit geringer Leistung, bis das Framework den Bustreiber auffordern wird, die Wiederherstellung des Geräts in seinen Betriebszustand zu initiieren.)

Wenn Ihr Gerät oder Ihre Komponente im Leerlauf heruntergefahren werden kann, muss die Rückruffunktion EvtDriverDeviceAdd im Besitzer der Energierichtlinie die folgenden beiden Schritte ausführen:

  1. Rufen Sie WdfDeviceAssignS0IdleSettings auf , um Folgendes anzugeben:

    • Der Zustand mit geringer Leistung, in den das Gerät eintritt
    • Die Zeitspanne, die das Gerät im Leerlauf bleiben muss , bevor sein Energiezustand verringert wird
    • Ob das Gerät ein externes Ereignis erkennen und ein Wecksignal auf dem Bus auslösen kann
    • Ob Benutzer die Einstellungen im Leerlauf des Geräts steuern können
    • Gibt an, ob die Funktion zum Herunterschalten im Leerlauf des Geräts aktiviert oder deaktiviert ist.
    • Gibt an, ob das Gerät in den Betriebszustand (D0) zurückkehrt, wenn das System in den Betriebszustand (S0) zurückkehrt.
    • Ob der Leerlauftimeoutwert für das Gerät vom Power Management Framework (PoFx) bestimmt wird
    • Gibt an, ob das Framework das Gerät in den D3cold-Energiezustand versetzen kann, wenn das Leerlauftimeout abläuft.

    Weitere Informationen zu diesen Einstellungen finden Sie in der WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS-Struktur sowie unter Unterstützen von Funktionsenergiezuständen.

  2. Rufen Sie WdfDeviceInitSetPowerPolicyEventCallbacks auf, um die folgenden Ereignisrückruffunktionen zu registrieren, wenn Sie sie für Ihr Gerät benötigen:

    • EvtDeviceArmWakeFromS0, mit dem die Gerätehardware (nicht der Bus) auf ein externes Aktivierungsereignis reagieren kann
    • EvtDeviceDisarmWakeFromS0, das die Fähigkeit des Geräts (nicht die Fähigkeit des Busses) deaktiviert, auf ein externes Aktivierungsereignis zu reagieren
    • EvtDeviceWakeFromS0Triggered, das den Fahrer informiert, dass der Bus ein Wake-Signal erkannt hat.

Leerlaufbedingungen

Das Framework betrachtet das Gerät als Leerlauf und beginnt mit dem Zählen der Leerlaufzeit, wenn alle folgenden Bedingungen erfüllt sind:

  • Keine der für dieses Gerät erstellten stromverwalteten Warteschlangen instance Anforderungen enthalten, die in der Warteschlange warten oder an den Treiber gesendet werden. Wenn eine Anforderung an den Treiber gesendet und vom Treiber an ein E/A-Ziel gesendet wurde, ist die Anforderung weiterhin mit der Warteschlange verknüpft. Das Gerät wird nicht als Leerlauf betrachtet, es sei denn, der Treiber hat die Option senden und vergessen verwendet, um die Anforderung zu senden. Anforderungen in Nicht-Energie-verwalteten Warteschlangen werden nicht für den Leerlauf des Geräts gezählt.
  • Wenn der Treiber zuvor WdfDeviceStopIdle genannt hat, hat der Treiber anschließend WdfDeviceResumeIdle aufgerufen.
  • Wenn der Besitzer der Energierichtlinie ein Bustreiber ist, befindet sich keines der untergeordneten Geräte des Bustreibers in D0.

Wenn Ihr Treiber (oder ein Benutzer) das Herunterfahren im Leerlauf für Ihr Gerät aktiviert, müssen Sie möglicherweise die WdfDeviceStopIdle-Methode verwenden. Wenn sich das Gerät im Betriebszustand (D0) befindet, verhindert diese Methode, dass das Gerät im Leerlauf bleibt, bis der Treiber WdfDeviceResumeIdle aufruft. Wenn sich das Gerät in einem Energiesparzustand befindet, wenn der Treiber WdfDeviceStopIdle aufruft, und wenn sich das System in seinem Betriebszustand (S0) befindet, fordert das Framework den Bustreiber auf, das Gerät in seinen Betriebszustand (D0) wiederherzustellen. Jeder erfolgreiche Aufruf von WdfDeviceStopIdle muss durch einen Aufruf von WdfDeviceResumeIdle abgeglichen werden. Informationen zum Anzeigen der Energieverweisanzahl im Debugger finden Sie unter Debuggen von Energieverweisverlusten in WDF.

Weitere Informationen dazu, wann Ihr Treiber möglicherweise WdfDeviceStopIdle aufrufen muss, finden Sie auf der Referenzseite der Methode.

Wenn das Gerät sich selbst aus einem Zustand mit geringer Energieleistung reaktivieren kann, nimmt der Treiber für den Bus des Geräts an der Aktivierung des Geräts teil. Der Bustreiber bietet in der Regel Rückruffunktionen EvtDeviceEnableWakeAtBus und EvtDeviceDisableWakeAtBus . Diese Funktionen tun alles, was auf dem Busadapter erforderlich ist, um die Fähigkeit eines Geräts zu aktivieren und zu deaktivieren, aus einem Energiesparzustand zu reaktivieren.

Informationen zu Registrierungseinträgen, die die Leerlauffunktionen eines Geräts steuern, finden Sie unter Benutzersteuerung des Geräteleidle- und Aktivierungsverhaltens.