1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| //RegQueryInfoKey donne la taille maximale des buffers
DWORD cValues, maxValueNameLen, maxValueLen;
LONG ret = RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &cValues, &maxValueNameLen, &maxValueLen, NULL, NULL);
if(ret != ERROR_SUCCESS)
return;
TCHAR* valueNameBuf = new TCHAR[maxValueNameLen+1];
BYTE* valueDataBuf = new BYTE[maxValueLen];
TCHAR* stringValueDataBuf = new TCHAR[maxValueLen+1];
for(DWORD i=0 ; i<cValues ; i++)
{
DWORD cchValueName = maxValueNameLen+1;
DWORD cbData = maxValueLen;
DWORD type;
ret = RegEnumValue(hKey, i, valueNameBuf, &cchValueName, NULL, &type, valueDataBuf, &cbData);
if(ret == ERROR_SUCCESS)
{
_tprintf(TEXT("Valeur: %s\n"), valueNameBuf);
if(type==REG_SZ)
{
//Copie la valeur dans une chaîne, où on sera sûr d'avoir un caractère nul à la fin.
#ifdef _tcsncpy_s
_tcsncpy_s(stringValueDataBuf, maxValueLen+1, reinterpret_cast<LPTSTR>(valueDataBuf), _TRUNCATE);
#else
_tcsncpy(stringValueDataBuf, reinterpret_cast<LPTSTR>(valueDataBuf), maxValueLen);
stringValueDataBuf[maxValueLen] = TEXT('\0');
#endif
_tprintf(TEXT("\tDonnees: %s\n"), stringValueDataBuf);
}
}
}
delete[] stringValueDataBuf;
delete[] valueDataBuf;
delete[] valueNameBuf; |
Partager