Определение того, работает ли операционная система в безопасном режиме
В этом разделе описывается, как драйвер устройства может определить, запущена ли операционная система, в котором он работает, в безопасном режиме. В этом разделе также описывается, как предотвратить работу драйвера в безопасном режиме.
Ядро операционной системы 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 драйвера фильтра. Если операционная система находится в безопасном режиме, сделайте следующее:
- Не присоединяйте объект устройства фильтра к стеку устройств.
- Возвращает успешное выполнение из процедуры AddDevice драйвера фильтра.
Другие драйверы
Для драйверов, отличных от драйверов функций или фильтров, проверка значение InitSafeBootMode в подпрограмме DriverEntry драйвера. Если операционная система находится в безопасном режиме, верните состояние сбоя.