c++ - Windows UAC 设置为始终通知时无法写入注册表

标签 c++ windows registry

我有一个 C++ 应用程序,我们在其中将设置写入注册表(在我的应用程序的 HKEY_CURRENT_USER 和 HKEY_LOCAL_MACHINE 下)。当 Windows 用户访问控制设置为始终通知时,RegCreateKeyEx 方法返回访问被拒绝并且它不会写入 HKEY_LOCAL_MACHINE但它在 HKEY_CURRENT_USER 注册表中成功写入。 我正在使用这种方法来写:

lRet = RegCreateKeyEx( m_hSWRootKey, LPCTSTR(strKey), 
0, _T(""), m_dwCreationFlag, KEY_WRITE | KEY_READ, 
NULL, &hKey, &Disposition );

当 UAC 设置为从不通知时,此方法工作正常。

为什么不写入HKEY_LOCAL_MACHINE? 我如何覆盖 Windows UAC 设置,以便在设置为“始终通知”时能够写入?

请提出建议。

最佳答案

除非您拥有管理员权限,否则您无法写入 HKEY_LOCAL_MACHINE。对于基于 NT 的 Windows 版本,情况一直如此。 UAC 的变化是管理员用户默认使用标准用户 token 运行,并且仅提升以获得需要提升权限的操作的管理权限。

你有两个选择:

  1. 找到一种无需写入 HKEY_LOCAL_MACHINE 即可实现目标的方法。
  2. 要求用户获得写入 HKEY_LOCAL_MACHINE 的应用部分的管理员权限。

在这些选项中,第一个是迄今为止首选的。

关于c++ - Windows UAC 设置为始终通知时无法写入注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6016094/

相关文章:

c++ - 回顾我的 C++ 多维数组指针

c++ - 链接某些 Windows API 时出现链接器错误

c++ - 如何检测 Windows 更新状态

c++ - 编写自定义 GetModuleHandle 函数的原因是什么?

c++ - 在 C++11 中,我可以引用在模板参数中定义的枚举类吗

windows - 在 Windows 上初始化 PostgreSQL DB 时出现拒绝访问错误

c# - 在 C# 中使用/或\\for 文件夹路径

判断 .dll 文件是 32 位还是 64 位的 Windows 命令?

internet-explorer - "check whether IE is the default browser"的 Windows 注册表项?

c++ - 使用 QNetworkAccessManager 发送 HTTP 请求