Winapi 如何使用RegDeleteTree删除密钥\u WOW64\u 64密钥密钥?

Winapi 如何使用RegDeleteTree删除密钥\u WOW64\u 64密钥密钥?,winapi,64-bit,registry,Winapi,64 Bit,Registry,我已经在32位程序中测试了RegDeleteTree()。它只删除键\u WOW64\u 32键键。是否有类似于RegOpenKeyEx()的函数来指定KEY\u WOW64\u 32KEY或KEY\u WOW64\u 64KEY 我已经厌倦了这个代码: HKEY key = NULL; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\asd"), 0, KEY_READ | KEY_WOW64_64KEY, &key) == ERR

我已经在32位程序中测试了
RegDeleteTree()
。它只删除
键\u WOW64\u 32键
键。是否有类似于
RegOpenKeyEx()
的函数来指定
KEY\u WOW64\u 32KEY
KEY\u WOW64\u 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";
    }
}
HKEY=NULL;
如果(RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T(“软件\\asd”)、0、KEY_READ | KEY_WOW64_64KEY,&KEY)=错误_成功)
{
长d=RegDeleteTree(键,NULL);
如果(d!=错误\u成功)
{

不能使用
RegOpenKeyEx
KEY\u WOW64\u 64KEY
打开密钥的64位视图。然后调用
RegDeleteTree
传递返回的密钥


关于您的更新。您仅在打开密钥时请求读取权限。
regdeleteteTree
的文档说明:

必须使用以下访问权限打开密钥:删除、密钥枚举、子密钥和密钥查询值


调用无论如何都会成功,这一事实使我认为您的进程受到虚拟化的影响。您需要为强制UAC提升的进程创建清单。请使用清单中的
requireAdministrator
选项。

使用
RegOpenKeyEx
KEY\u WOW64\u 64KEY
打开密钥的64位视图。然后调用
regdeletetetree
传递返回的密钥


关于您的更新。您仅在打开密钥时请求读取权限。
regdeleteteTree
的文档说明:

必须使用以下访问权限打开密钥:删除、密钥枚举、子密钥和密钥查询值


调用无论如何都会成功,这让我觉得您的进程要进行虚拟化。您需要为强制UAC提升的进程创建清单。请使用清单中的
requireAdministrator
选项。

我相信您只需要在
RegOpenKeyEx()上设置
调用并使用返回的句柄作为
regdeleteteTree()
@Phylogenesis()的参数。但是,它不起作用。@zzy:定义“不起作用”。您试图实现什么?您的实际代码看起来像什么?您期望发生什么,它实际(不)是什么正在执行?是否报告任何错误代码?我相信您只需在
RegOpenKeyEx()
调用上设置,并将返回的句柄用作
RegDeleteTree()
@Phylogenesis的参数。但是,它不起作用。@zzy:define“不起作用”。你想达到什么目的?你的实际代码是什么样子的?你期望发生什么,它实际上(没有)在做什么?是否有任何错误代码被报告?我尝试了
regdeleteteTree(returnedKey,NULL)
,但它不起作用。我仍然相信我的答案是正确的我尝试了
RegDeleteTree(returnedKey,NULL)
但它不起作用。我仍然相信我的答案是准确的