Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Esse IRP notifica um driver de uma alteração no estado de energia do sistema ou define o estado de energia do dispositivo para um dispositivo.
Código principal
Quando enviado
O power manager do sistema ou um proprietário da política de energia do dispositivo podem enviar esse IRP.
O power manager envia esse IRP para notificar os drivers de uma alteração no estado de energia do sistema. Se um driver registrar seu dispositivo para detecção ociosa, o power manager enviará esse IRP para alterar o estado de energia de um dispositivo ocioso.
Um driver que possui a política de energia envia esse IRP para definir o estado de energia do dispositivo para seu dispositivo. Um driver deve chamar PoRequestPowerIrp para 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. Os drivers nessas pilhas podem tocar em código ou dados paginado para concluir a solicitação.
O power manager 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 nenhum código ou dados paginados.
Parâmetros de entrada
O membro Parameters.Power.Type especifica o tipo de estado de energia que está sendo definido, SystemPowerState ou DevicePowerState.
O membro 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 .
O membro Parameters.Power.ShutdownType especifica informações adicionais sobre a transição solicitada. Os valores possíveis para esse membro são POWER_ACTION valores de enumeração. Para obter mais informações, consulte System Power Actions.
O membro Parameters.Power.SystemPowerStateContext é uma estrutura de SYSTEM_POWER_STATE_CONTEXT parcialmente opaca e somente leitura que contém informações sobre os estados de energia do sistema anteriores de um computador. Se Parameters.Power.Type for SystemPowerState e Parameters.Power.State for PowerSystemWorking, dois bits de sinalizador nessa estrutura indicarão se uma inicialização rápida ou uma ativação da hibernação fez com que o computador entrasse no estado do sistema S0 (funcionando). Para obter mais informações, consulte Diferenciando a inicialização rápida do wake-from-Hibernation.
Contexto de transição de energia do sistema para IRP_MN_SET_POWER
A tabela a seguir mostra o conteúdo de IRP_MN_SET_POWER. Parameters.Power. {State|ShutdownType} e os campos de bit CurrentSystemState, TargetSystemState e EffectiveSystemState na estrutura SYSTEM_POWER_STATE_CONTEXT para cada transição de energia do sistema. Cada linha representa um IRP_MN_SET_POWER.
| Transição | Estado | Tipo de desligamento | SystemState atual | SystemState de destino | SystemState eficaz | Comentários |
|---|---|---|---|---|---|---|
| Durma para... | S3 | Repouso | S0 | S3 | S3 | |
| ... Acordar | S0 | Repouso | S3 | S0 | S0 | |
| Suspensão híbrida para... | S4 | Hibernar | S0 | S3 | S4 | Suspensão com arquivo de hibernação (S4 Rápido) |
| ... Acordar | S0 | Repouso | S3 | S0 | S0 | |
| ... Wake/PwrLost | S0 | Repouso | S4 | S0 | S0 | |
| Hibernar para... | S4 | Hibernar | S0 | S4 | S4 | |
| ... Acordar | S0 | Repouso | S4 | S0 | S0 | |
| Desligamento híbrido para... | S4 | Hibernar | S0 | S5 | S4 | Aplicativos fechados, usuário conectado como se estivesse desligado (inicialização de hibernação) |
| ... Inicialização Rápida | S0 | Repouso | S4 | S0 | S0 | |
| Desligar para... | S5 | Desligamento/redefinição/desativação | S0 | S5 | S5 | |
| ... Inicialização do sistema | Sem S-IRP para inicialização |
Parâmetros de saída
Parameters.Power.SystemContext é reservado para uso do sistema.
Bloco de Status de E/S
Um driver define Irp-IoStatus.Status> como STATUS_SUCCESS para indicar que o dispositivo entrou no estado solicitado.
Um driver não deve falhar em uma solicitação para definir o estado de energia do sistema.
Os drivers de função e filtro que estão localizados acima de um driver de ônibus não devem falhar em uma solicitação para definir um estado de energia do dispositivo. O motorista do barramento pode falhar em uma solicitação de energia do dispositivo se o dispositivo for removido ou em processo de remoção.
Operação
O power manager ou um driver pode solicitar um IRP IRP_MN_SET_POWER . O power manager envia esse IRP por um dos seguintes motivos:
Para notificar os drivers de uma alteração no estado de energia do sistema
Para alterar o estado de energia de um dispositivo para o qual o power manager está executando a detecção ociosa
Para reafirmar o estado atual do sistema depois que um driver falha em uma solicitação IRP_MN_QUERY_POWER para um estado de energia do sistema. Para obter mais informações, consulte IRP_MN_QUERY_POWER.
Um driver que possui a política de energia do dispositivo envia IRP_MN_SET_POWER para alterar o estado de energia de seu dispositivo.
A qualquer momento, o sistema permite que apenas um desses IRP esteja ativo para cada objeto de dispositivo.
Cada driver deve passar cada IRP de energia para o driver mais baixo chamando IoCallDriver (começando com o Windows Vista) ou PoCallDriver (Windows Server 2003, Windows XP e Windows 2000). A interface PoCallDriver é semelhante à do IoCallDriver, exceto que o subsistema de gerenciamento de energia pode atrasar o IRP antes de passá-lo para o próximo driver. Por exemplo, atrasos podem ocorrer em uma solicitação powerDeviceD0 se o dispositivo exigir inrush atual e, portanto, deve ser ativado em série com outro dispositivo desse tipo.
Depois que um driver recebe uma solicitação IRP_MN_SET_POWER no Windows Server 2003, Windows XP ou Windows 2000, um driver deve chamar PoStartNextPowerIrp, conforme descrito em Calling PoStartNextPowerIrp. A partir do Windows Vista, não é necessário chamar PoStartNextPowerIrp e essa chamada não executa nenhuma operação de gerenciamento de energia.
IRP_MN_SET_POWER para estados de energia do sistema
Somente o gerenciador de energia do sistema pode enviar um IRP de set-power do sistema.
Um driver não deve falhar em uma solicitação para definir o estado de energia do sistema.
Sempre que possível, o power manager envia IRP_MN_QUERY_POWER antes de enviar IRP_MN_SET_POWER para solicitar um estado de suspensão do sistema. No entanto, em algumas condições (como o usuário pressionando o botão Desligar ou uma bateria expirando), o power manager pode emitir IRP_MN_SET_POWER sem consultar primeiro. As consultas do power manager somente para estados de suspensão; ele nunca consulta antes de ligar.
A solicitação IRP_MN_SET_POWER é enviada para o driver superior na pilha de dispositivos de um dispositivo. O motorista superior passa o IRP para o próximo driver inferior, e assim por diante, até que o IRP chegue ao motorista do ônibus, que deve concluir o IRP.
Normalmente, um driver de filtro não precisa agir em um IRP de set-power do sistema, além de passá-lo.
No entanto, o proprietário da política de energia do dispositivo define uma rotina IoCompletion antes de passar o IRP. Na rotina IoCompletion , ele envia uma solicitação IRP_MN_SET_POWER para um IRP de energia do dispositivo. Para obter mais informações, consulte Como lidar com um sistema Set-Power IRP em um proprietário de política de energia do dispositivo.
Um IRP de set-power do sistema informa aos drivers que uma alteração no estado de energia do sistema é iminente e os drivers devem se preparar para isso. No entanto, um driver não deve alterar o estado de energia de seu dispositivo até receber um IRP_MN_SET_POWER para um estado de energia do dispositivo .
O valor em Parameters.Power.ShutdownType fornece informações adicionais sobre as ações pendentes. Quando o IRP especifica o PowerSystemShutdown (S5), um driver pode determinar se o sistema está redefinindo (PowerActionShutdownReset) ou desligando indefinidamente para reinicializar mais tarde (PowerActionShutdownOff). Para drivers da maioria dos dispositivos, a diferença é inconsequente. No entanto, para determinados dispositivos, como dispositivos de streaming de vídeo, um driver pode desligar o dispositivo para interromper a E/S quando o sistema estiver redefinindo.
O valor em ShutdownType também pode ser PowerActionShutdown. Nesse caso, o driver não pode dizer que tipo de desligamento é solicitado e, portanto, deve continuar como uma redefinição.
Estados de energia do dispositivo
Os drivers de função e filtro que estão localizados acima de um driver de ônibus não devem falhar em uma solicitação para definir um estado de energia do dispositivo. O motorista do barramento pode falhar em uma solicitação de energia do dispositivo se o dispositivo for removido ou em processo de remoção.
Um driver deve definir o dispositivo no estado solicitado antes de concluir o IRP.
Quando o IRP solicita uma transição para um estado de energia mais baixo, os drivers devem lidar com o IRP à medida que ele percorre a pilha do dispositivo, salvando qualquer contexto que o driver precise para restaurar o dispositivo para o estado de trabalho. Depois que um motorista de ônibus recebe um IRP, o motorista:
Salva qualquer contexto que o driver precisa para restaurar o dispositivo para o estado de trabalho.
Define o dispositivo como o estado de energia solicitado.
Chama PoSetPowerState para notificar o power manager.
Chama PoStartNextPowerIrp para iniciar o próximo IRP de energia (somente Windows Server 2003, Windows XP e Windows 2000).
Conclui o IRP de energia do dispositivo.
O driver deve concluir esse IRP em tempo hábil. Em geral, os drivers devem evitar qualquer atraso que um usuário típico acharia visivelmente lento. Por exemplo, um driver pode atrasar uma alteração de estado do sistema para liberar dados de rede ou disco armazenados em cache, mas não deve manter uma conexão de rede ativa ou formatar uma fita. Para obter mais informações, consulte Passagem de IRPs do Power.
No Windows 2000 e versões posteriores do sistema operacional, se o IRP especificar PowerDeviceD1, PowerDeviceD2 ou PowerDeviceD3 e um IRP de set-power do sistema estiver ativo, o valor em Parameters.Power.ShutdownType fornecerá informações sobre o IRP do sistema.
Os drivers de dispositivos no caminho de hibernação devem inspecionar esse valor. Se o IRP solicitar PowerDeviceD3 e ShutdownType for PowerActionHibernate, esse driver deverá salvar qualquer contexto necessário para restaurar o dispositivo, mas não deve desligar o dispositivo; o dispositivo entra no estado D3 quando o computador perde energia.
No Windows 2000 e nas versões posteriores do sistema operacional, os drivers não devem depender do valor em ShutdownType se o estado de energia solicitado for PowerDeviceD0.
No Windows 98/Me, se o IRP solicitar um estado de energia do dispositivo, o ShutdownType sempre será PowerActionNone.
O driver que determina quando desligar um dispositivo varia de acordo com a classe de dispositivo.
O driver que determina quando ligar um dispositivo é quase sempre um driver que acessa os registros do dispositivo. O driver deve verificar se o dispositivo está no estado D0 antes de acessar os registros de hardware do dispositivo. Se o dispositivo não estiver no estado D0, o driver deverá chamar PoRequestPowerIrp para enviar um IRP para ativar o dispositivo. Um driver não pode acessar seu dispositivo a menos que o dispositivo esteja no estado D0.
Quando um driver recebe um IRP de potência definida para o estado D0 do dispositivo, ele define uma rotina IoCompletion e passa o IRP para o próximo driver inferior.
Quando o IRP atinge o driver de barramento, esse driver aplica (ou redefine) energia ao dispositivo, chama PoStartNextPowerIrp (somente Windows Server 2003, Windows XP e Windows 2000) e chama PoSetPowerState para informar o power manager do novo estado de energia para o dispositivo.
Depois que o driver de barramento concluir o IRP de energia, os drivers de função e filtro manipularão o IRP em suas rotinas de IoCompletion enquanto ele faz backup da pilha de dispositivos. Na rotina IoCompletion , cada driver restaura ou reinicializa seu contexto de dispositivo e executa quaisquer outras tarefas de inicialização necessárias.
Para obter mais informações, consulte Manipulando IRP_MN_SET_POWER para estados de energia de dispositivo.
Requisitos
Cabeçalho: Wdm.h (incluem Wdm.h, Ntddk.h ou Ntifs.h)