Определение того, работает ли операционная система в безопасном режиме

В этом разделе описывается, как драйвер устройства может определить, запущена ли операционная система, в котором он работает, в безопасном режиме. В этом разделе также описывается, как предотвратить работу драйвера в безопасном режиме.

Ядро операционной системы Microsoft Windows экспортирует указатель с именем InitSafeBootMode. InitSafeBootMode указывает на переменную ULONG, содержащую действующие в настоящее время параметры безопасного режима. Драйвер устройства может проверить эти параметры, чтобы определить, работает ли операционная система в безопасном режиме.

В следующей таблице перечислены режимы для значений переменной InitSafeBootMode .

Значение Режим

0

Операционная система не находится в безопасном режиме.

1

SAFEBOOT_MINIMAL

2

SAFEBOOT_NETWORK

3*

SAFEBOOT_DSREPAIR

Примечание * Значение 3 применяется только к контроллерам домена Windows.

Чтобы использовать переменную InitSafeBootMode , необходимо объявить ее в драйвере, как показано в следующем примере кода.

extern PULONG InitSafeBootMode;

После объявления InitSafeBootMode можно использовать следующий пример кода, чтобы определить, работает ли операционная система в безопасном режиме.

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

Чтобы предотвратить работу драйвера в безопасном режиме, используйте метод из следующего списка, который соответствует вашему типу драйвера:

  • Драйверы функций

    Если драйвер функции имеет тип запуска службы SERVICE_BOOT_START, проверка значение InitSafeBootMode в подпрограмме AddDevice драйвера функции. Если система находится в безопасном режиме, верните состояние сбоя.

    Примечание Никогда не следует возвращать ошибку из подпрограммы DriverEntry .

  • Фильтрация драйверов

    Если драйвер фильтра запускается во время запуска системы, проверка значение InitSafeBootMode в процедуре AddDevice драйвера фильтра. Если операционная система находится в безопасном режиме, сделайте следующее:

    1. Не присоединяйте объект устройства фильтра к стеку устройств.
    2. Возвращает успешное выполнение из процедуры AddDevice драйвера фильтра.
  • Другие драйверы

    Для драйверов, отличных от драйверов функций или фильтров, проверка значение InitSafeBootMode в подпрограмме DriverEntry драйвера. Если операционная система находится в безопасном режиме, верните состояние сбоя.