Compartir a través de


Admitir Power-Down inactivos en controladores UMDF

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.

Los ejemplos de UMDF 1 archivados se pueden encontrar en la Windows 11, versión 22H2 : actualización de ejemplos de controladores de mayo de 2022.

Para obtener más información, consulta Introducción con UMDF.

Algunos dispositivos pueden entrar en estado de suspensión mientras el sistema permanece en su estado de funcionamiento. Para estos dispositivos, el marco inicia la reducción de la energía del dispositivo después de que el dispositivo haya estado inactivo (no usado) durante un período de tiempo predeterminado (y configurable).

Algunos de estos dispositivos también pueden desencadenar una señal de reactivación en el bus cuando detectan un evento externo. El controlador de autobús responde a esta señal y la pila del controlador restaura el dispositivo a su estado de trabajo. (Los dispositivos que no detectan eventos externos permanecen en un estado de bajo consumo hasta que el marco pida al controlador de bus que inicie la restauración del dispositivo a su estado de trabajo).

Si el dispositivo se puede apagar cuando está inactivo, el propietario de la directiva de energía debe realizar los dos pasos siguientes:

  1. Llame a IWDFDevice2::AssignS0IdleSettings o IWDFDevice3::AssignS0IdleSettingsEx para especificar:

    • Estado de baja energía que el dispositivo entrará
    • Cantidad de tiempo que el dispositivo debe permanecer inactivo antes de que se reduzca su estado de alimentación.
    • Si el dispositivo puede detectar un evento externo y desencadenar una señal de reactivación en el bus
    • Si los usuarios pueden controlar la configuración de inactividad del dispositivo
    • Si el marco puede colocar el dispositivo en el estado de alimentación D3cold cuando expira el período de tiempo de espera de inactividad

    Si el controlador se creó con la versión 1.11 o posterior del marco, puede llamar a IWDFDevice3::AssignS0IdleSettingsEx en lugar de IWDFDevice2::AssignS0IdleSettings. Además de la funcionalidad anterior, IWDFDevice3::AssignS0IdleSettingsEx permite al controlador especificar:

    • Si la funcionalidad de apagado inactivo del dispositivo está habilitada o deshabilitada
    • Si el dispositivo volverá a su estado de trabajo (D0) cuando el sistema vuelva a su estado de trabajo (S0)
  2. Implemente la interfaz IPowerPolicyCallbackWakeFromS0 y las siguientes funciones de devolución de llamada de eventos, si las necesita para el dispositivo:

El marco considera que el dispositivo está inactivo y comienza a contar el tiempo de inactividad, cuando se cumplen todas las condiciones siguientes:

  • Ninguna de las colas administradas por energía creadas para esta instancia de dispositivo tiene solicitudes en espera en cola o enviadas al controlador. Si una solicitud se envió al controlador y el controlador la envió a un destino de E/S, la solicitud sigue relacionada con la cola y el dispositivo no se considerará inactivo. Las solicitudes en colas no administradas sin energía no se cuentan para el dispositivo inactivo.
  • Si el controlador llamó anteriormente a IWDFDevice2::StopIdle, el controlador ha llamado posteriormente a IWDFDevice2::ResumeIdle.
  • Si el propietario de la directiva de energía es un controlador de autobús, ninguno de los dispositivos secundarios del controlador de autobús está en D0.

Si el controlador (o un usuario) habilita el apagado inactivo para el dispositivo, es posible que tenga que usar el método IWDFDevice2::StopIdle . Si el dispositivo está en estado de funcionamiento (D0), este método impide que el dispositivo se desenlaque hasta que el controlador llame a IWDFDevice2::ResumeIdle. Si el dispositivo está en un estado de bajo consumo cuando el controlador llama a IWDFDevice2::StopIdle y si el sistema está en su estado de trabajo (S0), el marco solicita al controlador de bus que restaure el dispositivo a su estado de trabajo (D0). Para obtener más información sobre cuándo es posible que el controlador tenga que llamar a IWDFDevice2::StopIdle, consulte la página de referencia del método.

Si el dispositivo se puede reactivar desde un estado de bajo consumo, el controlador del autobús del dispositivo participa en la reactivación del dispositivo. El controlador de bus en modo kernel hace lo que sea necesario en el adaptador de bus para habilitar y deshabilitar la capacidad de un dispositivo para reactivarse desde un estado de bajo consumo.

Para obtener información sobre las entradas del Registro que controlan las funcionalidades inactivas de un dispositivo, consulte Control de usuario del comportamiento de inactividad y reactivación del dispositivo en UMDF.