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++ 读取注册表的时候被重定向了。

 

posted on 2018-08-23 15:21  若水无言  阅读(3055)  评论(0编辑  收藏  举报