Llamar a IoCallDriver frente a Llamar a PoCallDriver
A partir de Windows Vista, un controlador debe llamar a IoCallDriver en lugar de PoCallDriver, para pasar IRP de energía al controlador inferior siguiente. En Windows Server 2003, Windows XP y Windows 2000, un controlador debe llamar a PoCallDriver, no IoCallDriver, para pasar IRP de energía al controlador inferior siguiente. Sin embargo, tenga en cuenta que los controladores que usan el mismo código para ejecutarse en Windows Vista y en versiones anteriores de Windows, deben llamar a PoCallDriver, no IoCallDriver.
A partir de Windows Vista, PoRequestPowerIrp e IoCallDriver garantizan que el administrador de energía sincronice correctamente los IRP de energía en todo el sistema. En Windows Server 2003, Windows XP y Windows 2000, PoRequestPowerIrp, PoCallDriver y PoStartNextPowerIrp, asegúrese de que el administrador de energía sincroniza correctamente los IRP de energía en todo el sistema.
El sistema limita el número de IRP de energía activa de la siguiente manera:
No más de un IRP de alimentación del sistema (IRP_MN_SET_POWER, IRP_MN_QUERY_POWER) puede estar activo para cada objeto de dispositivo físico (PDO) en un momento dado.
No se puede activar más de un IRP (IRP_MN_SET_POWER) para cada PDO en un momento dado.
No más de un IRP de alimentación de dispositivo que requiere un pincel de energía puede estar activo en cualquier lugar del sistema en cualquier momento dado.
Para asegurarse de que dos dispositivos de entrada no intenten encenderse simultáneamente, el administrador de energía realiza un seguimiento de los IRP de alimentación de entrada activas en todo el sistema y permite que solo uno esté activo a la vez. Un IRP de entrada adicional no se puede iniciar hasta que se haya completado el IRP de entrada activo.
Debido a estas restricciones en los IRP de entrada, un IRP de alimentación del dispositivo podría bloquearse mientras se completa un IRP de entrada para otro dispositivo. Los escritores de controladores deben tener en cuenta este comportamiento durante la depuración.