Things I learnt this week: RegQueryValueEx
RegQueryValueEx
, when passed lpData = NULL
, will set *lpcbData
to the length required in bytes, even if it’s
already set to something. If lpData != NULL
, and *lpcbData
is too short, RegQueryValueEx
will return
ERROR_MORE_DATA
.
This means that you probably ought to call it in a loop, like this:
DWORD cbData = 0;
BYTE *pData = (BYTE *)malloc(cbData);
do
{
result = RegQueryValueEx(hKey, pszValueName, NULL, NULL, pData, &cbData);
if (result == ERROR_SUCCESS)
break;
free(pData);
pData = (BYTE *)malloc(cbData);
} while (result == ERROR_MORE_DATA);
if (result == ERROR_SUCCESS)
{
// Do something with pData
}
free(pData);