Unterstützung von Leerlauf-Power-Down in UMDF-Treibern
Warnung
UMDF 2 ist die neueste Version von UMDF und ersetzt UMDF 1. Alle neuen UMDF-Treiber sollten mit UMDF 2 geschrieben werden. UMDF 1 werden keine neuen Features hinzugefügt, und die Unterstützung für UMDF 1 für neuere Versionen von Windows 10 ist eingeschränkt. Universelle Windows-Treiber müssen UMDF 2 verwenden.
Die archivierten UMDF 1-Beispiele finden Sie im Windows 11, Version 22H2 – Mai 2022 Treiberbeispiele Update.
Weitere Informationen finden Sie unter Erste Schritte mit UMDF.
Einige Geräte können in einen Ruhezustand versetzt werden, während das System im Betriebszustand bleibt. Für solche Geräte initiiert das Framework die Senkung der Leistung des Geräts, 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 im Leerlauf heruntergefahren werden kann, muss der Besitzer der Energierichtlinie die folgenden beiden Schritte ausführen:
Rufen Sie IWDFDevice2::AssignS0IdleSettings oder IWDFDevice3::AssignS0IdleSettingsEx 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 das Framework das Gerät in den D3cold-Energiezustand versetzen kann, wenn das Leerlauftimeout abläuft.
Wenn Ihr Treiber mit Version 1.11 oder höher des Frameworks erstellt wurde, können Sie IWDFDevice3::AssignS0IdleSettingsEx anstelle von IWDFDevice2::AssignS0IdleSettings aufrufen. Zusätzlich zur oben genannten Funktionalität ermöglicht IWDFDevice3::AssignS0IdleSettingsEx dem Treiber folgendes anzugeben:
- 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.
Implementieren Sie die IPowerPolicyCallbackWakeFromS0-Schnittstelle und die folgenden Ereignisrückruffunktionen, wenn Sie sie für Ihr Gerät benötigen:
- IPowerPolicyCallbackWakeFromS0::OnArmWakeFromS0, wodurch die Gerätehardware (nicht der Bus) auf ein externes Aktivierungsereignis reagieren kann.
- IPowerPolicyCallbackWakeFromS0::OnDisarmWakeFromS0, wodurch die Fähigkeit des Geräts (nicht die Fähigkeit des Busses) deaktiviert wird, auf ein externes Aktivierungsereignis zu reagieren.
- IPowerPolicyCallbackWakeFromS0::OnWakeFromS0Triggered, das den Fahrer informiert, dass der Bus ein Aktivierungssignal erkannt hat.
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 wurde und der Treiber sie an ein E/A-Ziel gesendet hat, ist die Anforderung weiterhin mit der Warteschlange verknüpft, und das Gerät wird nicht als Leerlauf betrachtet. Anforderungen in Warteschlangen ohne Energieverwaltung werden nicht in den Leerlauf des Geräts gezählt.
- Wenn der Treiber zuvor IWDFDevice2::StopIdle genannt hat, hat der Treiber anschließend IWDFDevice2::ResumeIdle 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) den Leerlauf für Ihr Gerät aktiviert, müssen Sie möglicherweise die IWDFDevice2::StopIdle-Methode verwenden. Wenn sich das Gerät im Betriebszustand (D0) befindet, verhindert diese Methode den Leerlauf des Geräts, bis der Treiber IWDFDevice2::ResumeIdle aufruft. Wenn sich das Gerät in einem Zustand mit geringer Leistung befindet, wenn der Treiber IWDFDevice2::StopIdle 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. Weitere Informationen dazu, wann Ihr Treiber möglicherweise IWDFDevice2::StopIdle 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 Kernelmodus-Bustreiber tut alles, was auf dem Busadapter erforderlich ist, um die Fähigkeit eines Geräts zu aktivieren und zu deaktivieren, aus einem Zustand mit geringer Leistung zu reaktivieren.
Informationen zu Registrierungseinträgen, die die Leerlauffunktionen eines Geräts steuern, finden Sie unter Benutzersteuerung des Geräte-Leerlauf- und Aktivierungsverhaltens in UMDF.