RegCreateKeyEX returns ERROR_INVALID_FUNCTION
RegCreateKeyEX returns ERROR_INVALID_FUNCTION
我正在编写一个需要 create/delete 注册表项的程序。我有一个问题,创建密钥的代码 returns ERROR_INVALID_FUNCTION
.
如果您查看注册表,则密钥已创建,所以我不确定此错误的影响是什么。
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_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 的评论对另一个问题很有用,因为我正在手动检查要使用注册表的哪一部分,他使我能够删除该检查。
我正在编写一个需要 create/delete 注册表项的程序。我有一个问题,创建密钥的代码 returns ERROR_INVALID_FUNCTION
.
如果您查看注册表,则密钥已创建,所以我不确定此错误的影响是什么。
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_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 的评论对另一个问题很有用,因为我正在手动检查要使用注册表的哪一部分,他使我能够删除该检查。