64 ビット マシンで Windows レジストリ値を取得する単純な C++ プログラムを作成しています。問題は、レジストリの約 50% でしか機能せず、残りの半分では "ret" が ERROR_SUCCESS(0) を返さないことです。
私の質問は、これらの一貫性のないリターンが得られる理由と、パスを2つのディレクトリよりも長くしようとすると壊れることです。元。
keypath = TEXT("SOFTWARE\\Perl\\ASDF");
これが私のコードです。
LPCTSTR keypath = TEXT("SOFTWARE\\Perl");
HKEY key = NULL;
LONG ret = ERROR_SUCCESS;
DWORD BufferSize = TOTALBYTES;
DWORD cbData;
DWORD dwRet;
DWORD type;
char registry[256] = {'\0'};
ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, keypath, 0, KEY_QUERY_VALUE, &key);
PPERF_DATA_BLOCK PerfData = (PPERF_DATA_BLOCK) malloc( BufferSize );
cbData = BufferSize;
if (ret == ERROR_SUCCESS)
{
dwRet = RegQueryValueEx( key,
TEXT("BinDir"),
NULL,
&type,
(LPBYTE) PerfData,
&cbData );
RegCloseKey(key);
printf("\nFinal buffer size is %d\n", BufferSize);
int i = 0;
while ((*PerfData).Signature[i] != NULL)
{
registry[i] = (char)(*PerfData).Signature[i];
i++;
}
printf("registery: %s\n", registry);
}
修正の編集。