Distinction entre démarrage rapide et mise en veille prolongée

Il existe trois modes de démarrage dans Windows :

  • Froid (traditionnel)
  • Mise en veille prolongée
  • Fast (combine les deux premiers, introduit dans Windows 8)

Pour distinguer les start-ups rapides de la mise en veille prolongée, les pilotes de périphérique en mode noyau peuvent examiner les irPs d’alimentation du système.

Lors d’un démarrage à froid, le chargeur de démarrage construit une image mémoire du noyau en chargeant les sections du fichier noyau Windows dans la mémoire et en les liant. Ensuite, le noyau configure les fonctions système principales, énumère les périphériques attachés à l’ordinateur et charge les pilotes pour ceux-ci.

En revanche, un démarrage rapide charge simplement le fichier de mise en veille prolongée (Hiberfil.sys) dans la mémoire. Une start-up rapide a tendance à prendre beaucoup moins de temps qu’une start-up à froid.

Pour distinguer un démarrage rapide d’une mise en veille prolongée, un pilote peut inspecter les informations contenues dans l’IRP de l’ensemble du système (IRP_MN_SET_POWER) qui informe le pilote que l’ordinateur est entré dans l’état S0 (fonctionnement). L’emplacement de la pile d’E/S du pilote dans cet IRP contient un membre Power , qui est une structure qui contient des informations relatives à l’alimentation. À compter de Windows Vista, la structure membre Power contient un membre SystemPowerStateContext , qui est une structure SYSTEM_POWER_STATE_CONTEXT qui contient des informations sur les états d’alimentation système précédents. Ces informations sont encodées dans des champs bits dans la structure SYSTEM_POWER_STATE_CONTEXT .

La plupart des champs de bits de la structure SYSTEM_POWER_STATE_CONTEXT sont réservés à l’utilisation du système et sont opaques pour les pilotes. Toutefois, cette structure contient deux champs bits, TargetSystemState et EffectiveSystemState, qui peuvent être lus par les pilotes pour déterminer si un démarrage rapide ou une mise en veille prolongée s’est produit.

Les champs De bits TargetSystemState et EffectiveSystemState sont définis pour SYSTEM_POWER_STATE valeurs d’énumération . Si TargetSystemState = PowerSystemHibernate et EffectiveSystemState = PowerSystemHibernate, une mise en veille prolongée s’est produite.

Toutefois, si TargetSystemState = PowerSystemShutdown et EffectiveSystemState = PowerSystemHibernate, un démarrage rapide s’est produit.

Le champ De bits TargetSystemState spécifie la dernière transition d’état d’alimentation du système pour laquelle le pilote a reçu un IRP d’alimentation du système avant l’arrêt ou la mise en veille prolongée de l’ordinateur. Le champ de bits EffectiveSystemState indique l’état d’alimentation système précédent effectif de l’appareil, tel que perçu par l’utilisateur. Les valeurs TargetSystemState et EffectiveSystemState peuvent ne pas correspondre si, par exemple, le pilote a reçu la notification d’une transition système en attente vers l’état de mise en veille prolongée, mais qu’un arrêt hybride s’est ensuite produit.

Pour plus d’informations, consultez SYSTEM_POWER_STATE_CONTEXT.

Préparation du démarrage rapide

Pour préparer un démarrage rapide, Windows effectue une séquence d’arrêt complète et enregistre un fichier de mise en veille prolongée.

  1. Tout d’abord, comme lors d’un arrêt complet, Windows ferme toutes les applications et déconnecte toutes les sessions utilisateur. À ce stade, aucune application n’est en cours d’exécution, mais le noyau Windows est chargé et la session système est en cours d’exécution.
  2. Ensuite, le gestionnaire d’alimentation envoie les IRPs d’alimentation système aux pilotes de périphérique pour leur dire de préparer leurs appareils à entrer en veille prolongée.
  3. Enfin, Windows enregistre l’image mémoire du noyau (y compris les pilotes en mode noyau chargés) dans Hiberfil.sys et arrête l’ordinateur.

Si le pilote d’un appareil configure l’appareil différemment selon qu’un démarrage à froid ou une mise en veille prolongée s’est produit, ce pilote doit, après un démarrage rapide, configurer l’appareil comme s’il s’était produit un démarrage à froid. Par exemple, le pilote NDIS fourni par le système désactive les fonctionnalités de veille miniport lors d’un démarrage rapide, mais pas lors d’une mise en veille prolongée.