Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cuando un controlador solicita un IRP de espera/reactivación, debe especificar una rutina de devolución de llamada para que pueda devolver el dispositivo al estado de trabajo (D0) cuando se produce el evento de reactivación. Después de que se produzca el evento de reactivación y todos los controladores hayan completado el IRP, el sistema llama a la rutina de devolución de llamada pasada a PoRequestPowerIrp.
Dado que esta rutina de devolución de llamada es configurada por el controlador que originó el IRP—y no por un controlador que gestiona el IRP—no debe llamar a PoStartNextPowerIrp; solo las rutinas de IoCompletion que establecen los controladores al pasar el IRP hacia abajo en la pila deben iniciar el siguiente IRP de energía. Tenga en cuenta que el propietario de la política no solo envía el IRP, sino que lo maneja y, por lo tanto, podría establecer una rutina IoCompletion a medida que pasa el IRP en la pila, además de establecer una rutina de devolución de llamada cuando solicita el IRP de espera/reactivación.
La rutina de devolución de llamada tiene las siguientes responsabilidades:
Si el controlador controla más de un dispositivo, determine cuál de sus dispositivos ha señalado la reactivación.
Procesar el evento que provocó la señal de reactivación.
Establezca el dispositivo que indicó la activación en el estado D0 llamando a PoRequestPowerIrp para enviar una solicitud PowerDeviceD0. El controlador también debe llamar a PoSetPowerState para informar al administrador de energía del nuevo estado de alimentación del dispositivo. Para obtener más información, consulte Enviar IRP_MN_QUERY_POWER o IRP_MN_SET_POWER para los estados de energía del dispositivo.
Si el controlador establece una rutina Cancel para IRP, llame a IoSetCancelRoutine para restablecer la rutina Cancelar a NULL.
Si el controlador gestiona la política de alimentación para más de un dispositivo, disminuya su conteo de referencias de espera/reactivación. Si el recuento es distinto de cero, lo que indica que otro dispositivo había enviado previamente un IRP de espera/reactivación, solicite otro IRP de espera/reactivación (PoRequestPowerIrp) para su PDO.
Por ejemplo, un dispositivo PCI podría tener habilitada la espera o reactivación para un módem y una tarjeta de interfaz de red (NIC). Si la NIC reactiva el sistema (y, por lo tanto, completa el IRP), el FDO PCI debe enviarse a sí mismo otro IRP de espera/reactivación para que el módem pueda seguir siendo capaz de activar el sistema.
Dado que el controlador que solicitó el IRP de suspensión/reactivación controla la política de energía para su pila de dispositivos, es responsable de devolver su dispositivo al estado de funcionamiento cuando se complete el IRP. Aunque es posible que los controladores más bajos ya hayan aplicado energía físicamente al dispositivo, el propietario de la directiva debe llamar a PoRequestPowerIrp para enviar una solicitud de IRP_MN_SET_POWER para el estado de energía del dispositivo D0. Solo después de que todos los controladores de la pila de dispositivos hayan controlado este IRP de encendido, el dispositivo se devolverá al estado operativo.