Condividi tramite


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.