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

发布于 2016-11-03 22:30:24 字数 0 浏览 1604 评论 2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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

评论(2

泛泛之交 2017-10-15 07:33:41

原理

在 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 15:56:40

使用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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文