Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este IRP consulta um dispositivo para determinar se o estado de energia do sistema ou o estado de energia do dispositivo pode ser alterado.
Código principal
Quando enviado
O gestor de energia ou o proprietário de uma política de energia do dispositivo envia este IRP para determinar se pode alterar o estado de energia do sistema ou do dispositivo, normalmente para entrar em modo de suspensão. Um driver deve chamar PoRequestPowerIrp para alocar e enviar este IRP.
O gerenciador de energia envia esse IRP em IRQL = PASSIVE_LEVEL para pilhas de dispositivos que definem o sinalizador de DO_POWER_PAGABLE no DOP.
O gerenciador de energia pode enviar o IRP em IRQL = DISPATCH_LEVEL se o sinalizador de DO_POWER_INRUSH estiver definido. Esses drivers não podem acessar direta ou indiretamente qualquer código paginado ou dados.
Parâmetros de entrada
Parameters.Power.Type especifica o tipo de estado de energia que está sendo definido, SystemPowerState ou DevicePowerState.
Parameters.Power.State especifica o próprio estado de energia, da seguinte forma:
Se Parameters.Power.Type for SystemPowerState, o valor será um enumerador do tipo SYSTEM_POWER_STATE .
Se Parameters.Power.Type for DevicePowerState, o valor será um enumerador do tipo DEVICE_POWER_STATE .
Parameters.Power.ShutdownType especifica informações adicionais sobre a transição solicitada. Os valores possíveis são enumeradores do tipo POWER_ACTION .
Parâmetros de saída
Nenhum.
Bloco de status de E/S
Um driver define Irp-IoStatus.Status> como STATUS_SUCCESS para indicar que o dispositivo pode entrar no estado solicitado. Um driver define qualquer status de falha apropriado para indicar que ele não pode entrar no estado solicitado.
Funcionamento
Os parâmetros para IRP_MN_QUERY_POWER são idênticos aos da IRP_MN_SET_POWER. Em vez de notificar os drivers de uma alteração irrevogável no estado de energia, no entanto, IRP_MN_QUERY_POWER consulta se o sistema ou um dispositivo pode entrar em um determinado estado de energia.
Um driver não deve alterar o estado de energia de seu dispositivo em resposta a uma solicitação de IRP_MN_QUERY_POWER .
Depois que um driver recebe uma solicitação de IRP_MN_QUERY_POWER no Windows Server 2003, Windows XP e Windows 2000, um driver deve chamar PoStartNextPowerIrp, conforme descrito em Chamando PoStartNextPowerIrp. A partir do Windows Vista, chamar PoStartNextPowerIrp não é necessário e essa chamada não executa nenhuma operação de gerenciamento de energia.
IRP_MN_QUERY_POWER para um estado de energia do sistema
O gerenciador de energia envia esse IRP para garantir que ele possa alterar o estado de energia do sistema sem interromper o trabalho, como a queda de conexões de rede.
Sempre que possível, o gestor de energia consulta antes de enviar IRP_MN_SET_POWER para solicitar um estado de suspensão do sistema ou um encerramento normal do sistema. No entanto, em algumas condições críticas (como o usuário pressionando o botão de desligamento ou uma bateria expirando), o gerenciador de energia pode enviar uma solicitação de IRP_MN_SET_POWER sem primeiro enviar uma solicitação de energia de consulta. O gestor de energia consulta apenas os estados de suspensão; nunca consulta antes de regressar ao estado de trabalho.
Quando um driver recebe um IRP de consulta de energia do sistema, ele deve falhar o IRP se ele não puder suportar qualquer um dos estados do dispositivo que são válidos para o estado do sistema consultado. Para obter mais informações, consulte DeviceState. Caso contrário, o driver deve passar o IRP para o próximo driver inferior. O motorista do ônibus preenche o IRP.
A partir do Windows Vista, a transição para um estado de suspensão do sistema é considerada uma operação crítica. Embora um driver possa falhar em um IRP de poder de consulta do sistema, o gerenciador de energia ainda pode alterar o estado de energia do sistema para um estado de suspensão. Depois que um driver recebe um IRP de poder de consulta do sistema, o driver deve estar sempre preparado para uma alteração subsequente no estado de energia do sistema.
Quando um proprietário de política de energia de dispositivo recebe um IRP de consulta de energia do sistema, ele deve definir uma rotina de IoCompletion no IRP antes de transmiti-lo. Na rotina IoComplete , ele deve enviar um IRP_MN_QUERY_POWER para um estado do dispositivo que seja válido para o estado do sistema consultado. Para obter mais informações, consulte Manipulando um sistema Query-Power IRP em um proprietário de política de energia de dispositivo.
Quando o IRP especifica PowerSystemShutdown (S5), o valor em Parameters.Power.ShutdownType fornece um motivo para o desligamento. O ShutdownType informa ao driver se o sistema está redefinindo (PowerActionShutdownReset) ou desligando indefinidamente para reiniciar mais tarde (PowerActionShutdownOff). Para os drivers da maioria dos dispositivos, a diferença é inconsequente. No entanto, para determinados dispositivos, como um dispositivo de streaming de vídeo que executa DMA, um driver pode optar por desligar seu dispositivo quando o sistema está redefinindo, interrompendo assim qualquer E/S em andamento.
No Microsoft Windows 2000 e sistemas posteriores, o valor em ShutdownType também pode ser PowerActionShutdown. Neste caso, o motorista não pode dizer que tipo de desligamento é solicitado e, portanto, deve proceder como para uma reinicialização.
Se um driver falhar em uma solicitação de IRP_MN_QUERY_POWER para um estado de energia do sistema, o gerenciador de energia normalmente responde emitindo um IRP IRP_MN_SET_POWER . Normalmente, este IRP irá reafirmar o estado atual do sistema. No entanto, é possível que os motoristas recebam uma IRP_MN_SET_POWER para o estado consultado ou para algum outro estado intermediário. Os condutores devem estar preparados para lidar com estas situações.
IRP_MN_QUERY_POWER para um estado de energia do dispositivo
Um proprietário de política de energia de dispositivo envia esse IRP para sua pilha em resposta a uma solicitação de IRP_MN_QUERY_POWER do sistema.
Se um driver pode colocar seu dispositivo no estado de dispositivo solicitado, ele define IoStatus.Status como STATUS_SUCCESS e passa o IRP para o próximo driver inferior, e assim por diante até que o IRP atinja o driver de ônibus. Se algum driver na pilha deve falhar o IRP, esse driver deve concluir o IRP imediatamente chamando IoCompleteRequest e retornando um status de falha. Os drivers que falham no IRP não o passam mais para baixo na pilha.
Ao retornar STATUS_SUCCESS, o driver garante que não iniciará nenhuma operação que altere sua capacidade de definir o estado de energia solicitado. O driver deve enfileirar todos os IRPs que exigem tais operações até concluir um IRP set-power que retorna o dispositivo a um estado de energia aceitável.
No Windows 2000 e sistemas posteriores, quando o IRP especifica PowerDeviceD1, PowerDeviceD2 ou PowerDeviceD3, o valor em Parameters.Power.ShutdownType fornece informações sobre o IRP de energia do sistema atual, se um IRP de energia do sistema estiver ativo. Nesse caso, o valor em ShutdownType indica o estado de energia do sistema atualmente solicitado, ou PowerActionNone se uma solicitação do sistema não estiver pendente. No Windows 98/Me, esse campo sempre contém PowerActionNone quando o IRP solicita um estado de energia do dispositivo.
Requerimentos
Cabeçalho: Wdm.h (inclui Wdm.h, Ntddk.h ou Ntifs.h)