Determining whether the operating system is running in safe mode--from ddk

这个话题描述了一个设备驱动怎么确定正在运行的操作系统是否开始于安全模式(started in Safe Mode),并且描述了如何阻止驱动在安全模式下运行。
Windows 操作系统内核导出(export)了一个指向类型为ULONG, 名为InitSafeBootMode变量 的指针。InitSafeBootMode 变量包含当前安全模式下的各种配置信息。设备驱动可以通过检测这个变量来确定操作系统是否运行在安全模式。
下面列出关于InitSafeBootMode的值与模式对应表:

value       mode 
0           the operating system is mot in safe mode 
1           safeboot_minimal
2           safeboot_network
3*          safeboot_dsrepair

注意 :只有系统主要控制者(windows domain controllers) 可以使用值3。
要使用InitSafeBootMode变量,首先必须在你的驱动里对它进行声明,如下:

extern PULONG IintSafeBootMode;

声明之后,可以参照下面的例子来确定操作系统是否运行在安全模式下:

if(*InitSafeBootMode>0)
{
    //the operating system is in safe mode.在安全模式下
    //take appropriate action.采取合适的措施
}

使用下面的技巧,根据你的驱动类型来阻止它运行在安全模式下:
*功能型驱动(function drivers)
如果你的功能驱动有一个开始类型(start type)为SERVICE_BOOT_START(在系统启动时开始),在驱动的 AddDevice 例程里检测InitSafeBootMode 的值。如果系统运行在安全模式下,返回一个失败状态(failure status)。
注意: 你一定不要再DriverEntry 例程里返回一个失败。(You must never return failure from the DriverEntry routine.)
*过滤型驱动(filterdrivers)
如果你的过滤驱动在系统开始(system startup),在驱动的 AddDevice 例程里检测InitSafeBootMode 的值,如果系统运行在安全模式下,进行以下操作:
1.不要将过滤设备对象附加到(attach to) 设备栈
2.在过滤驱动的AddDevice例程里返回成功。
*其他类型驱动(other drivers)
除了功能型和过滤型的驱动,其他类型的在DriverEntry例程里检测InitSafeBootMode的值 。如果操作系统运行在安全模式下,返回一个失败状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值