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

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

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

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

Ценность Режим

0

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

1

Минимальная безопасная загрузка

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 драйвера. Если операционная система находится в безопасном режиме, верните состояние сбоя.