Partilhar via


Distinguindo a inicialização rápida do wake-from-Hibernation

Há três modos de inicialização no Windows:

  • Frio (tradicional)
  • Wake-from-hibernation
  • Rápido (combina os dois primeiros, introduzidos em Windows 8)

Para distinguir inicializações rápidas da ativação da hibernação, os drivers de dispositivo no modo kernel podem examinar OS IRPs de energia do sistema.

Durante uma inicialização a frio, o carregador de inicialização constrói uma imagem de memória do kernel carregando as seções do arquivo kernel do Windows na memória e vinculando-as. Em seguida, o kernel configura funções principais do sistema, enumera os dispositivos anexados ao computador e carrega drivers para eles.

Por outro lado, uma inicialização rápida simplesmente carrega o arquivo de hibernação (Hiberfil.sys) na memória. Uma inicialização rápida tende a levar significativamente menos tempo do que uma inicialização fria.

Para distinguir uma inicialização rápida de um wake-from-hibernation, um driver pode inspecionar as informações no IRP de set-power (IRP_MN_SET_POWER) do sistema que informa ao driver que o computador inseriu o estado S0 (em funcionamento). O local da pilha de E/S do driver neste IRP contém um membro do Power , que é uma estrutura que contém informações relacionadas à energia. A partir do Windows Vista, a estrutura membro do Power contém um membro SystemPowerStateContext , que é uma estrutura SYSTEM_POWER_STATE_CONTEXT que contém informações sobre os estados de energia do sistema anteriores. Essas informações são codificadas em campos de bits na estrutura SYSTEM_POWER_STATE_CONTEXT .

A maioria dos campos de bits na estrutura SYSTEM_POWER_STATE_CONTEXT são reservados para uso do sistema e são opacos aos drivers. No entanto, essa estrutura contém dois campos de bits, TargetSystemState e EffectiveSystemState, que podem ser lidos por drivers para determinar se ocorreu uma inicialização rápida ou uma ativação da hibernação.

Os campos de bit TargetSystemState e EffectiveSystemState são definidos como SYSTEM_POWER_STATE valores de enumeração. Se TargetSystemState = PowerSystemHibernate e EffectiveSystemState = PowerSystemHibernate, ocorreu um wake-from-hibernation.

No entanto, se TargetSystemState = PowerSystemShutdown e EffectiveSystemState = PowerSystemHibernate, ocorreu uma inicialização rápida.

O campo de bits TargetSystemState especifica a última transição de estado de energia do sistema para a qual o driver recebeu um IRP de energia do sistema antes de o computador desligar ou entrar em hibernação. O campo de bits EffectiveSystemState indica o estado efetivo de energia do sistema anterior do dispositivo, conforme percebido pelo usuário. Os valores TargetSystemState e EffectiveSystemState podem não corresponder se, por exemplo, o driver recebeu notificação de uma transição pendente do sistema para o estado de hibernação, mas ocorreu um desligamento híbrido posteriormente.

Para obter mais informações, consulte SYSTEM_POWER_STATE_CONTEXT.

Preparando-se para a inicialização rápida

Para se preparar para uma inicialização rápida, o Windows executa uma sequência de desligamento completa e salva um arquivo de hibernação.

  1. Primeiro, como em um desligamento completo, o Windows fecha todos os aplicativos e faz logoff de todas as sessões do usuário. Nesta fase, nenhum aplicativo está em execução, mas o kernel do Windows é carregado e a sessão do sistema está em execução.
  2. Em seguida, o power manager envia IRPs de energia do sistema para drivers de dispositivo para que eles preparem seus dispositivos para entrar em hibernação.
  3. Por fim, o Windows salva a imagem de memória do kernel (incluindo os drivers de modo kernel carregados) em Hiberfil.sys e desliga o computador.

Se o driver de um dispositivo configurar o dispositivo de forma diferente dependendo se ocorreu uma inicialização a frio ou uma ativação de hibernação, esse driver deverá, após uma inicialização rápida, configurar o dispositivo como se tivesse ocorrido uma inicialização a frio. Por exemplo, o driver NDIS fornecido pelo sistema desabilita os recursos de ativação de miniportos em uma inicialização rápida, mas não em uma hibernação de ativação.