Metodo IWDFDevice2::AssignS0IdleSettings (wudfddi.h)

[Avviso: UMDF 2 è la versione più recente di UMDF e sostituisce UMDF 1. Tutti i nuovi driver UMDF devono essere scritti usando UMDF 2. Non vengono aggiunte nuove funzionalità a UMDF 1 ed è disponibile un supporto limitato per UMDF 1 nelle versioni più recenti di Windows 10. I driver di Windows universali devono usare UMDF 2. Per altre info, vedi Introduzione con UMDF.]

Il metodo AssignS0IdleSettings fornisce informazioni fornite dal driver usate dal framework quando un dispositivo è inattiva e il sistema si trova nello stato di funzionamento (S0).

Sintassi

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
);

Parametri

[in] IdleCaps

Enumeratore tipizzato WDF_POWER_POLICY_S0_IDLE_CAPABILITIES che identifica la capacità del dispositivo di riattivarsi dopo che è impostato su uno stato a basso consumo, mentre il sistema rimane nello stato di funzionamento (S0).

[in] DxState

Enumeratore tipizzato DEVICE_POWER_STATE che identifica lo stato di alimentazione del dispositivo basso che il dispositivo verrà immesso al termine del periodo di timeout di inattività. DEVICE_POWER_STATE valori sono definiti in wdm.h.

[in] IdleTimeout

La quantità di tempo, in millisecondi, che il dispositivo rimarrà inattiva prima che il framework lo inserisca nello stato a basso consumo fornito da DxState. Per usare il valore di timeout di inattività predefinito del framework, specificare IdleTimeoutDefaultValue Per altre informazioni, vedere la sezione Osservazioni.

[in] UserControlOfIdleSettings

Enumeratore tipizzato WDF_POWER_POLICY_S0_IDLE_USER_CONTROL che indica se gli utenti hanno la possibilità di modificare le impostazioni di inattività del dispositivo.

[in] Enabled

Enumeratore tipizzato WDF_TRI_STATE che indica se il dispositivo verrà spento se rimane inattivo e mentre l'alimentazione del sistema è in corrispondenza di S0. Questo membro può avere uno dei valori seguenti:

WdfTrue : l'accensione è abilitata.

WdfFalse : l'accensione inattiva è disabilitata.

WdfUseDefault : l'accensione è inizialmente abilitata per impostazione predefinita; ma se il parametro UserControlOfIdleSettings è impostato su IdleAllowUserControl, l'impostazione dell'utente o il file INF del driver esegue l'override del valore iniziale.

Se l'accensione è abilitata, il dispositivo ha una funzionalità di riattivazione e il valore di timeout di inattività scade, il framework chiama la funzione di callback IPowerPolicyCallbackWakeFromS0::OnArmWakeFromS0 prima che il dispositivo entri in uno stato a basso consumo.

Valore restituito

AssignS0IdleSettings restituisce S_OK se l'operazione ha esito positivo. In caso contrario, il metodo potrebbe restituire uno dei valori seguenti:

Codice restituito Descrizione
E_INVALIDARG
Il chiamante ha specificato un valore non valido per un parametro di input.
HRESULT_FROM_NT(STATUS_INVALID_DEVICE_REQUEST)
Il driver chiamante non è il proprietario dei criteri di alimentazione del dispositivo.
HRESULT_FROM_NT(STATUS_POWER_STATE_INVALID)
Il parametro DxState specifica uno stato di alimentazione del dispositivo non valido o il parametro IdleCaps indica che il dispositivo può riattivarsi, ma il driver del bus indica che il dispositivo non può riattivarsi.
 

Questo metodo potrebbe restituire uno degli altri valori contenuti da Winerror.h.

Commenti

La prima volta che un driver chiama AssignS0IdleSettings, si verificano le azioni seguenti:

  • Il framework archivia i valori di tutti i parametri.
  • Se il parametro UserControlOfIdleSettings è impostato su IdleAllowUserControl e se il parametro Enabled è impostato su WdfUseDefault, il framework legge il Registro di sistema per scoprire se l'utente ha abilitato l'accensione del dispositivo quando è inattivo.
Durante le chiamate successive a AssignS0IdleSettings, il framework archivia solo i valori dei parametri DxState, IdleTimeout e Enabled . Inoltre, il framework archivia il valore del parametro IdleCaps soggetto alle regole seguenti:
  • Se il driver ha mai specificato IdleCanWakeFromS0 per il valore del parametro IdleCaps in una chiamata precedente a AssignS0IdleSettings, non può successivamente modificare tale valore in IdleUsbSelectiveSuspend.
  • Se il driver ha mai specificato IdleUsbSelectiveSuspend per il valore del parametro IdleCaps in una chiamata precedente a AssignS0IdleSettings, non può successivamente modificare tale valore in IdleCanWakeFromS0.

Le regole seguenti si applicano al valore specificato per il parametro DxState :

  • Il valore non può essere PowerDeviceD0.
  • Per i dispositivi USB, il valore non può essere PowerDeviceD0 o PowerDeviceD3.
  • Se si specifica DevicePowerMaximum, il framework usa il valore fornito dal driver in modalità kernel per il bus del dispositivo nel membro DeviceWake della relativa struttura WDF_DEVICE_POWER_CAPABILITIES .
  • Se il valore del parametro IdleCaps è IdleCanWakeFromS0 o IdleUsbSelectiveSuspend, non è possibile specificare uno stato di alimentazione del dispositivo inferiore allo stato di alimentazione del dispositivo nel membro DeviceWake della struttura del driver del bus in modalità kernel WDF_DEVICE_POWER_CAPABILITIES. In altre parole, se il valore DeviceWake del driver del bus è PowerDeviceD2, il valore DxState del driver di funzione non può essere PowerDeviceD3.
Se si specifica IdleTimeoutDefaultValue per il parametro IdleTimeout , il timeout predefinito è cinque secondi. È possibile esaminare l'output dalle estensioni del debugger !wudfext.wudfdevice e !wudfext.umdevstacks per visualizzare le impostazioni effettive e i riferimenti di risparmio energia.

Per informazioni sulle voci del Registro di sistema che controllano le funzionalità inattive di un dispositivo, vedere Controllo utente del comportamento di inattività e riattivazione del dispositivo in UMDF.

Per altre informazioni sul supporto delle funzionalità inattive di un dispositivo, vedere Supporto delle Power-Down inattive nei driver basati su UMDF.

Esempio

L'esempio di codice seguente si basa sulla versione UMDF dell'esempio di tostapane. L'esempio ottiene l'interfaccia IWDFDevice2 e quindi chiama AssignS0IdleSettings.

    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);

Requisiti

Requisito Valore
Fine del supporto Non disponibile in UMDF 2.0 e versioni successive.
Piattaforma di destinazione Desktop
Versione UMDF minima 1,9
Intestazione wudfddi.h (include Wudfddi.h)
DLL WUDFx.dll

Vedi anche

IWDFDevice2

IWDFDevice2::AssignSxWakeSettings

IWDFDevice3::AssignS0IdleSettingsEx