gpt4 book ai didi

c++ - RegOpenKeyEx() 返回 ERROR_ACCESS_DENIED

转载 作者:行者123 更新时间:2023-11-28 00:38:54 27 4
gpt4 key购买 nike

我想获取 HKEY_CLASSES_ROOT\\SOFTWARE\\Classes\\CLSID 键下的所有 CLSID 键。

我知道该 key 是合并的 HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSIDHKEY_CURRENT_USER\\SOFTWARE\\Classes\\CLSID key 的镜像。

到目前为止,我可以枚举所有 HKEY_CLASSES_ROOT\\SOFTWARE\\Classes\\CLSID(HKEY_LOCAL_MACHINE\\...HKEY_CURRENT_USER\\... )并将该键的名称放入 std::wstring[] 中。但是当我尝试打开那个键时:

//CLSID = e.g. L"{CAFEEFAC-0013-0001-0001-ABCDEFFEDCBB}"
firstKey = HKEY_LOCAL_MACHINE;
keysPath = L"\\SOFTWARE\\Classes\\CLSID\\"+CLSID;
if(x64System)
regsam = KEY_ALL_ACCESS|KEY_WOW64_64KEY; //on my system
else
regsam = KEY_ALL_ACCESS;

result = RegOpenKeyEx(firstKey, keysPath.c_str(), 0, regsam, &outputKey);

适用于HKEY_CURRENT_USER,对于HKEY_LOCAL_MACHINE它返回ERROR_ACCESS_DENIED。即使当我以管理员身份运行我的程序(在regedit.exe 中,我也可以看到 key 的名称是好的,如果它不会出现错误消息将找不到,无论如何都不会 ERROR_ACCESS_DENIED)。

那么我应该怎么做才能访问这些 key ?我确信某些程序可以访问这些 key 。或者至少如何获得它们的默认值(这就是我想要的)?

在我的程序中,我只能使用 RegQueryInfoKey 列出它们的名称,但不能使用 RegOpenKeyEx 访问它们。

最佳答案

即使作为管理员,当启用 UAC 时,您在 HKLM 上也没有 KEY_ALL_ACCESS。如果你想要或需要 KEY_ALL_ACCESS,你需要提升运行你的程序。

将您的权利降低到所需级别。如果您只想阅读,请使用 KEY_READ!

请注意您有一个嵌入式 list ,如果没有 list ,您可能会获得访问权限,但该访问权限是虚拟的,您无法访问真正的 key 。

关于c++ - RegOpenKeyEx() 返回 ERROR_ACCESS_DENIED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19838792/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com