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:

    1. Non collegare l'oggetto dispositivo filtro nello stack di dispositivi.
    2. 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.