Distinguere Avvio rapido da Riattivazione da Hibernation

In Windows sono disponibili tre modalità di avvio:

  • Freddo (tradizionale)
  • Riattivazione dall'ibernazione
  • Veloce (combina i primi due, introdotti in Windows 8)

Per distinguere le avvio veloci da riattivazione dall'ibernazione, i driver di dispositivo in modalità kernel possono esaminare i provider di integrazione di alimentazione del sistema.

Durante un'avvio sporadico, il caricatore di avvio costruisce un'immagine di memoria del kernel caricando le sezioni del file kernel di Windows in memoria e collegandole. Successivamente, il kernel configura le funzioni di sistema di base, enumera i dispositivi collegati al computer e carica i driver per loro.

Al contrario, un'avvio rapido carica semplicemente il file di ibernazione (Hiberfil.sys) in memoria. Un'avvio veloce tende a richiedere molto meno tempo rispetto a un'avvio a freddo.

Per distinguere un'avvio rapido da un'ibernazione di riattivazione, un driver può controllare le informazioni nell'IRP del set di sistema (IRP_MN_SET_POWER) che informa il driver che il computer ha immesso lo stato S0 (funzionante). Il percorso dello stack I/O del driver in questo IRP contiene un membro power , che è una struttura che contiene informazioni relative all'alimentazione. A partire da Windows Vista, la struttura membro di Power contiene un membro SystemPowerStateContext , ovvero una struttura SYSTEM_POWER_STATE_CONTEXT che contiene informazioni sugli stati di alimentazione del sistema precedenti. Queste informazioni vengono codificate in campi bit nella struttura SYSTEM_POWER_STATE_CONTEXT .

La maggior parte dei campi bit nella struttura SYSTEM_POWER_STATE_CONTEXT è riservata all'uso del sistema e è opaca per i driver. Questa struttura contiene tuttavia due campi bit, TargetSystemState ed EffectiveSystemState, che possono essere letti dai driver per determinare se si è verificato un avvio rapido o una riattivazione dall'ibernazione.

I campi TargetSystemState ed EffectiveSystemState sono impostati su SYSTEM_POWER_STATE valori di enumerazione. SeTargetSystemState PowerSystemHibernate ed EffectiveSystemState = = PowerSystemHibernate, si è verificato un evento di riattivazione dall'ibernazione.

Tuttavia, seTargetSystemState PowerSystemShutdown e EffectiveSystemState = = PowerSystemHibernate, si è verificato un avvio rapido.

Il campo Bit TargetSystemState specifica l'ultima transizione dello stato di alimentazione del sistema per cui il driver ha ricevuto un'IRP di alimentazione del sistema prima dell'arresto del computer o dell'immissione di ibernazione. Il campo di bit EffectiveSystemState indica lo stato di alimentazione del sistema precedente effettivo del dispositivo, come percepito dall'utente. I valori TargetSystemState ed EffectiveSystemState potrebbero non corrispondere se, ad esempio, il driver ha ricevuto una notifica di una transizione di sistema in sospeso allo stato di ibernazione, ma successivamente si è verificato un arresto ibrido.

Per altre informazioni, vedere SYSTEM_POWER_STATE_CONTEXT.

Preparazione per l'avvio rapido

Per preparare un avvio rapido, Windows esegue una sequenza di arresto completa e salva un file di ibernazione.

  1. Prima di tutto, come in un arresto completo, Windows chiude tutte le applicazioni e registra tutte le sessioni utente. In questa fase, nessuna applicazione è in esecuzione, ma il kernel di Windows viene caricato e la sessione di sistema è in esecuzione.
  2. Successivamente, power manager invia irp di alimentazione del sistema ai driver di dispositivo per indicare loro di preparare i dispositivi per immettere l'ibernazione.
  3. Infine, Windows salva l'immagine di memoria del kernel (inclusi i driver in modalità kernel caricati) in Hiberfil.sys e arresta il computer.

Se il driver per un dispositivo configura il dispositivo in modo diverso a seconda che si verifichi un'avvio a freddo o una riattivazione dall'ibernazione, questo driver deve, dopo un avvio rapido, configurare il dispositivo come se si sia verificato un avvio a freddo. Ad esempio, il driver NDIS fornito dal sistema disabilita le funzionalità di riattivazione miniport in un'avvio veloce, ma non in una riattivazione dall'ibernazione.