Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O gestor de energia fornece suporte para deteção de ociosidade através das rotinas PoRegisterDeviceForIdleDetection e PoSetDeviceBusy.
Para ativar a deteção de inatividade para o seu dispositivo, um proprietário da política de energia do dispositivo chama PoRegisterDeviceForIdleDetection e especifica:
O valor de tempo limite ocioso a ser aplicado quando o sistema otimiza o desempenho.
O valor de tempo limite ocioso a ser aplicado quando o sistema otimiza para conservação.
O estado de energia do dispositivo para o qual o dispositivo deve fazer a transição quando ocioso.
PoRegisterDeviceForIdleDetection retorna um ponteiro para um contador de inatividade, que o driver usa posteriormente para desativar a deteção de inatividade. Os chamadores de PoRegisterDeviceForIdleDetection devem estar em execução no IRQL < DISPATCH_LEVEL.
Um driver pode registar o dispositivo para deteção de inatividade a qualquer momento depois do dispositivo ser iniciado e estar pronto para processar Pedidos de Energia do Dispositivo (IRPs). Por exemplo, um driver pode habilitar a deteção de inatividade como parte da sua rotina IoCompletion para um IRP de dispositivo de inicialização PnP.
Os valores de tempo limite para qualquer dispositivo devem ser proporcionais à latência de inicialização do dispositivo e baseados no comportamento observado do dispositivo. Para dispositivos de determinados tipos, um driver pode especificar valores de tempo limite de conservação e desempenho de -1 para usar os tempos limite de política de energia padrão para a classe de dispositivo. Consulte a documentação específica do dispositivo para obter detalhes.
Quando o dispositivo está em uso, o driver deve chamar PoSetDeviceBusy, passando o ponteiro retornado por PoRegisterDeviceForIdleDetection. PoSetDeviceBusy redefine o contador de inatividade, reiniciando assim a contagem regressiva de inatividade para o dispositivo. O driver deve chamar PoSetDeviceBusy em cada operação de E/S.
Para determinar se o dispositivo está ocioso, o gerenciador de energia compara o valor do contador ocioso com o valor de tempo limite de ociosidade especificado pelo driver para a política de energia atual do sistema (conservação ou desempenho). Consulte o SDK do Microsoft Windows para funções referentes à política de energia do sistema.
Quando o dispositivo satisfaz o valor do tempo limite, o gestor de energia envia um IRP de configuração de potência do dispositivo, especificando o estado de potência do dispositivo que o driver passou na sua chamada para PoRegisterDeviceForIdleDetection. O gerenciador de energia não envia um IRP de consulta antes de enviar um IRP de definição de potência. Os drivers na pilha lidam com o IRP set-power como lidariam com qualquer outro; devem completá-lo atempadamente e não podem falhar. (Consulte Dispositivo de manipulação Power-Down IRPs.)
Quando o driver não requer mais deteção de ociosidade ou não está preparado para lidar com IRPs de desligamento do dispositivo, ele deve chamar PoRegisterDeviceForIdleDetection novamente, passando zero para ambos os valores de tempo limite. Definir os tempos limite como zero desativa a deteção de ociosidade para políticas de energia para conservação (bateria) e desempenho (corrente alternada). O condutor pode reativar rapidamente a detecção de inatividade; basta chamar PoRegisterDeviceForIdleDetection com valores de tempo limite diferentes de zero. Uma vez que o driver tenha registrado o dispositivo, ele pode ativar e desativar a deteção de ociosidade alterando os valores de tempo limite, mesmo que o dispositivo tenha sido desligado e despertado novamente.