2012-08-25 19 views
0

哪些數據類型應該從Registery中獲取數據的變量有?RegQueryValueEx REG_SZ [C++]

HKEY hKey; 
HKEY hKey2; 

DWORD dwMHz = MAX_PATH; 
string pName; 


long lError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
     "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", 
     0, 
     KEY_READ, 
     &hKey); 
long lError2 = RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
     "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", 
     0, 
     KEY_READ, 
     &hKey2); 

// Working 
RegQueryValueEx(hKey, "~MHz", NULL, NULL, (LPBYTE) &dwMHz, &BufSize); 

//Not working           <-- THIS --> 
RegQueryValueEx(hKey2, "ProcessorNameInfo", NULL, NULL, (LPBYTE) &pName, &BufSize2); 


cout << " Processor frequency: " << dwMHz/1024 << " GHz" << endl; 
cout << " Processor Name: " << pName << endl; 

RegCloseKey(hKey); 
RegCloseKey(hKey2); 

當我嘗試打印'pName'時,我什麼也沒得到。

+0

'std :: string *'視爲'LPBYTE'不是你想要的。 – oldrinb

+0

那我想要什麼?我有點新C++ – MAA

回答

3

aYou'll要讀這些數據轉化TCHAR類型的數組,這取決於你的應用程序如何生成(UNICODE/MBCS)將被正確輸入爲charwchar_t

使用此API讀取REG_SZ字符串時,您需要確保2件事。

1)您的輸出緩衝區需要有空間用於任何尾隨NULL終止符 2)成功時,您的輸出緩衝區可能不爲NULL終止。

最後一點很重要 - 如果字符串沒有用NULL終止符存儲,那麼你的輸出緩衝區也不會。您需要注意並妥善處理,以免在應用程序中出現安全漏洞。

相關問題