InitSafeBootMode使用规则
2024-09-11
6
0
Microsoft Windows 操作系统内核导出名为 InitSafeBootMode 的指针。 InitSafeBootMode 指向包含当前有效的安全模式设置的 ULONG 变量。 设备驱动程序可以检查这些设置,以确定操作系统是否在安全模式下运行。
InitSafeBootMode 变量对应的模式。
- 0:操作系统未处于安全模式。
- 1:SAFEBOOT_MINIMAL
- 2:SAFEBOOT_NETWORK
- 3:SAFEBOOT_DSREPAIR 注意:仅适用于 Windows 域控制器。
若要使用 InitSafeBootMode 变量,必须在驱动程序中声明它,如以下代码示例所示:
extern PULONG InitSafeBootMode;
//声明 InitSafeBootMode 后,可以使用以下代码示例来确定操作系统是否在安全模式下运行
if (*InitSafeBootMode > 0)
{
// The operating system is in Safe Mode.
// Take appropriate action.
//
}
若要防止驱动程序在安全模式下运行,请使用以下列表中与驱动程序类型匹配的技术:
1。功能驱动程序:如果功能驱动程序的服务启动类型为 SERVICE_BOOT_START,请在功能驱动程序的 AddDevice 例程中检查 InitSafeBootMode 的值。 如果系统处于安全模式,则返回失败状态。注意 切勿从 DriverEntry 例程返回失败。
这里只是建议上的规则,但是实际上很多第三方的所谓的保护驱动都是在DriverEntry中判断的。
NTSTATUS __stdcall DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
NTSTATUS status = 0xC0000001;
if ( InitSafeBootMode )
return 0xC0000001;
...
}
2。 Filter驱动程序:如果Filter驱动程序在系统启动期间启动,请在Filter驱动程序的 AddDevice 例程中检查 InitSafeBootMode 的值。 如果操作系统处于安全模式,请执行以下操作:
不要将Filter设备对象附加到设备堆栈。
从Filter驱动程序的 AddDevice 例程返回成功。
3。 其他驱动程序:对于除功能或Filter驱动程序以外的驱动程序,在驱动程序的 DriverEntry 例程中检查 InitSafeBootMode 的值。 如果操作系统处于安全模式,则返回失败状态。