从RegQueryValueEx()DWORD返回无效数据

Returning invalid data from RegQueryValueEx() DWORD

本文关键字:返回 无效 数据 DWORD RegQueryValueEx      更新时间:2023-10-16

我正在尝试从注册表中读取DWORD值。在注册表中,它存储为0x00000068(104)。当我从注册表中读取值时,我得到了一个很大的数字(3435973836)。感谢您的帮助!

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;
}

3435973836是一个神奇的数字。将其转换为十六进制以获得0xcccccccc。当您在Visual Studio调试器中看到这一点时,就会知道您正在使用未初始化的变量。

事实上,使用&id是错误的。这会改变指针,而不是指向的值。请改用id