Leer en inglés

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 nuevos controladores UMDF deben escribirse mediante 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 a UMDF.]

El método StopIdle informa al marco de trabajo 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 TRUE, solo devuelve después de que el dispositivo especificado entre en el estado de alimentación del dispositivo D0. Si 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.
de HRESULT_FROM_NT(STATUS_POWER_STATE_INVALID)
Se produjo un error de 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.

Observaciones

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 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 podría 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 funcionamiento 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.

Llamar a StopIdle obliga al dispositivo a su estado de trabajo (D0), si el sistema está en su estado de trabajo (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 baja potencia si permanece inactivo.

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

Una llamada a stopIdle puede restaurar un dispositivo inactivo a su estado de trabajo solo si el sistema está en estado de trabajo (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 ResumeIdleo, de lo contrario, el dispositivo nunca volverá a un estado de baja potencia 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 compatibilidad con 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 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 Valor
fin del soporte técnico No disponible en UMDF 2.0 y versiones posteriores.
de la plataforma de destino de Escritorio
versión mínima de UMDF 1.9
encabezado de wudfddi.h (incluya Wudfddi.h)
DLL de WUDFx.dll

Consulte también

IWDFDevice2

IWDFDevice2::ResumeIdle