Determinazione del fatto che il sistema operativo sia in esecuzione in modalità provvisoria
Questo argomento descrive come un driver di dispositivo può determinare se il sistema operativo in esecuzione è stato avviato in modalità provvisoria. Questo argomento descrive anche come impedire a un driver di funzionare in modalità provvisoria.
Il kernel del sistema operativo Microsoft Windows esporta un puntatore denominato InitSafeBootMode. InitSafeBootMode punta a una variabile ULONG che contiene le impostazioni della modalità provvisoria attualmente effettive. Un driver di dispositivo può esaminare queste impostazioni per determinare se il sistema operativo è in esecuzione in modalità provvisoria.
Nella tabella seguente sono elencate le modalità per i valori della variabile InitSafeBootMode .
Valore | Modalità |
---|---|
0 |
Il sistema operativo non è in modalità provvisoria. |
1 |
SAFEBOOT_MINIMAL |
2 |
SAFEBOOT_NETWORK |
3* |
SAFEBOOT_DSREPAIR |
Nota * Il valore 3 si applica solo ai controller di dominio Windows.
Per usare la variabile InitSafeBootMode , è necessario dichiararla nel driver, come illustrato nell'esempio di codice seguente.
extern PULONG InitSafeBootMode;
Dopo aver dichiarato InitSafeBootMode, è possibile usare l'esempio di codice seguente per determinare se il sistema operativo è in esecuzione in modalità provvisoria.
if (*InitSafeBootMode > 0) {
// The operating system is in Safe Mode.
// Take appropriate action.
//
}
Per impedire a un driver di funzionare in modalità provvisoria, usare la tecnica nell'elenco seguente che corrisponde al tipo di driver:
Driver di funzione
Se il driver di funzione ha un tipo di avvio del servizio di SERVICE_BOOT_START, controllare il valore di InitSafeBootMode nella routine AddDevice del driver di funzione. Se il sistema è in modalità provvisoria, restituire uno stato di errore.
Nota Non è mai necessario restituire un errore dalla routine DriverEntry .
Filtri driver
Se il driver di filtro viene avviato durante l'avvio del sistema, controllare il valore di InitSafeBootMode nella routine AddDevice del driver di filtro. Se il sistema operativo è in modalità provvisoria, eseguire le operazioni seguenti:
- Non collegare l'oggetto del dispositivo di filtro allo stack di dispositivi.
- Restituisce l'esito positivo dalla routine AddDevice del driver di filtro.
Altri driver
Per i driver diversi da funzione o driver di filtro, controllare il valore di InitSafeBootMode nella routine DriverEntry del driver. Se il sistema operativo è in modalità provvisoria, restituisce uno stato di errore.