Determinando se o sistema operacional está em execução no modo de segurança

Este tópico descreve como um driver de dispositivo pode determinar se o sistema operacional em que ele está sendo executado foi iniciado no Modo de Segurança. Este tópico também descreve como impedir que um driver opere no Modo de Segurança.

O kernel do sistema operacional Microsoft Windows exporta um ponteiro chamado InitSafeBootMode. InitSafeBootMode aponta para uma variável ULONG que contém as configurações do Modo de Segurança que estão em vigor no momento. Um driver de dispositivo pode examinar essas configurações para determinar se o sistema operacional está em execução no Modo de Segurança.

A tabela a seguir lista os modos para valores da variável InitSafeBootMode .

Valor Modo

0

O sistema operacional não está no Modo de Segurança.

1

SAFEBOOT_MINIMAL

2

SAFEBOOT_NETWORK

3*

SAFEBOOT_DSREPAIR

Observação * O valor 3 se aplica somente aos controladores de domínio do Windows.

Para usar a variável InitSafeBootMode , você deve declará-la em seu driver, como mostra o exemplo de código a seguir.

extern PULONG InitSafeBootMode;

Depois de declarar InitSafeBootMode, você pode usar o exemplo de código a seguir para determinar se o sistema operacional está em execução no Modo de Segurança.

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

Para impedir que um driver opere no Modo de Segurança, use a técnica na lista a seguir que corresponde ao tipo de driver:

  • Drivers de função

    Se o driver de função tiver um tipo de inicialização de serviço de SERVICE_BOOT_START, marcar o valor de InitSafeBootMode na rotina AddDevice do driver de função. Se o sistema estiver no Modo de Segurança, retorne uma falha status.

    Nota Você nunca deve retornar a falha da rotina DriverEntry .

  • Filtrar drivers

    Se o driver de filtro for iniciado durante a inicialização do sistema, marcar o valor de InitSafeBootMode na rotina AddDevice do driver de filtro. Se o sistema operacional estiver no Modo de Segurança, faça o seguinte:

    1. Não anexe o objeto de dispositivo de filtro à pilha do dispositivo.
    2. Retornar êxito da rotina AddDevice do driver de filtro.
  • Outros drivers

    Para drivers que não sejam drivers de função ou filtro, marcar o valor de InitSafeBootMode na rotina DriverEntry do driver. Se o sistema operacional estiver no Modo de Segurança, retorne uma falha status.