C++ RegCreateKeyEX返回错误\无效\函数

C++ RegCreateKeyEX返回错误\无效\函数,c++,windows,error-handling,registry,C++,Windows,Error Handling,Registry,我正在编写一个需要创建/删除注册表项的程序。我遇到一个问题,创建密钥的代码返回错误\u无效\u函数 如果您查看注册表,则该项已创建,因此我不确定此错误的影响 The value of key is "SOFTWARE\\Wow6432Node\\COMPANY\\APPLICATION" 代码是: int RegistryViewer::CreateRegistryLocation(const char* key) { HKEY hkey = 0; int retVal = R

我正在编写一个需要创建/删除注册表项的程序。我遇到一个问题,创建密钥的代码返回
错误\u无效\u函数

如果您查看注册表,则该项已创建,因此我不确定此错误的影响

The value of key is "SOFTWARE\\Wow6432Node\\COMPANY\\APPLICATION"
代码是:

int RegistryViewer::CreateRegistryLocation(const char* key)
{
    HKEY hkey = 0;
    int retVal = RegistryViewer::OpenRegistryLocation(key);
    if(retVal != ERROR_SUCCESS)
    {
        retVal = RegCreateKeyEx(HKEY_LOCAL_MACHINE, CString(key), 0, NULL,REG_OPTION_NON_VOLATILE, KEY_WOW64_32KEY | KEY_WRITE, NULL, &hkey, NULL);
RegCloseKey(hkey);  
}

    return retVal;
}
问题是,虽然密钥已创建,但无法正确设置权限


谢谢。

我将回答我自己的问题,以防将来对他人有所帮助。我想我有两个问题限制了对注册表项的访问,首先我打开了它两次(一次是为了查看它的存在,然后是在它被创建时),其次我分配了它
key\u WRITE
权限。由于
RegCreateKeyEx
打开了一个键,如果它已经存在,那么第一次检查是没有意义的,并且可能一直保存着资源。我不确定第二件事是否有问题,但由于代码中的内容发生了变化,我想我应该提及它

工作代码如下所示:

//Create a registry location
int RegistryViewer::CreateRegistryLocation(const char* key)
{
    HKEY hkey = 0;
    int retVal = RegCreateKeyEx(HKEY_LOCAL_MACHINE, CString(key), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WOW64_32KEY | KEY_ALL_ACCESS, NULL, &hkey, NULL);

    if(retVal == ERROR_SUCCESS)
        RegCloseKey(hkey);

    return retVal;
}

eryksun的评论对另一个问题很有用,尽管我正在手动检查注册表的哪个部分要使用,他使我能够删除该检查。

我不知道为什么它会失败并出现该特定错误,但我怀疑它是否能满足您的要求。指定
KEY\u WOW64\u 32KEY
时,不要显式引用“Wow6432Node”。重定向是自动的。只需使用
“软件\\公司\\应用程序”