Compartilhar via


IRP_MN_QUERY_POWER

Esse IRP consulta um dispositivo para determinar se o estado de energia do sistema ou o estado de energia do dispositivo podem ser alterados.

Código principal

IRP_MJ_POWER

Quando enviado

O power manager ou um proprietário da política de energia do dispositivo envia esse IRP para determinar se ele pode alterar o estado de energia do sistema ou do dispositivo, normalmente para ir para o sono. Um driver deve chamar PoRequestPowerIrp para alocar e enviar esse IRP.

O power manager envia esse IRP em IRQL = PASSIVE_LEVEL para pilhas de dispositivos que definem o sinalizador de DO_POWER_PAGABLE no PDO.

O power manager pode enviar o IRP em IRQL = DISPATCH_LEVEL se o sinalizador DO_POWER_INRUSH estiver definido. Esses drivers não podem acessar direta ou indiretamente nenhum código ou dados paginados.

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 maneira:

  • 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 falha apropriada status para indicar que ele não pode inserir o estado solicitado.

Operação

Os parâmetros para IRP_MN_QUERY_POWER são idênticos àqueles para IRP_MN_SET_POWER. Em vez de notificar os drivers de uma alteração irrevogável para o estado de energia, no entanto, IRP_MN_QUERY_POWER consultas se o sistema ou um dispositivo pode inserir um estado de energia específico.

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 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 power manager envia esse IRP para garantir que ele possa alterar o estado de energia do sistema sem interromper o trabalho, como a remoção de conexões de rede.

Sempre que possível, o power manager consulta antes de enviar IRP_MN_SET_POWER para solicitar um estado de suspensão do sistema ou um desligamento normal do sistema. No entanto, em algumas condições críticas (como o usuário pressionando o botão Desligar ou uma bateria expirando), o power manager pode enviar uma solicitação de IRP_MN_SET_POWER sem primeiro enviar uma solicitação de energia de consulta. O power manager consulta apenas os estados de suspensão; ele nunca consulta antes de retornar ao estado de trabalho.

Quando um driver recebe um IRP de consulta de energia do sistema, ele deve falhar no IRP se não puder dar suporte a nenhum dos estados do dispositivo válidos para o estado do sistema consultado. Para obter mais informações, consulte DeviceState. Caso contrário, o driver deverá passar o IRP para o próximo driver inferior. O motorista do ônibus conclui 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 energia de consulta do sistema, o power manager ainda pode alterar o estado de energia do sistema para um estado de suspensão. Depois que um driver recebe um IRP de energia de consulta do sistema, o driver sempre deve estar preparado para uma alteração subsequente no estado de energia do sistema.

Quando um proprietário de política de energia do dispositivo recebe um IRP de consulta de energia do sistema, ele deve definir uma rotina IoCompletion no IRP antes de passá-la para baixo. Na rotina IoCompletion , ele deve enviar uma IRP_MN_QUERY_POWER para um estado de dispositivo 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 do 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 reinicializar posteriormente (PowerActionShutdownOff). Para 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 estiver redefinindo, interrompendo assim qualquer E/S contínua.

No Microsoft Windows 2000 e em sistemas posteriores, o valor em ShutdownType também pode ser PowerActionShutdown. Nesse caso, o driver não pode informar que tipo de desligamento é solicitado e, portanto, deve continuar como para uma redefinição.

Se um driver falhar em uma solicitação IRP_MN_QUERY_POWER para um estado de energia do sistema, o power manager normalmente responderá emitindo um IRP IRP_MN_SET_POWER . Normalmente, esse IRP reafirmará o estado atual do sistema. No entanto, é possível que os drivers possam receber uma IRP_MN_SET_POWER para o estado consultado ou para algum outro estado intermediário. Os motoristas devem estar preparados para lidar com essas situações.

IRP_MN_QUERY_POWER para um estado de energia do dispositivo

Um proprietário de política de energia do dispositivo envia esse IRP para sua pilha em resposta a uma solicitação de IRP_MN_QUERY_POWER do sistema.

Se um driver puder colocar seu dispositivo no estado do dispositivo solicitado, ele definirá IoStatus.Status como STATUS_SUCCESS e passará o IRP para o próximo driver inferior e assim por diante até que o IRP chegue ao motorista do ônibus. Se algum driver na pilha precisar falhar no IRP, esse driver deverá concluir o IRP imediatamente chamando IoCompleteRequest e retornando uma falha status. 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 essas operações até concluir um IRP de energia definida que retorna o dispositivo para um estado de energia aceitável.

No Windows 2000 e em 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 o PowerActionNone quando o IRP solicita um estado de energia do dispositivo.

Requisitos

parâmetro

Wdm.h (inclua Wdm.h, Ntddk.h ou Ntifs.h)

Confira também

IRP_MN_QUERY_POWER

IRP_MN_SET_POWER

PoRequestPowerIrp

PoStartNextPowerIrp