提权进程无法在HKEY_CLASSES_ROOT创建以.cr开头的注册表键
提权进程创建
.cr开头注册表键时错误码5(拒绝访问)的排查与解决 问题重现
在提权进程中运行以下代码创建注册表键时,调用RegCreateKeyExW返回错误码5(拒绝访问),无法创建目标键:
DWORD disposition = 0xffffffff; HKEY hkey = 0; LSTATUS result = RegCreateKeyExW(HKEY_CLASSES_ROOT, L".cre", NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hkey, &disposition); std::cout << "Result = " << result << "\n"; std::cout << "Disposition = " << disposition << "\n";
补充信息:
- 将后缀名改为
.cyr等非.cr开头的名称时,可正常创建键; - 所有以
.cr开头的键都会触发此问题,仅非.cr开头的键能在HKEY_CLASSES_ROOT中正常创建; - 可通过注册表编辑器手动创建
.cre及其他.cr开头的键; - 另一台Windows 10设备无此问题;
- 程序确实通过Ctrl+Shift启动的提权命令提示符运行;
- 运行前已确认注册表中不存在
.cre键; - 程序编译为64位。
尝试写入HKEY_LOCAL_MACHINE\Software\Classes路径的代码如下,结果完全相同:
LSTATUS result = RegCreateKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Classes\\.cre", NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hkey, &disposition);
可能的原因及排查方向
1. 第三方安全软件拦截
部分杀毒软件、EDR工具会针对.cr这类可能被恶意软件利用的后缀前缀,拦截其注册表创建行为。可临时禁用本地安全软件后测试,确认是否为拦截导致。
2. 注册表权限继承异常
检查HKEY_LOCAL_MACHINE\Software\Classes的权限设置:
- 右键点击
Classes键 → 权限,确认提权账户拥有写入或完全控制权限; - 进入高级权限设置,查看是否存在针对
.cr前缀的特殊限制规则。
3. Windows Defender应用控制或组策略限制
本地可能配置了WDAC规则或组策略,禁止创建特定前缀的注册表键:
- 运行
gpedit.msc,查看计算机配置\Windows设置\安全设置\软件限制策略,确认是否有注册表路径限制; - 打开事件查看器,在
Windows日志\系统中查找事件ID 4656(注册表操作失败),查看详细拦截原因。
4. 注册表重定向异常
64位程序虽默认访问64位注册表,但可尝试添加KEY_WOW64_64KEY标志明确指定:
LSTATUS result = RegCreateKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Classes\\.cre", NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_WOW64_64KEY, NULL, &hkey, &disposition);
验证步骤
- 给程序添加安全软件信任规则,或临时关闭防护后重新测试;
- 手动创建
.cre键后,对比其权限与程序运行时的权限上下文; - 查看事件日志中的拦截记录,定位具体限制来源。
内容的提问来源于stack exchange,提问作者Jabberwocky
相关产品推荐
相关产品推荐

