An OSVERSIONINFOEX
is larger than an OSVERSIONINFO
, so
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
will write zeroes "outside" (around) osvi
.
You want
OSVERSIONINFOEX osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
or (often safer)
OSVERSIONINFOEX osvi;
ZeroMemory(&osvi, sizeof(osvi));