IWDFDevice2::AssignS0IdleSettings-Methode (wudfddi.h)
[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 in neueren Versionen von Windows 10 ist eingeschränkt. Universelle Windows-Treiber müssen UMDF 2 verwenden. Weitere Informationen finden Sie unter Erste Schritte mit UMDF.]
Die AssignS0IdleSettings-Methode stellt vom Treiber bereitgestellte Informationen bereit, die das Framework verwendet, wenn sich ein Gerät im Leerlauf befindet und sich das System im Arbeitszustand (S0) befindet.
Syntax
HRESULT AssignS0IdleSettings(
[in] WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps,
[in] DEVICE_POWER_STATE DxState,
[in] ULONG IdleTimeout,
[in] WDF_POWER_POLICY_S0_IDLE_USER_CONTROL UserControlOfIdleSettings,
[in] WDF_TRI_STATE Enabled
);
Parameter
[in] IdleCaps
Ein WDF_POWER_POLICY_S0_IDLE_CAPABILITIES typisierter Enumerator, der die Fähigkeit des Geräts angibt, sich selbst zu reaktivieren, nachdem es auf einen Low-Power-Zustand festgelegt wurde, während das System in seinem Arbeitszustand (S0) verbleibt.
[in] DxState
Ein DEVICE_POWER_STATE typisierter Enumerator, der den Zustand der geringen Geräteleistung identifiziert, den das Gerät nach Ablauf des Leerlauftimeouts erhält. DEVICE_POWER_STATE Werte werden in wdm.h definiert.
[in] IdleTimeout
Die Zeitspanne in Millisekunden, die das Gerät im Leerlauf verbleibt, bevor es vom Framework in den von DxState bereitgestellten Low-Power-Zustand versetzt wird. Um den Standardmäßigen Leerlauftimeoutwert des Frameworks zu verwenden, geben Sie IdleTimeoutDefaultValue an. Weitere Informationen finden Sie im Abschnitt Hinweise.
[in] UserControlOfIdleSettings
Ein WDF_POWER_POLICY_S0_IDLE_USER_CONTROL typisierter Enumerator, der angibt, ob Benutzer die Einstellungen im Leerlauf des Geräts ändern können.
[in] Enabled
Ein WDF_TRI_STATE typisierter Enumerator, der angibt, ob das Gerät ausgeschaltet wird, wenn es im Leerlauf bleibt und während die Systemleistung bei S0 liegt. Dieser Member kann einen der folgenden Werte aufweisen:
WdfTrue : Das Herunterschalten ist aktiviert.
WdfFalse : Das Herunterschalten ist deaktiviert.
WdfUseDefault : Das Herunterschalten ist zunächst standardmäßig aktiviert. Wenn der UserControlOfIdleSettings-Parameter jedoch auf IdleAllowUserControl festgelegt ist, überschreibt die Einstellung oder die INF-Datei des Treibers den Anfangswert.
Wenn das Herunterfahren aktiviert ist, das Gerät über eine Aktivierungsfunktion verfügt und der Wert für das Leerlauftimeout abläuft, ruft das Framework die Rückruffunktion IPowerPolicyCallbackWakeFromS0::OnArmWakeFromS0 des Treibers auf, bevor das Gerät in einen Energiesparzustand wechselt.
Rückgabewert
AssignS0IdleSettings gibt S_OK zurück, wenn der Vorgang erfolgreich ist. Andernfalls gibt die Methode möglicherweise einen der folgenden Werte zurück:
Rückgabecode | Beschreibung |
---|---|
|
Der Aufrufer hat einen ungültigen Wert für einen Eingabeparameter angegeben. |
|
Der aufrufende Treiber ist nicht der Besitzer der Energierichtlinie des Geräts. |
|
Der DxState-Parameter gibt einen ungültigen Gerätestromzustand an, oder der IdleCaps-Parameter gibt an, dass das Gerät selbst reaktiviert werden kann, aber der Bustreiber gibt an, dass das Gerät selbst nicht reaktiviert werden kann. |
Diese Methode gibt möglicherweise einen der anderen Werte zurück, die Winerror.h enthält.
Hinweise
Wenn ein Treiber zum ersten Mal AssignS0IdleSettings aufruft, werden die folgenden Aktionen ausgeführt:
- Das Framework speichert die Werte aller Parameter.
- Wenn der Parameter UserControlOfIdleSettings auf IdleAllowUserControl festgelegt ist und der Enabled-Parameter auf WdfUseDefault festgelegt ist, liest das Framework die Registrierung, um festzustellen, ob der Benutzer das Herunterschalten des Geräts aktiviert hat, wenn es sich im Leerlauf befindet.
- Wenn der Treiber in einem vorherigen Aufruf von AssignS0IdleSettings jemalsIdleCanWakeFromS0 für den Wert des IdleCaps-Parameters angegeben hat, kann er diesen Wert später nicht in IdleUsbSelectiveSuspend ändern.
- Wenn der Treiber in einem vorherigen Aufruf von AssignS0IdleSettings jemalsIdleUsbSelectiveSuspend für den Wert des IdleCaps-Parameters angegeben hat, kann dieser Wert später nicht in IdleCanWakeFromS0 geändert werden.
Die folgenden Regeln gelten für den Wert, den Sie für den DxState-Parameter angeben:
- Der Wert darf nicht PowerDeviceD0 sein.
- Bei USB-Geräten darf der Wert nicht PowerDeviceD0 oder PowerDeviceD3 sein.
- Wenn Sie DevicePowerMaximum angeben, verwendet das Framework den Wert, den der Kernelmodustreiber für den Gerätebus im DeviceWake-Member seiner WDF_DEVICE_POWER_CAPABILITIES-Struktur bereitgestellt hat.
- Wenn der Wert des IdleCaps-ParametersIdleCanWakeFromS0 oder IdleUsbSelectiveSuspend ist, können Sie keinen Geräteleistungszustand angeben, der niedriger als der Geräteleistungszustand im DeviceWake-Member der WDF_DEVICE_POWER_CAPABILITIES-Struktur des Kernelmodus-Bustreibers ist. (Anders ausgedrückt: Wenn der DeviceWake-Wert des Bustreibers PowerDeviceD2 ist, kann der DxState-Wert ihres Funktionstreibers nicht PowerDeviceD3 sein.)
Informationen zu Registrierungseinträgen, mit denen die Leerlauffunktionen eines Geräts gesteuert werden, finden Sie unter Benutzersteuerung des Geräte-Idle- und Aktivierungsverhaltens in UMDF.
Weitere Informationen zur Unterstützung der Leerlauffunktionen eines Geräts finden Sie unter Unterstützen von idle Power-Down in UMDF-basierten Treibern.
Beispiele
Das folgende Codebeispiel basiert auf der UMDF-Version des Toasterbeispiels. Im Beispiel wird die IWDFDevice2-Schnittstelle abgerufen und anschließend AssignS0IdleSettings aufgerufen.
IWDFDevice2 *pIWDFDevice2 = NULL;
HRESULT hr;
//
// Get a pointer to the IWDFDevice2 interface.
//
hr = pIWDFDevice->QueryInterface(__uuidof(IWDFDevice2),
(void**) &pIWDFDevice2);
if (SUCCEEDED(hr))
{
//
// The toaster device is virtual, so we tell the framework that the
// device cannot wake if it sleeps while the system is in S0. The device
// can return to D0 only when the driver stack receives an I/O request.
//
hr = pIWDFDevice2->AssignS0IdleSettings(IdleCannotWakeFromS0,
PowerDeviceD3,
IDLEWAKE_TIMEOUT_MSEC,
IdleAllowUserControl,
WdfTrue);
}
...
SAFE_RELEASE(pIWDFDevice2);
Anforderungen
Anforderung | Wert |
---|---|
Ende des Supports | In UMDF 2.0 und höher nicht verfügbar. |
Zielplattform | Desktop |
UMDF-Mindestversion | 1.9 |
Kopfzeile | wudfddi.h (include Wudfddi.h) |
DLL | WUDFx.dll |