0

Registery からデータを受け取る変数は、どのデータ型を持つべきですか?

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このデータを type の配列に読み込む必要があります。これTCHARは、アプリケーションのビルド方法 (UNICODE/MBCS) に応じて、charまたはとして適切に型指定されwchar_tます。

この API を使用して REG_SZ 文字列を読み取る場合、2 つのことを確認する必要があります。

1) 出力バッファには、後続の NULL ターミネータ用のスペースが必要です。2) 成功した場合、出力バッファは NULL 終了しない可能性があります。

最後のビットは重要です。文字列が NULL ターミネータで格納されていない場合、出力バッファも格納されません。アプリケーションにセキュリティの脆弱性が発生しないように、これを監視して適切に処理する必要があります。

于 2012-08-25T20:00:31.427 に答える