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++ 讀取注冊表的時候被重定向了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM