16 OSVERSIONINFOEX result = {
sizeof(OSVERSIONINFOEX), 0, 0, 0, 0, {
'\0'}, 0, 0, 0, 0, 0};
18 HMODULE ntdll = GetModuleHandleW(L"ntdll.dll");
19 if (Q_UNLIKELY(!ntdll))
22 typedef NTSTATUS (NTAPI *RtlGetVersionFunction)(LPOSVERSIONINFO);
27 RtlGetVersionFunction pRtlGetVersion =
reinterpret_cast<RtlGetVersionFunction>(
28 reinterpret_cast<QFunctionPointer>(GetProcAddress(ntdll,
"RtlGetVersion")));
29 if (Q_UNLIKELY(!pRtlGetVersion))
34 pRtlGetVersion(
reinterpret_cast<LPOSVERSIONINFO>(&result));
40 OSVERSIONINFOEX realResult = determineWinOsVersion();
43 if (Q_UNLIKELY(qEnvironmentVariableIsSet(
"QT_WINVER_OVERRIDE"))) {
44 OSVERSIONINFOEX result = realResult;
45 result.dwMajorVersion = 0;
46 result.dwMinorVersion = 0;
49 result.dwBuildNumber = 0;
50 result.szCSDVersion[0] = L'\0';
51 result.wServicePackMajor = 0;
52 result.wServicePackMinor = 0;
54 const QByteArray winVerOverride = qgetenv(
"QT_WINVER_OVERRIDE");
55 if (winVerOverride ==
"WINDOWS10" || winVerOverride ==
"2016"
56 || winVerOverride ==
"2019" || winVerOverride ==
"2022") {
57 result.dwMajorVersion = 10;
58 }
else if (winVerOverride ==
"WINDOWS11") {
59 result.dwMajorVersion = 10;
60 result.dwBuildNumber = 22000;
65 if (winVerOverride ==
"2016" || winVerOverride ==
"2019"
66 || winVerOverride ==
"2022") {
69 if (result.wProductType == VER_NT_WORKSTATION)
70 result.wProductType = VER_NT_SERVER;
73 result.wProductType = VER_NT_WORKSTATION;