Condividi tramite


Metodo IWDFDevice2::StopIdle (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. Nessuna nuova funzionalità viene aggiunta 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 informazioni, vedere Introduzione con UMDF.]

Il metodo StopIdle informa il framework che il dispositivo deve essere inserito nello stato di alimentazione funzionante (D0).

Sintassi

HRESULT StopIdle(
  [in] BOOL WaitForD0
);

Parametri

[in] WaitForD0

Valore booleano che indica quando StopIdle restituirà. Se TRUE, restituisce solo dopo che il dispositivo specificato entra nello stato di alimentazione del dispositivo D0. Se FALSE, il metodo restituisce immediatamente.

Valore restituito

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

Codice restituito Descrizione
HRESULT_FROM_NT(STATUS_INVALID_DEVICE_REQUEST)
Il driver chiamante non è il proprietario del criterio di alimentazione del dispositivo.
HRESULT_FROM_NT(STATUS_PENDING)
Il dispositivo è già stato restituito al relativo stato di lavoro.
HRESULT_FROM_NT(STATUS_POWER_STATE_INVALID)
Si è verificato un errore del dispositivo e il dispositivo non può immettere lo stato di alimentazione D0.
 

Questo metodo potrebbe restituire uno degli altri valori che Winerror.h contiene.

Commenti

Se il dispositivo può immettere uno stato di bassa potenza quando diventa inattivo, il driver potrebbe dover chiamare occasionalmente StopIdle per ripristinare lo stato di lavoro (D0) del dispositivo o per impedire l'immissione di uno stato a bassa potenza.

Il driver non deve chiamare StopIdle quando un dispositivo è inattivo e il framework inserisce una richiesta di I/O nella coda di I/O del dispositivo. Inoltre, il driver non deve chiamare StopIdle quando un dispositivo è inattivo e rileva un segnale di riattivazione. In entrambi questi casi, il framework richiede al driver del bus di ripristinare lo stato di alimentazione del dispositivo su D0.

Anche se i driver in genere non devono chiamare StopIdle durante la gestione delle richieste di I/O ottenute da una coda di I/O gestita dall'alimentazione, la chiamata è consentita. Tuttavia, i driver non devono impostare il parametro WaitForD0 su TRUE durante la gestione delle richieste di I/O da una coda di I/O gestita da energia.

Il driver deve chiamare StopIdle se deve accedere al dispositivo a causa di una richiesta ricevuta dal driver all'esterno di una coda di I/O gestita dall'alimentazione. Ad esempio, il driver potrebbe supportare un'interfaccia definita dal driver o una richiesta WMI che richiede l'accesso al dispositivo. In questo caso, è necessario assicurarsi che il dispositivo si trovi nello stato di lavoro prima che il driver acceda al dispositivo e che il dispositivo rimanga nello stato di lavoro fino al termine dell'accesso al dispositivo.

La chiamata a StopIdle forza il dispositivo nello stato di lavoro (D0), se il sistema è nello stato di lavoro (S0). Il dispositivo rimane nello stato di lavoro fino a quando il driver chiama IWDFDevice2::ResumeIdle, a quel punto il framework può posizionare il dispositivo in uno stato di bassa potenza se rimane inattivo.

Non chiamare StopIdle prima che il framework abbia chiamato il metodo IPnpCallback::OnD0Entry callback per la prima volta.

Una chiamata a StopIdle può ripristinare lo stato di funzionamento di un dispositivo inattivo solo se il sistema si trova nello stato di lavoro (S0). Se il sistema immette uno stato di bassa potenza quando un driver chiama StopIdle con il parametro WaitForD0 impostato su TRUE, la funzione non restituisce fino a quando il sistema non restituisce lo stato S0.

Ogni chiamata a StopIdle deve infine essere seguita da una chiamata a ResumeIdle oppure il dispositivo non restituirà mai uno stato a bassa potenza se diventa di nuovo inattivo. Le chiamate a StopIdle possono essere annidate, quindi il numero di chiamate a ResumeIdle deve essere uguale al numero di chiamate a StopIdle.

Per altre informazioni su StopIdle e ResumeIdle, vedere Supporto dell'idle Power-Down nei driver basati su UMDF.

Esempio

L'esempio di codice seguente ottiene l'interfaccia IWDFDevice2 e quindi chiama StopIdle. StopIdle restituirà dopo che il dispositivo entra nello stato di alimentazione del dispositivo D0.

    IWDFDevice2 *pIWDFDevice2 = NULL;
    HRESULT hr;

    //
    // Get a pointer to the IWDFDevice2 interface.
    //
    hr = pIWDFDevice->QueryInterface(__uuidof(IWDFDevice2),
                                     (void**) &pIWDFDevice2);
    if (SUCCEEDED(hr)) 
    {
        hr = pIWDFDevice2->StopIdle(TRUE);
    }
...
   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::ResumeIdle