Windows-如何得知Windows操作系统是否处于安全模式?

Windows-如何得知Windows操作系统是否处于安全模式?

偏爱自由 发布于 2016-11-03 字数 0 浏览 1221 回复 2

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泛泛之交 2017-10-15 2 楼

原理

在 Windows 操作系统核心中导出了一个指针变量,它保存了一个声明为 ULONG 类型的数据,这个指针变量被命名成 InitSafeBootMode 。这个变量保存着现在操作系统的安全模式情况的值。在设备驱动中,可以检查这个变量的值来判断 Windows 操作系统是否处于安全模式。

InitSafeBootMode 取值情况如下:

0 操作系统不是处于安全模式中
1 SAFEBOOT_MINIMAL
2 SAFEBOOT_NETWORK

3 SAFEBOOT_DSREPAIR

 注:值 3 只适用于 Windows 域控制器版本。

2. 使用方式

 为了使用这个变量,需要先声明这个变量:
extern PULONG InitSafeBootMode;
在声明了 InitSafeBootMode 变量后,就可以按照下面的方式来使用这个变量:
if(*InitSafeBootMode >0)
{
// 操作系统现在处于安全模式中,可以采取相应的行动
//
}

引用:

http://luck-donkey.iteye.com/blog/911460

虐人心 2017-04-05 1 楼

使用GetSystemMetrics函数

int WINAPI GetSystemMetrics(
__in int nIndex
);

nIndex参数为SM_CLEANBOOT(67)时的返回值:

0 - Normal boot
1 - Fail-safe boot
2 - Fail-safe with network boot

A fail-safe boot (also called SafeBoot, Safe Mode, or Clean Boot) bypasses the user startup files.

fail-safe boot就是通常说的“安全模式”。

NSIS中的调用示例:

Section "DetectSafeBoot"
System::Call 'user32::GetSystemMetrics(i ${SM_CLEANBOOT}) i .r0'
DetailPrint "Returning values:"
DetailPrint "0 - Normal boot"
DetailPrint "1 - Fail-safe boot"
DetailPrint "2 - Fail-safe with network boot"
DetailPrint "You PC started as: $0"
SectionEnd

更多信息参考MSDN