Controlar un IRP del sistema Set-Power en un propietario de la directiva de energía de dispositivo

En respuesta a un IRP de configuración del sistema, el propietario de la directiva de energía para una pila de dispositivos es responsable de colocar su pila de dispositivos en un estado de alimentación del dispositivo adecuado.

Como regla general, cuando un propietario de la directiva de energía del dispositivo recibe un IRP_MN_SET_POWER para un estado de alimentación del sistema, debe responder pasando el IRP de energía establecida por el sistema a la pila del dispositivo. Un propietario de la directiva de energía del dispositivo también debe responder enviando la pila de dispositivos IRP_MN_SET_POWER para un estado de alimentación del dispositivo correspondiente en una rutina de IoCompletion . Después de que todos los controladores de la pila hayan completado el IRP del conjunto de dispositivos, el propietario de la directiva de energía del dispositivo completa el IRP de configuración del sistema.

Sin embargo, para mejorar el rendimiento del sistema, los propietarios de energía de los dispositivos que no tienen dispositivos secundarios deben usar un enfoque diferente para reducir el tiempo que tarda un sistema en volver al estado de trabajo S0 desde un estado de suspensión. En este caso, en respuesta a un IRP de configuración del sistema que devuelve un sistema al estado de funcionamiento S0, los propietarios de directivas de energía del dispositivo deben realizar la siguiente secuencia de operaciones:

  1. Después de recibir una IRP_MN_SET_POWER IRP para el estado de alimentación del sistema S0 en la rutina DispatchPower del controlador, establezca una rutina de IoCompletion para el IRP y pase el IRP por la pila.

  2. En la rutina ioCompletion establecida en el paso (1), solicite un irP de IRP_MN_SET_POWER para el estado de alimentación del dispositivo correspondiente y, a continuación, complete inmediatamente el IRP de configuración del sistema. El controlador no debe esperar a que los IRP del conjunto de dispositivos se completen antes de completar el IRP de configuración del sistema. La rutina IoCompletion se ejecuta después de que todos los controladores de nivel inferior hayan completado el IRP de energía establecida por el sistema y el IRP de configuración del sistema se devuelve al objeto de dispositivo funcional (FDO) del controlador.

  3. Realice cualquier inicialización específica del dispositivo necesaria.

  4. Complete el IRP del conjunto de dispositivos que se envió en el paso (2).

  5. Procesa las solicitudes de E/S en cola cuando el dispositivo estaba en estado de suspensión del dispositivo.

El administrador de energía del kernel tiene un conjunto limitado de colas de distribución irP y debe notificar rápidamente a todos los dispositivos del sistema de retorno al estado de trabajo del sistema S0. Los controladores que no completan el IRP de configuración del sistema lo antes posible impiden que otros dispositivos obtengan su IRP de energía establecida por el sistema, lo que puede afectar negativamente al rendimiento general del sistema durante las transiciones de estado de energía del sistema.

Para obtener más información sobre cómo controlar los IRP de configuración del sistema de energía, consulte lo siguiente:

Determinar el estado correcto de energía del dispositivo

Enviar un IRP de Set-Power de dispositivo en respuesta a un IRP del sistema Set-Power IRP