Condividi tramite


Distinguere l'avvio rapido dalla ripresa dall'ibernazione

In Windows sono disponibili tre modalità di avvio:

  • Freddo (tradizionale)

  • Riattivazione dall'ibernazione

  • Veloce (introdotto in Windows 8, combina i primi due)

Per distinguere le startup veloci dalla riattivazione dall'ibernazione, i driver di dispositivo in modalità kernel possono esaminare gli IRP di alimentazione del sistema.

Durante un'avvio a freddo, il caricatore di avvio costruisce un'immagine di memoria kernel caricando le sezioni del file kernel di Windows in memoria e collegandole. Successivamente, il kernel configura le funzioni di sistema principali, 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 rapido tende a richiedere molto meno tempo rispetto all'avvio a freddo.

Per distinguere un avvio rapido da una riattivazione dall'ibernazione, un driver può esaminare le informazioni nel sistema di impostazione della potenza (IRP_MN_SET_POWER) IRP che informa il driver che il computer è entrato nello stato S0 (funzionante). La posizione dello stack di I/O del driver in questo IRP contiene un membro di Power , ovvero 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 di sistema precedenti. Queste informazioni vengono codificate in campi di bit nella struttura SYSTEM_POWER_STATE_CONTEXT .

La maggior parte dei campi di bit nella struttura SYSTEM_POWER_STATE_CONTEXT è riservata per l'uso del sistema e sono opachi per i driver. Tuttavia, questa struttura contiene due campi di 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 di bit TargetSystemState ed EffectiveSystemState sono impostati ai valori dell'enumerazione SYSTEM_POWER_STATE. Se TargetSystemState = PowerSystemHibernate ed EffectiveSystemState = PowerSystemHibernate, si è verificata una riattivazione dall'ibernazione.

Tuttavia, se TargetSystemState = PowerSystemShutdown ed 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 che il computer si arresti o abbia immesso l'ibernazione. Il campo di bit EffectiveSystemState indica lo stato precedente di alimentazione effettivo del sistema del dispositivo, come percepito dall'utente. I valori TargetSystemState ed EffectiveSystemState potrebbero non corrispondere se, ad esempio, il driver ha ricevuto la 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 prepararsi a 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 disconnette tutte le sessioni utente. In questa fase non sono in esecuzione applicazioni, ma il kernel di Windows viene caricato e la sessione di sistema è in esecuzione.

  2. Successivamente, il gestore dell'alimentazione invia gli IRP di alimentazione del sistema ai driver di dispositivo per indicare loro di preparare i propri dispositivi per entrare in ibernazione.

  3. Infine, Windows salva l'immagine della memoria 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 sia verificato un avvio a freddo o una riattivazione dall'ibernazione, questo driver dovrebbe, dopo un avvio rapido, configurare il dispositivo come se si fosse verificato un avvio a freddo. Ad esempio, il driver NDIS fornito dal sistema disabilita le capacità di riattivazione del miniport durante un avvio rapido, ma non durante la riattivazione dall'ibernazione.