我在32位程序中测试了RegDeleteTree()
。它只删除KEY_WOW64_32KEY
密钥。是否有像RegOpenKeyEx()
这样的函数来指定KEY_WOW64_32KEY
或KEY_WOW64_64KEY
?
我已经厌倦了这段代码:
HKEY key = NULL;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\asd"), 0, KEY_READ | KEY_WOW64_64KEY, &key) == ERROR_SUCCESS)
{
long d = RegDeleteTree(key, NULL);
if (d != ERROR_SUCCESS)
{
cout << "Error" << d;
}
else
{
cout << "Success";
}
}
输出为Success,但密钥仍在注册表中退出。我在Windows 7上使用VS 2013运行它并编译为win32程序而不是x64。
答案 0 :(得分:0)
使用RegOpenKeyEx
和KEY_WOW64_64KEY
打开密钥的64位视图。然后调用RegDeleteTree
传递返回的密钥。
关于您的更新。您只需在打开密钥时请求读取权限。 RegDeleteTree
州的文档:
必须使用以下访问权限打开密钥:DELETE,KEY_ENUMERATE_SUB_KEYS和KEY_QUERY_VALUE。
无论如何,呼叫成功的事实让我认为您的流程受虚拟化的影响。您需要为强制UAC提升的进程设置清单。使用清单中的requireAdministrator
选项。