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:

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