Condividi tramite


Funzione WdfDeviceAssignS0IdleSettings (wdfdevice.h)

[Si applica a KMDF e UMDF]

Il metodo WdfDeviceAssignS0IdleSettings fornisce informazioni fornite dal driver che il framework usa quando un dispositivo è inattiva e il sistema si trova nello stato di lavoro (S0).

Sintassi

NTSTATUS WdfDeviceAssignS0IdleSettings(
  [in] WDFDEVICE                              Device,
  [in] PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
);

Parametri

[in] Device

Handle per un oggetto dispositivo framework.

[in] Settings

Puntatore a una struttura di WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS fornita dal chiamante.

Valore restituito

Se l'operazione ha esito positivo, WdfDeviceAssignS0IdleSettings restituisce STATUS_SUCCESS. I valori restituiti aggiuntivi includono:

Codice restituito Descrizione
STATUS_INVALID_DEVICE_REQUEST
Il driver chiamante non è il proprietario del criterio di alimentazione del dispositivo.
STATUS_INVALID_PARAMETER
Viene rilevato un valore Impostazioni non valido.
STATUS_INFO_LENGTH_MISMATCH
Le dimensioni della struttura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS non sono corrette.
STATUS_POWER_STATE_INVALID
Questo valore viene restituito se si verifica una delle operazioni seguenti:
  • La struttura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS contiene uno stato di alimentazione del dispositivo non valido.
  • Il membro IdleCaps della struttura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS indica che il dispositivo può riattivarsi, ma il driver del bus indica che il dispositivo non può riattivarsi.
  • A partire da KMDF versione 1.11 in esecuzione in Windows 8, il framework verifica se il firmware del sistema può gestire un segnale di riattivazione mentre il sistema si trova completamente sullo stato di alimentazione (S0). Se il computer ha esito negativo, WdfDeviceAssignS0IdleSettings restituisce STATUS_POWER_STATE_INVALID e il dispositivo rimane completamente attivo (D0), purché il sistema rimanga in S0.

    In questo caso, il driver non deve restituire un valore di stato di errore da EvtDriverDeviceAdd o qualsiasi altro callback di runtime. Al massimo, il driver potrebbe registrare un errore che indica che il dispositivo utilizzerà più energia di quanto normalmente sarebbe.

 

Il metodo potrebbe restituire altri valori NTSTATUS.

Un controllo di bug si verifica se il driver fornisce un handle di oggetti non valido.

Commenti

Se il driver imposta il membro IdleTimeoutType di WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS su SystemManagedIdleTimeout o SystemManagedIdleTimeoutWithHint, deve chiamare WdfDeviceAssignS0IdleSettings prima di restituire da EvtDeviceD0Entry. In genere, un driver chiama prima WdfDeviceAssignS0IdleSettings da EvtDriverDeviceAdd.

È possibile effettuare chiamate aggiuntive a WdfDeviceAssignS0IdleSettings in qualsiasi momento. Tuttavia, dopo che il driver imposta il valore del membro IdleTimeoutType nella prima chiamata a WdfDeviceAssignS0IdleSettings, non deve modificare questo valore nelle chiamate successive a questo metodo.

Se il driver registra le notifiche asincrone in EvtDriverDeviceAdd (ad esempio chiamando PoRegisterPowerSettingCallback o IoRegisterPlugPlayNotification), il driver non deve successivamente chiamare WdfDeviceAssignS0IdleSettings dall'interno della routine di callback del driver registrata.

Per altre informazioni, vedere Supporto dell'alimentazione inattiva.

Esempio

L'esempio di codice seguente inizializza una struttura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , imposta un valore di timeout inattiva di 10 secondi e chiama WdfDeviceAssignS0IdleSettings.

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS  idleSettings;
NTSTATUS  status = STATUS_SUCCESS;

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(
                                           &idleSettings,
                                           IdleCanWakeFromS0
                                           );
idleSettings.IdleTimeout = 10000;

status = WdfDeviceAssignS0IdleSettings(
                                       device,
                                       &idleSettings
                                       );
if (!NT_SUCCESS(status)) {
    return status;
}

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1.0
Versione UMDF minima 2,0
Intestazione wdfdevice.h (includere Wdf.h)
Libreria Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
Regole di conformità DDI DriverCreate(kmdf), FDOPowerPolicyOwnerAPI(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NonFDONotPowerPolicyOwnerAPI(kmdf)

Vedi anche

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS

WdfDeviceAssignSxWakeSettings