Unterscheiden des schnellen Startvorgangs von "Wake-from-Hibernation"
Es gibt drei Startmodi in Windows:
- Kalt (traditionell)
- Aus dem Ruhezustand aufwachen
- Fast (kombiniert die ersten beiden, eingeführt in Windows 8)
Um schnelle Startups von "Wake-from-Hibernation" zu unterscheiden, können Gerätetreiber im Kernelmodus die Systemleistungs-IRPs untersuchen.
Während eines Kaltstarts erstellt das Startladeprogramm ein Kernelspeicherimage, indem die Abschnitte der Windows-Kerneldatei in den Arbeitsspeicher geladen und verknüpft werden. Als Nächstes konfiguriert der Kernel kerne Systemfunktionen, listet die Geräte auf, die an den Computer angefügt sind, und lädt Treiber für sie.
Im Gegensatz dazu lädt ein schneller Start einfach die Ruhezustandsdatei (Hiberfil.sys) in den Arbeitsspeicher. Ein schneller Start nimmt in der Regel deutlich weniger Zeit in Anspruch als ein Kaltstart.
Um einen schnellen Start von einem Ruhezustand zu unterscheiden, kann ein Treiber die Informationen im IRP (IRP_MN_SET_POWER) des Systems überprüfen, das den Treiber darüber informiert, dass der Computer in den Zustand S0 (Arbeitszustand) eingetreten ist. Der E/A-Stapelspeicherort des Treibers in diesem IRP enthält ein Power-Element , bei dem es sich um eine Struktur handelt, die energiebezogene Informationen enthält. Ab Windows Vista enthält die Power-Memberstruktur einen SystemPowerStateContext-Member , bei dem es sich um eine SYSTEM_POWER_STATE_CONTEXT-Struktur handelt, die Informationen zu den vorherigen Systemleistungszuständen enthält. Diese Informationen werden in Bitfeldern in der SYSTEM_POWER_STATE_CONTEXT-Struktur codiert.
Die meisten Bitfelder in der SYSTEM_POWER_STATE_CONTEXT-Struktur sind für die Systemverwendung reserviert und für Treiber undurchsichtig. Diese Struktur enthält jedoch zwei Bitfelder, TargetSystemState und EffectiveSystemState, die von Treibern gelesen werden können, um zu bestimmen, ob ein schneller Start oder eine Aktivierung aus dem Ruhezustand aufgetreten ist.
Die Bitfelder TargetSystemState und EffectiveSystemState sind auf SYSTEM_POWER_STATE Enumerationswerte festgelegt. Wenn TargetSystemState = PowerSystemHibernate und EffectiveSystemState = PowerSystemHibernate ausgeführt werden, ist eine Aktivierung aus dem Ruhezustand aufgetreten.
Wenn jedoch TargetSystemState = PowerSystemShutdown und EffectiveSystemState = PowerSystemHibernate ausgeführt werden, ist ein schneller Start aufgetreten.
Das Bitfeld TargetSystemState gibt den letzten Systemstromzustandsübergang an, für den der Treiber eine Systemleistungs-IRP erhalten hat, bevor der Computer heruntergefahren oder in den Ruhezustand versetzt wurde. Das Feld EffectiveSystemState-Bit gibt den effektiven vorherigen Systemleistungszustand des Geräts an, wie er vom Benutzer wahrgenommen wird. Die Werte TargetSystemState und EffectiveSystemState stimmen möglicherweise nicht überein, wenn der Treiber z. B. eine Benachrichtigung über einen ausstehenden Systemübergang in den Ruhezustand erhalten hat, aber anschließend ein hybrides Herunterfahren aufgetreten ist.
Weitere Informationen finden Sie unter SYSTEM_POWER_STATE_CONTEXT.
Vorbereiten des schnellen Startvorgangs
Um einen schnellen Start vorzubereiten, führt Windows eine vollständige Herunterfahrsequenz durch und speichert eine Ruhezustandsdatei.
- Zunächst schließt Windows wie bei einem vollständigen Herunterfahren alle Anwendungen und meldet sich von allen Benutzersitzungen ab. In dieser Phase werden keine Anwendungen ausgeführt, aber der Windows-Kernel wird geladen, und die Systemsitzung wird ausgeführt.
- Als Nächstes sendet der Power Manager System-Energie-IRPs an Gerätetreiber, um sie anzuweisen, ihre Geräte für den Eintritt in den Ruhezustand vorzubereiten.
- Schließlich speichert Windows das Kernelspeicherimage (einschließlich der geladenen Kernelmodustreiber) in Hiberfil.sys und fährt den Computer herunter.
Wenn der Treiber für ein Gerät das Gerät unterschiedlich konfiguriert, je nachdem, ob ein Kaltstart oder eine Aktivierung aus dem Ruhezustand aufgetreten ist, sollte dieser Treiber das Gerät nach einem schnellen Start so konfigurieren, als ob ein Kaltstart aufgetreten wäre. Der vom System bereitgestellte NDIS-Treiber deaktiviert z. B. Miniport-Aktivierungsfunktionen bei einem schnellen Start, aber nicht bei einer Aktivierung aus dem Ruhezustand.