我想获取密钥下的所有 CLSID 密钥HKEY_CLASSES_ROOT\\SOFTWARE\\Classes\\CLSID
。
我知道那个键是合并HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID
和HKEY_CURRENT_USER\\SOFTWARE\\Classes\\CLSID
键的镜像。
到目前为止,我可以枚举所有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中,我可以看到该密钥的名称很好,如果它不会,则不会找到错误消息,ERROR_ACCESS_DENIED
无论如何都不会)。
那么我应该怎么做才能访问这些密钥呢?我确信某些程序可以访问这些密钥。或者至少如何获得它们的默认值(这是我想要的全部)?
在我的程序中,我只能列出他们的名字,RegQueryInfoKey
但不能使用RegOpenKeyEx
.