C++ 64位操作系统调用 RegOpenKey() 读取注册表,返回 2, ERROR_FILE_NOT_FOUND
环境:64位操作系统, VS2017
首先在命令行执行
REG ADD HKLM\Software\seastarsun /v serial /t REG_SZ /d 58ae4cb077a4e1
在注册表查看,已存在键值。
但通过C++读取该值,一致返回错误码 2,ERROR_FILE_NOT_FOUND。
同时试验 其他同目录下其他键值,是可以正确返回结果的。
string GetRegStr(string name, char* base)//得到name的字串值s, result必须先初始化
{
HKEY hResult;
char result[256];
strcpy_s(result, "");
LSTATUS status = RegOpenKey(HKEY_LOCAL_MACHINE, base, &hResult);
if (ERROR_SUCCESS != status)
{
cout << status << endl;
return "error";
}
DWORD dwcount = 255;
RegQueryValueEx(hResult, name.c_str(), 0, 0, (BYTE*)&result[0], &dwcount);
RegCloseKey(hResult);
cout<< result<<endl;
return string(result);
}
string get_serial_reg()
{
//读取string类型
//*
char lpSubKey[] = "SOFTWARE\\Seastarsun";
return GetRegStr("Serial", lpSubKey);
//*/
/*
char lpSubKey[] = "SOFTWARE\\7-zip";
return GetRegStr("Path", lpSubKey);
//*/
}
上网查了N久,终于找到 一篇文章,介绍了64位操作系统注册表重定向的信息。
受 http://www.bathome.net/thread-30783-1-1.html。文章启发,WOW6432Node 目录下加入键值,
在 REG ADD HKLM\Software\WOW6432Node\seastarsun /v serial /t REG_SZ /d 58ae4cb077a4e1
重新使用上述函数查看,可以正确返回结果了。
又查看了WOW6432Node 目录下也包含7-zip,修改了WOW6432Node\7-zip的值,返回的也是修改后的。
原来C++ 读取注册表的时候被重定向了。