Compartilhar via


Manipulando um sistema Set-Power IRP em um proprietário de política de energia do dispositivo

Em resposta a um IRP de set-power do sistema, o proprietário da política de energia de uma pilha de dispositivos é responsável por colocar sua pilha de dispositivos em um estado de energia de dispositivo apropriado.

Como regra geral, quando um proprietário de política de energia do dispositivo recebe um IRP_MN_SET_POWER para um estado de energia do sistema, ele deve responder passando o IRP de configuração do sistema para baixo na pilha do dispositivo. Um proprietário de política de energia do dispositivo também deve responder enviando a pilha do dispositivo IRP_MN_SET_POWER para um estado de energia do dispositivo correspondente em uma rotina IoCompletion . Depois que todos os drivers na pilha tiverem concluído o IRP de set-power do dispositivo, o proprietário da política de energia do dispositivo concluirá o IRP de set-power do sistema.

No entanto, para melhorar o desempenho da retomada do sistema, os proprietários de energia do dispositivo para dispositivos que não têm dispositivos filho devem usar uma abordagem diferente para reduzir o tempo necessário para que um sistema retorne ao estado de trabalho S0 de um estado de suspensão. Nesse caso, em resposta a um IRP de set-power do sistema que retorna um sistema para o estado de trabalho S0, os proprietários da política de energia do dispositivo devem executar a seguinte sequência de operações:

  1. Depois de receber um IRP IRP_MN_SET_POWER para o estado de energia do sistema S0 na rotina DispatchPower do driver, defina uma rotina IoCompletion para o IRP e passe o IRP para baixo na pilha.

  2. Na rotina IoCompletion definida na etapa (1), solicite um IRP IRP_MN_SET_POWER para o estado de energia do dispositivo correspondente e, em seguida, conclua imediatamente o IRP de set-power do sistema. O driver não deve aguardar a conclusão dos IRPs de configuração do dispositivo antes de concluir o IRP de set-power do sistema. A rotina IoCompletion é executada depois que todos os drivers de nível inferior concluírem o IRP de set-power do sistema e o IRP de set-power do sistema for passado de volta para o FDO (objeto de dispositivo funcional) do driver.

  3. Execute qualquer inicialização específica do dispositivo necessária.

  4. Conclua o IRP de set-power do dispositivo que foi enviado na etapa (2).

  5. Processar solicitações de E/S que foram enfileiradas quando o dispositivo estava em um estado de suspensão do dispositivo.

O gerenciador de energia do kernel tem um conjunto limitado de filas de expedição de IRP e deve notificar rapidamente todos os dispositivos no sistema do retorno ao estado de trabalho do sistema S0. Os drivers que não conseguem concluir o IRP de set-power do sistema o mais rápido possível impedem que outros dispositivos obtenham o IRP de set-power do sistema, o que pode afetar negativamente o desempenho geral do sistema durante as transições de estado de energia do sistema.

Para obter mais detalhes sobre como lidar com IRPs de set-power do sistema, consulte o seguinte:

Determinando o estado correto de energia do dispositivo

Enviar um dispositivo Set-Power IRP em resposta a um IRP de Set-Power do sistema