RegOpenKeyEx返回ERROR_SUCCESS但RegSetValueEx总是返回ERROR_ACCESS_DENIED

时间:2012-03-12 09:12:32

标签: c++

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

我调用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 \软件\微软\的Windows \ CurrentVersion \ Explorer中\ FileExts \ html的\ UserChoice

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

大家好!你能救我吗?

3 个答案:

答案 0 :(得分:2)

您的RegOpenKeyEx电话上的访问级别错误。 ACCESS_SYSTEM_SECURITY不是列出here的有效选项之一。

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

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

答案 1 :(得分:2)

ACCESS_SYSTEM_SECURITY更改为KEY_SET_VALUE

答案 2 :(得分:0)

RegSetValueExA函数

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

参数

hKey

打开的注册表项的句柄。密钥必须已使用 KEY_SET_VALUE 访问权限打开。有关更多信息,请参见Registry Key Security and Access Rights

来自:https://docs.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regsetvalueexa