【问题标题】:RegOpenKeyEx returns ERROR_SUCCESS but RegSetValueEx allways returns ERROR_ACCESS_DENIEDRegOpenKeyEx 返回 ERROR_SUCCESS 但 RegSetValueEx 总是返回 ERROR_ACCESS_DENIED
【发布时间】:2012-03-12 09:12:31
【问题描述】:

我正在编写一个用于在注册表上设置键/值的函数。我有一个问题:

我调用 RegOpenKeyEx() 并返回 ERROR_SUCCESS 和

然后我调用 RegSetValueEx 来设置键/值,但它返回 ERROR_ACCESS_DENIED

RegOpenKeyEx((HKEY)hive, branch.c_str(), NULL, ACCESS_SYSTEM_SECURITY, &hkey_result);

RegSetValueEx(hkey_result, name.c_str(), 0, REG_SZ, (BYTE*)value.c_str(), 
    ((DWORD)wcslen(value.c_str()) + 1)* sizeof(wchar_t));

我的函数在 Windows 7 上运行,我的程序还通过使用 vs2010 IDE 嵌入清单来设置 UAC

我要设置键/值的分支: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.html\UserChoice

我认识到,当我在 UserChoice 上选择权限菜单(使用注册表编辑器 (Regedt32.exe))时,它具有“特殊权限”字段,并且在拒绝列上选中​​了“设置值”项

大家好!你能帮帮我吗?

【问题讨论】:

  • 你试过以管理员身份运行 vs2010 吗?您拥有计算机上的所有权利吗?
  • 是的,我在我的电脑上运行权限
  • 为什么要绕过用户设置?这正是密钥上的特定安全设置旨在防止的那种事情!
  • 因为我的应用需要对用户设置做一些事情。你有什么解决办法让我解决吗?
  • 让用户选择他们的用户设置。这就是为什么它们是用户设置。

标签: c++


【解决方案1】:

ACCESS_SYSTEM_SECURITY 更改为KEY_SET_VALUE

【讨论】:

    【解决方案2】:

    您在 RegOpenKeyEx 调用中的访问级别错误。 ACCESS_SYSTEM_SECURITY 不是here 列出的有效选项之一。

    ACCESS_SYSTEM_SECURITY 的值与 SYNCHRONIZE | 对应的值相同STANDARD_RIGHTS_REQUIRED。这些标志影响标志的顶部单词,而注册表访问权限位于底部单词中。

    尝试 KEY_WRITE,如果 KEY_WRITE 没有为您提供足够的访问权限,请尝试 KEY_ALL_ACCESS。

    【讨论】:

    • 我也尝试 KEY_WRITE,或者如果 KEY_WRITE 按照您的建议尝试 KEY_ALL_ACCESS,但 RegOpenKeyEx 总是返回 ERROR_ACCESS_DENIED。
    • 好的。将它们留在原处,因为 ACCESS_SYSTEM_SECURITY 根本不会给您任何访问权限。我假设您是以登录用户的身份运行的,而不是作为服务运行的?
    • 我以管理员身份运行。
    • 好的。我问是因为当程序作为服务运行(配置为作为 LocalSystem 运行)时,注册表的 HKEY_CURRENT_USER 部分不存在(它没有为你加载。)这里不相关。
    • 我以管理员身份运行,我也看到了分支,但我无法调用 RegSetValueEx 来设置键/值,如上述问题(ERROR_ACCESS_DENIED)
    【解决方案3】:

    RegSetValueExA 函数

    设置注册表项下指定值的数据和类型。

    参数

    hKey

    打开的注册表项的句柄。必须以 KEY_SET_VALUE 访问权限打开密钥。如需更多信息,请参阅Registry Key Security and Access Rights

    发件人:https://docs.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regsetvalueexa

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 2017-06-30
      • 2011-12-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多