0

从注册表接收数据的变量应该具有哪种数据类型?

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”时,我什么也没得到。

4

1 回答 1

3

a您需要将此数据读入类型为 的数组TCHAR,这取决于您的应用程序的构建方式(UNICODE/MBCS)将正确键入为charwchar_t

使用此 API 读取 REG_SZ 字符串时,您需要确保两件事。

1) 您的输出缓冲区需要为任何尾随 NULL 终止符留出空间 2) 成功后,您的输出缓冲区可能不会被 NULL 终止。

最后一点很重要 - 如果字符串没有使用 NULL 终止符存储,那么您的输出缓冲区也不会。您需要注意这一点并正确处理,以免最终在应用程序中出现安全漏洞。

于 2012-08-25T20:00:31.427 回答