判断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 AR T ,在功能驱动的AddDevice 例程中检查InitSafeBootMode 的值。如果系统处于安全模式下,则返回错误。

注:在DriverEntry 例程中,返回值一定不能为错误。

2.       过滤驱动

如果驱动是过滤驱动,则在系统启动过程中在 AddDevice 例程中检查InitSafeBootMode 的值。如果操作系统处于安全模式下,则:

            1)  不要附加过滤设备到设备堆栈上去

            2)  在过滤驱动的 AddDevice 例程中返回成功。

3.       其他驱动

对于其他驱动,在驱动的 DriverEntry 例程中检查 InitSafeBootModed 的值。如果系统处于安全模式,则返回表示错误的代码。

猜你喜欢

转载自luck-donkey.iteye.com/blog/911460