Compartir a través de


Rutinas de IoCompletion para IRP de power de dispositivo

Una vez que el controlador de autobús completa el IRP, el administrador de E/S llama a las rutinas de IoCompletion registradas por controladores de nivel superior a medida que pasan el IRP por la pila.

Cada vez que un dispositivo entra en el estado D0, cada uno de sus controladores debe establecer una rutina de IoCompletion que realice la mayoría de las tareas necesarias para devolverla al estado de trabajo. Los controladores deben establecer una rutina de IoCompletion para cualquier transición al estado D0, ya sea que el dispositivo vuelva de un estado de suspensión o escriba D0 en el inicio del sistema. En la ilustración siguiente se muestran las tareas que debe realizar una rutina de IoCompletion .

diagrama que ilustra la rutina de iocompletion de encendido del dispositivo.

Estas tareas incluyen:

  • Restaurar el estado de alimentación del dispositivo o reinicializar el dispositivo, según sea necesario, y prepararse para controlar cualquier E/S en cola por controladores mientras el dispositivo no estaba en estado de trabajo

  • Llamar a PoSetPowerState para notificar al administrador de energía que el dispositivo está en estado de alimentación D0.

  • Llamando a PoStartNextPowerIrp para recibir el siguiente IRP de alimentación, si el controlador no envió originalmente el IRP de alimentación actual. (Solo Windows Server 2003, Windows XP y Windows 2000).

  • Liberar memoria asignada para el contexto del dispositivo.

  • Llamar a IoReleaseRemoveLock para liberar el bloqueo que el controlador adquirió en su rutina DispatchPower cuando recibió el IRP.

  • Devolver STATUS_SUCCESS.

El controlador de autobús no enciende el dispositivo hasta que los controladores o superiores deben comunicarse con el dispositivo.

Cuando su dispositivo entra en estado de suspensión, un controlador debe establecer una rutina de IoCompletion que llame a PoStartNextPowerIrp (Windows Server 2003, Windows XP y Windows 2000) y libere el bloqueo de eliminación. Recuerde que un controlador no puede acceder a su dispositivo mientras el dispositivo está en estado de suspensión.