原文:https://jocent.me/2017/06/12/disable_safemode.html
安全模式是Windows操作系统中一种特殊的登陆系统的方式。该模式是在不加载第三方设备驱动程序的情况下启动操作系统,进入后可以删除顽固文件、查杀病毒、解除组策略等。因为企业办公网环境下往往会部署一些安全防护类的软件,用户如果能够进入安全模式,则轻易的就可以干掉这些防护类、监控类的软件,所以企业内部往往会禁用安全模式。手动禁用往往比较麻烦,网上下载的工具质量又参差不齐,因此本文将介绍禁用安全模式以及禁用之后再启用安全模式的代码层面实现方法,你自己就可以写一个,快捷方便安全。
方法其实比较简单,就是把注册表
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SafeBoot
键下的Minimal
和Network
键删掉 或 改名即可。推荐改个名字(方便以后恢复启用安全模式),比如: 改成Minimal_backup,Network_backup 等。如果手动的进行修改的话,由于权限不足,操作会比较麻烦,可参考百度经验。
本文主要介绍下如何使用代码的方式去实现禁用,文章最后会给出现成的工具下载链接。
第一步,调整进程权限
CAccessToken token;CAccessToken token; token.GetProcessToken(TOKEN_ALL_ACCESS); token.EnablePrivilege(SE_TAKE_OWNERSHIP_NAME);
第二步,调整指定注册表键的权限
下面以更改 MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal
的权限为例,Network键是一样的
SetNamedSecurityInfoW(L"MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal", SE_REGISTRY_KEY, OWNER_SECURITY_INFORMATION, (PSID)Sids::Admins().GetPSID(), NULL, NULL, NULL); CDacl dacl; dacl.AddAllowedAce(Sids::Admins(), GENERIC_ALL); SetNamedSecurityInfoW(L"MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal", SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, NULL, NULL, (PACL)dacl.GetPACL(), NULL);
第三步,将 Minimal 和 Network 改名或删除即可,由于比较简单,这一步就不贴代码了
上面介绍的是禁用的方法,启用的方法就是其逆过程,将之前改的名字再改回去即可
也可以在修改之前先备份一下SafeBoot的注册表,供恢复使用,备份命令如下
REG EXPORT HKLMSYSTEMCurrentControlSetControlSafeBoot D:safemode.reg
禁用安全模式工具下载链接:DisableSafeMode 地址2 地址3
使用方法:1. 双击运行是禁用安全模式,需要以管理员方式运行 2. 命令行方式执行,带任意的参数(比如: DisableSafeMode.exe xxx),是启用安全模式。
工具会修改敏感位置注册表,所以安全工具会弹个窗警告一下。
注意:对于个人用户其实是不推荐禁用安全模式的,当因为某些原因无法进入系统时,安全模式是救命稻草。
补充:也可以使用命令修改注册表单独禁用"最后一次正确的配置"
Reg Add "HKEY_LOCAL_MACHINESYSTEMSelect" /v LastKnownGood /t REG_DWORD /d 00000001 /f Reg Add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" /v ReportBootOk /t REG_SZ /d 0 /f