Determinar si el sistema operativo se está ejecutando en modo seguro

En este tema se describe cómo un controlador de dispositivo puede determinar si el sistema operativo en el que se ejecuta se inició en modo seguro. En este tema también se describe cómo evitar que un controlador funcione en modo seguro.

El kernel del sistema operativo Microsoft Windows exporta un puntero denominado InitSafeBootMode. InitSafeBootMode apunta a una variable ULONG que contiene la configuración del modo seguro que está actualmente en vigor. Un controlador de dispositivo puede examinar esta configuración para determinar si el sistema operativo se ejecuta en modo seguro.

En la tabla siguiente se enumeran los modos de los valores de la variable InitSafeBootMode .

Value Modo

0

El sistema operativo no está en modo seguro.

1

SAFEBOOT_MINIMAL

2

SAFEBOOT_NETWORK

3*

SAFEBOOT_DSREPAIR

Nota * El valor 3 solo se aplica a los controladores de dominio de Windows.

Para usar la variable InitSafeBootMode , debe declararla en el controlador, como se muestra en el ejemplo de código siguiente.

extern PULONG InitSafeBootMode;

Después de declarar InitSafeBootMode, puede usar el siguiente ejemplo de código para determinar si el sistema operativo se ejecuta en modo seguro.

if (*InitSafeBootMode > 0) {
    // The operating system is in Safe Mode.
    // Take appropriate action.
    //
}

Para evitar que un controlador funcione en modo seguro, use la técnica de la siguiente lista que coincida con el tipo de controlador:

  • Controladores de función

    Si el controlador de función tiene un tipo de inicio de servicio de SERVICE_BOOT_START, compruebe el valor de InitSafeBootMode en la rutina AddDevice del controlador de función. Si el sistema está en modo seguro, devuelva un estado de error.

    Nota Nunca debe devolver el error de la rutina DriverEntry .

  • Filtrar controladores

    Si el controlador de filtro se inicia durante el inicio del sistema, compruebe el valor de InitSafeBootMode en la rutina AddDevice del controlador de filtro. Si el sistema operativo está en modo seguro, haga lo siguiente:

    1. No adjunte el objeto de dispositivo de filtro a la pila de dispositivos.
    2. Devuelve el éxito de la rutina AddDevice del controlador de filtro.
  • Otros controladores

    En el caso de los controladores distintos de los controladores de función o filtro, compruebe el valor de InitSafeBootMode en la rutina DriverEntry del controlador. Si el sistema operativo está en modo seguro, devuelva un estado de error.