Determinare se il sistema operativo è in esecuzione in Cassaforte predefinita
Questo argomento descrive come un driver di dispositivo può determinare se il sistema operativo in cui è in esecuzione è stato avviato in Cassaforte modalità. Questo argomento descrive anche come impedire a un driver di operare in modalità Cassaforte automatica.
Il kernel del Windows del sistema operativo Microsoft esporta un puntatore denominato InitSafeBootMode. InitSafeBootMode punta a una variabile ULONG che contiene le impostazioni Cassaforte modalità utente attualmente in vigore. Un driver di dispositivo può esaminare queste impostazioni per determinare se il sistema operativo è in esecuzione in Cassaforte modalità.
Nella tabella seguente sono elencate le modalità per i valori della variabile InitSafeBootMode .
Valore | Modalità |
---|---|
0 |
Il sistema operativo non è in Cassaforte predefinita. |
1 |
SAFEBOOT_MINIMAL |
2 |
SAFEBOOT_NETWORK |
3* |
SAFEBOOT_DSREPAIR |
Nota * Il valore 3 si applica solo Windows controller di dominio.
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 Cassaforte modalità.
if (*InitSafeBootMode > 0) {
// The operating system is in Safe Mode.
// Take appropriate action.
//
}
Per impedire il funzionamento di un driver in modalità Cassaforte, usare la tecnica nell'elenco seguente corrispondente al tipo di driver:
Driver di funzione
Se il driver della funzione ha un tipo di avvio del servizio SERVICE_BOOT_START, controllare il valore di InitSafeBootMode nella routine AddDevice del driver della funzione. Se il sistema è in modalità Cassaforte, restituire uno stato di errore.
Nota Non è mai necessario restituire un errore dalla routine DriverEntry .
Filtrare i 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 Cassaforte, eseguire le operazioni seguenti:
- Non collegare l'oggetto dispositivo filtro nello stack di dispositivi.
- Restituisce l'esito positivo dalla routine AddDevice del driver di filtro.
Altri driver
Per driver diversi dai driver di funzione o filtro, controllare il valore di InitSafeBootMode nella routine DriverEntry del driver. Se il sistema operativo è in modalità Cassaforte, restituire uno stato di errore.