Compartilhar via


Rotinas de IoCompletion para IRPs de energia do dispositivo

Depois que o motorista do ônibus concluir o IRP, o gerente de E/S chamará as rotinas de IoCompletion registradas por drivers de nível superior à medida que passavam o IRP para baixo na pilha.

Sempre que um dispositivo entra no estado D0, cada um de seus drivers deve definir uma rotina IoCompletion que executa a maioria das tarefas necessárias para devolvê-lo ao estado de trabalho. Os drivers devem definir uma rotina IoCompletion para qualquer transição para o estado D0, seja o dispositivo retornando de um estado de suspensão ou entrando em D0 na inicialização do sistema. A figura a seguir mostra as tarefas que uma rotina de IoCompletion deve executar.

diagrama ilustrando a rotina de iocompleção de energia do dispositivo.

Essas tarefas incluem:

  • Restaurando o estado de energia do dispositivo ou reinicializando o dispositivo, conforme necessário, e preparando-se para lidar com qualquer E/S enfileirada por drivers enquanto o dispositivo não estava no estado de trabalho

  • Chamar PoSetPowerState para notificar o power manager de que o dispositivo está no estado de energia D0.

  • Chamar PoStartNextPowerIrp para receber o IRP de energia seguinte, se o driver não tiver enviado originalmente o IRP de energia atual. (Somente Windows Server 2003, Windows XP e Windows 2000).

  • Liberando memória alocada para o contexto do dispositivo.

  • Chamar IoReleaseRemoveLock para liberar o bloqueio que o driver adquiriu em sua rotina DispatchPower quando recebeu o IRP.

  • Retornando STATUS_SUCCESS.

O motorista do ônibus não ligará o dispositivo até que ele ou drivers superiores precisem se comunicar com o dispositivo.

Quando seu dispositivo entra em um estado de suspensão, um driver deve definir uma rotina IoCompletion que chama PoStartNextPowerIrp (somente Windows Server 2003, Windows XP e Windows 2000) e libera o bloqueio de remoção. Lembre-se de que um driver não pode acessar seu dispositivo enquanto o dispositivo estiver em estado de suspensão.