RegQueryValueEx() 関数に問題があります
。これを使用すると、*lpData が 0 で埋められます。
LONG WINAPI RegQueryValueEx(
  _In_         HKEY hKey,
  _In_opt_     LPCTSTR lpValueName,
  _Reserved_   LPDWORD lpReserved,
  _Out_opt_    LPDWORD lpType,
  _Out_opt_    LPBYTE lpData,
  _Inout_opt_  LPDWORD lpcbData
);
これが機能しないコードです
#include <windows.h>
#include <stdio.h>
int             main()
{
    HKEY        hKey = NULL;
    DWORD       data = 42;
    DWORD       type = REG_DWORD;
    DWORD       size = sizeof(DWORD);
    LONG        result;
    result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_READ, &hKey);
    if(result == ERROR_SUCCESS)
    {
        result = RegQueryValueEx(hKey, "InstallDate", NULL, &type, (LPBYTE)&data, &size);
        RegCloseKey(hKey);
        if (result == ERROR_SUCCESS)
            printf("The value is : %d\n", data);
    }
    return (0);
}
出力:
値: 0
Visual Studio 2012 を使用しており、Win7 を実行しています
編集:修正された行
result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_READ | KEY_WOW64_64KEY, &hKey);
@David Heffernanに感謝