Compartir a través de


Método IWDFDevice2::StopIdle (wudfddi.h)

[Advertencia: UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los controladores UMDF nuevos deben escribirse con UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2. Para obtener más información, consulta Introducción con UMDF.

El método StopIdle informa al marco de trabajo de que el dispositivo debe colocarse en su estado de alimentación en funcionamiento (D0).

Sintaxis

HRESULT StopIdle(
  [in] BOOL WaitForD0
);

Parámetros

[in] WaitForD0

Valor booleano que indica cuándo se devolverá StopIdle . Si es TRUE, devuelve solo después de que el dispositivo especificado entre en el estado de alimentación del dispositivo D0. Si es FALSE, el método devuelve inmediatamente.

Valor devuelto

StopIdle devuelve S_OK si la operación se realiza correctamente. De lo contrario, el método podría devolver uno de los siguientes valores:

Código devuelto Descripción
HRESULT_FROM_NT(STATUS_INVALID_DEVICE_REQUEST)
El controlador de llamada no es el propietario de la directiva de energía del dispositivo.
HRESULT_FROM_NT(STATUS_PENDING)
El dispositivo ya volvía a su estado de trabajo.
HRESULT_FROM_NT(STATUS_POWER_STATE_INVALID)
Se produjo un error en el dispositivo y el dispositivo no puede entrar en su estado de alimentación D0.
 

Este método podría devolver uno de los otros valores que contiene Winerror.h.

Comentarios

Si el dispositivo puede entrar en un estado de bajo consumo cuando está inactivo, es posible que el controlador tenga que llamar ocasionalmente a StopIdle para devolver el dispositivo a su estado de funcionamiento (D0) o para evitar que entre en un estado de bajo consumo.

El controlador no tiene que llamar a StopIdle cuando un dispositivo está inactivo y el marco coloca una solicitud de E/S en la cola de E/S administrada por energía del dispositivo. Además, el controlador no tiene que llamar a StopIdle cuando un dispositivo está inactivo y detecta una señal de reactivación. En ambos casos, el marco solicita al controlador de bus que restaure el estado de alimentación del dispositivo en D0.

Aunque los controladores normalmente no necesitan llamar a StopIdle al controlar las solicitudes de E/S que obtienen de una cola de E/S administrada por energía, se permite la llamada. Sin embargo, los controladores no deben establecer el parámetro WaitForD0 en TRUE al controlar las solicitudes de E/S desde una cola de E/S administrada por energía.

El controlador tiene que llamar a StopIdle si debe acceder al dispositivo debido a una solicitud que el controlador ha recibido fuera de una cola de E/S administrada por energía. Por ejemplo, el controlador puede admitir una interfaz definida por el controlador o una solicitud WMI que requiera acceder al dispositivo. En este caso, debe asegurarse de que el dispositivo está en su estado de trabajo antes de que el controlador acceda al dispositivo y que el dispositivo permanezca en su estado de trabajo hasta que el controlador haya terminado de acceder al dispositivo.

La llamada a StopIdle obliga al dispositivo a que funcione (D0), si el sistema está en su estado de funcionamiento (S0). El dispositivo permanece en su estado de trabajo hasta que el controlador llama a IWDFDevice2::ResumeIdle, momento en el que el marco puede colocar el dispositivo en un estado de bajo consumo si permanece inactivo.

No llame a StopIdle antes de que el marco haya llamado al método de devolución de llamada IPnpCallback::OnD0Entry del controlador por primera vez.

Una llamada a StopIdle puede restaurar un dispositivo inactivo a su estado de funcionamiento solo si el sistema está en estado de funcionamiento (S0). Si el sistema entra en un estado de baja potencia cuando un controlador llama a StopIdle con el parámetro WaitForD0 establecido en TRUE, la función no devuelve hasta que el sistema vuelve a su estado S0.

Cada llamada a StopIdle debe ir seguida de una llamada a ResumeIdle o, de lo contrario, el dispositivo nunca volverá a un estado de bajo consumo si vuelve a estar inactivo. Las llamadas a StopIdle se pueden anidar, por lo que el número de llamadas a ResumeIdle debe ser igual al número de llamadas a StopIdle.

Para obtener más información sobre StopIdle y ResumeIdle, vea Admitir Power-Down inactivos en controladores basados en UMDF.

Ejemplos

En el ejemplo de código siguiente se obtiene la interfaz IWDFDevice2 y, a continuación, se llama a StopIdle. StopIdle se devolverá después de que el dispositivo entre en el estado de alimentación 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);

Requisitos

Requisito Value
Finalización del soporte técnico No disponible en UMDF 2.0 y versiones posteriores.
Plataforma de destino Escritorio
Versión mínima de UMDF 1,9
Encabezado wudfddi.h (incluya Wudfddi.h)
Archivo DLL WUDFx.dll

Consulte también

IWDFDevice2

IWDFDevice2::ResumeIdle