如何使用RegDeleteTree删除KEY_WOW64_64KEY键?

时间:2015-07-30 09:46:24

标签: winapi 64-bit registry

我在32位程序中测试了RegDeleteTree()。它只删除KEY_WOW64_32KEY密钥。是否有像RegOpenKeyEx()这样的函数来指定KEY_WOW64_32KEYKEY_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。

1 个答案:

答案 0 :(得分:0)

使用RegOpenKeyExKEY_WOW64_64KEY打开密钥的64位视图。然后调用RegDeleteTree传递返回的密钥。

关于您的更新。您只需在打开密钥时请求读取权限。 RegDeleteTree州的文档:

  

必须使用以下访问权限打开密钥:DELETE,KEY_ENUMERATE_SUB_KEYS和KEY_QUERY_VALUE。

无论如何,呼叫成功的事实让我认为您的流程受虚拟化的影响。您需要为强制UAC提升的进程设置清单。使用清单中的requireAdministrator选项。