Compartir a través de


Distinguir inicio rápido de reactivación desde hibernación

Hay tres modos de inicio en Windows:

  • Frío (tradicional)
  • Reactivación desde hibernación
  • Rápido (combina las dos primeras, introducidas en Windows 8)

Para distinguir las startups rápidas de la reactivación desde la hibernación, los controladores de dispositivos en modo kernel pueden examinar los IRP de energía del sistema.

Durante un inicio en frío, el cargador de arranque construye una imagen de memoria de kernel cargando las secciones del archivo de kernel de Windows en la memoria y vinculándolas. A continuación, el kernel configura las funciones principales del sistema, enumera los dispositivos conectados al equipo y carga los controladores para ellos.

Por el contrario, un inicio rápido simplemente carga el archivo de hibernación (Hiberfil.sys) en la memoria. Un inicio rápido tiende a tardar mucho menos tiempo que un arranque en frío.

Para distinguir un inicio rápido de una reactivación desde la hibernación, un controlador puede inspeccionar la información en el IRP de configuración del sistema (IRP_MN_SET_POWER) que informa al controlador de que el equipo ha entrado en el estado S0 (en funcionamiento). La ubicación de la pila de E/S del controlador en este IRP contiene un miembro power , que es una estructura que contiene información relacionada con la energía. A partir de Windows Vista, la estructura de miembros de Power contiene un miembro SystemPowerStateContext , que es una estructura SYSTEM_POWER_STATE_CONTEXT que contiene información sobre los estados de energía del sistema anteriores. Esta información se codifica en campos de bits en la estructura SYSTEM_POWER_STATE_CONTEXT .

La mayoría de los campos de bits de la estructura SYSTEM_POWER_STATE_CONTEXT están reservados para el uso del sistema y son opacos para los controladores. Sin embargo, esta estructura contiene dos campos de bits, TargetSystemState y EffectiveSystemState, que los controladores pueden leer para determinar si se ha producido un inicio rápido o una reactivación desde la hibernación.

Los campos de bits TargetSystemState y EffectiveSystemState se establecen en SYSTEM_POWER_STATE valores de enumeración. Si TargetSystemState = PowerSystemHibernate y EffectiveSystemState = PowerSystemHibernate, se produjo una reactivación desde la hibernación.

Sin embargo, si TargetSystemState = PowerSystemShutdown y EffectiveSystemState = PowerSystemHibernate, se produjo un inicio rápido.

El campo de bits TargetSystemState especifica la última transición de estado de alimentación del sistema para la que el controlador recibió un IRP de alimentación del sistema antes de que el equipo apagara o entrara en hibernación. El campo de bits EffectiveSystemState indica el estado de energía del sistema anterior efectivo del dispositivo, según lo percibe el usuario. Es posible que los valores TargetSystemState y EffectiveSystemState no coincidan si, por ejemplo, el controlador recibió una notificación de una transición del sistema pendiente al estado de hibernación, pero posteriormente se produjo un apagado híbrido.

Para obtener más información, consulte SYSTEM_POWER_STATE_CONTEXT.

Preparación para el inicio rápido

Para prepararse para un inicio rápido, Windows realiza una secuencia de apagado completa y guarda un archivo de hibernación.

  1. En primer lugar, al igual que en un apagado completo, Windows cierra todas las aplicaciones y cierra todas las sesiones de usuario. En esta fase, no se está ejecutando ninguna aplicación, pero se carga el kernel de Windows y la sesión del sistema se está ejecutando.
  2. A continuación, el administrador de energía envía los IRP de energía del sistema a los controladores de dispositivo para indicarles que preparen sus dispositivos para entrar en hibernación.
  3. Por último, Windows guarda la imagen de memoria del kernel (incluidos los controladores en modo kernel cargados) en Hiberfil.sys y apaga el equipo.

Si el controlador de un dispositivo configura el dispositivo de forma diferente en función de si se ha producido un inicio en frío o una reactivación desde hibernación, este controlador debe, después de un inicio rápido, configurar el dispositivo como si se produjera un inicio en frío. Por ejemplo, el controlador NDIS proporcionado por el sistema deshabilita las funcionalidades de reactivación de miniporte en un inicio rápido, pero no en una reactivación desde la hibernación.