Returning invalid data from RegQueryValueEx() DWORD

1

I'm trying to read a DWORD value from the registry. In the registry, it's stored as 0x00000068 (104). When I read the value from the registry, I'm getting a very large number (3435973836). Any help is appreciated!

DWORD getRecentId(PDWORD id) {
    HKEY hKey;

    LONG lRes = RegOpenKeyEx(HKEY_CURRENT_USER, _T("SOFTWARE\\My App\\Feed Reader"), 0, KEY_QUERY_VALUE, &hKey);

    if (!lRes == ERROR_SUCCESS)
    {
        RegCloseKey(hKey);

        return ERROR_FILE_NOT_FOUND;
    }

    DWORD dwSize = sizeof(DWORD);

    lRes = RegQueryValueEx(hKey, _T("Latest"), NULL, NULL, (LPBYTE)&id, &dwSize);

    if (!lRes == ERROR_SUCCESS)
    {
        RegCloseKey(hKey);

        return ERROR_NOT_ENOUGH_MEMORY;
    }

    RegCloseKey(hKey);

    return lRes;
}
c++
winapi
asked on Stack Overflow Nov 22, 2013 by TheRedAgent

1 Answer

3

3435973836 is a magic number. Convert it to hex to get 0xcccccccc. When you see that back in the Visual Studio debugger then you know that you are using an uninitialized variable.

It is, using &id was wrong. That alters the pointer, not the pointed-to value. Use id instead.

answered on Stack Overflow Nov 22, 2013 by Hans Passant

User contributions licensed under CC BY-SA 3.0