日期:2014-05-17  浏览次数:21186 次

判断Windows是否处于安全模式

判断 Windows 是否处于安全模式

一、前言

?

?? 在开发驱动的时候,在有的情况下需要查看操作系统是不是运行在安全模式下。比如我们如果判断出系统正处于安全模式下,就不让驱动程序加载成功。

二、原理

?

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

InitSafeBootMode 取值情况如下:

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

SAF E B O O T _ N ET W O R K

3

SAF E B O O T _ DS R EP A I R

?

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

?

三、使用方式

?????? 为了使用这个变量,需要先声明这个变量:

extern PULONG InitSafeBootMode;

?????? 在声明了 InitSafeBootMode 变量后,就可以按照下面的方式来使用这个变量:

?? ???? i f ( * In i t S af e B o ot M o d e > 0 )

????? {

?????? / / 操作系统现在处于安全模式中,可以采取相应的行动

?????? //

???? }

四、使用注意

?????? 为了阻止在安全模式下对驱动进行操作,根据不同的驱动类型按照下面的列表的使用建议进行处理:

1.?????? 功能驱动

如果驱动的服务启动类型是 SER V I CE_ BOO T_ ST A