GetVersion seems deprecated :
https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getversion
:
" *GetVersion* may be altered or unavailable for releases after
Windows 8.1. Instead, use the Version Helper functions
<https://learn.microsoft.com/en-us/windows/desktop/SysInfo/version-helper-apis>.
etc..."

Also, in
https://learn.microsoft.com/en-us/windows/win32/sysinfo/targeting-your-application-at-windows-8-1
:
" In Windows 8.1 and later, the *GetVersion*
<https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getversion>
and *GetVersionEx*
<https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getversionexa>
functions have been deprecated. As of Windows 10, the *VerifyVersionInfo*
<https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-verifyversioninfoa>
function is also deprecated. etc..."

Vincent


On Thu, Mar 5, 2026 at 7:26 PM Pali Rohár <[email protected]> wrote:

> On Thursday 05 March 2026 05:19:09 Kirill Makurin wrote:
> > Hi Pali and all,
> >
> > I was reading through Microsoft docs for GetVersion[1], GetVersionEx[2]
> and related stuff.
> >
> > [1]
> https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getversion
> > [2]
> https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getversionexw
> >
> > This article[3] lists version numbers for all Windows versions back to
> Windows 2000; do you know what are these for pre-2000? In particular NT
> 4.0, NT 3.51, NT 3.5, NT 3.1 and all the Win9x.
> >
> > [3]
> https://learn.microsoft.com/en-us/windows/win32/sysinfo/operating-system-version
> >
> > Another interesting detail I've noticed is that GetVersionEx sets
> `dwPlatformId` member of OSVERSIONINFO* structures to
> `VER_PLATFORM_WIN32_NT`; this makes me wonder if there was a separate value
> to identify Win9x systems?
> >
> > Also, our lib32/kernel32.def says that GetVersionEx is available in all
> Win9x and only since NT 3.5, which means in some cases I may need to check
> for its presence at runtime as well :)
> >
> > - Kirill Makurin
>
> Hello, in past I was looking at GetVersion and GetVersionEx functions
> and I was inspecting how they works. So I think I should have all those
> information for which you are asking.
>
> Microsoft started removing most of documentation for GetVersion and
> GetVersionEx functions, but web archive has copy of it before removal:
>
>
> https://web.archive.org/web/20041209205313/http://msdn.microsoft.com/library/en-us/sysinfo/base/getversion.asp
>
> https://web.archive.org/web/20020905235730/http://msdn.microsoft.com/library/en-us/sysinfo/base/getversionex.asp
>
> On internet can be found various dumps of WinSDK documentation,
> like from WIN32.HLP file. For example these:
>
> https://winapi.freetechsecrets.com/win32/WIN32GetVersion.htm
> https://winapi.freetechsecrets.com/win32/WIN32GetVersionEx.htm
>
>
> https://library.thedatadungeon.com/msdn-2000-04/sysmgmt/hh/sysmgmt/sysinfo_41bi.htm
>
> https://library.thedatadungeon.com/msdn-2000-04/sysmgmt/hh/sysmgmt/sysinfo_49iw.htm
>
> Also there are some undocumented parts of GetVersion function, specially
> what is filled in reserved bits. I was running different tests in the
> past and here is hopefully the full documentation. I was also checking
> the wine sources in past and it confirms it.
>
> GetVersion returns DWORD with these bits:
> [31:30] - PlatformId XORed with 0b10
> [29:16] - BuildNumber
> [15:08] - MinorVersion
> [07:00] - MajorVersion
>
> The highest bit [31] is also indicating (when set) if the OS is DOS based.
>
> GetVersionEx is returning what is written in MS documentation, just
> compared with GetVersion, on Win32s is GetVersionEx returning the
> Win32s version (1.30), and GetVersion is returning OS version (3.11).
>
> PlatformId is one of:
> VER_PLATFORM_WIN32s - Win32s
> VER_PLATFORM_WIN32_WINDOWS - Win9x
> VER_PLATFORM_WIN32_NT - WinNT
> (in both GetVersionEx and GetVersion, just be aware of XOR 0b10)
>
> There is also VER_PLATFORM_WIN32_CE which indicates Windows CE
> implementation , but Windows CE does not support running PE
> IMAGE_SUBSYSTEM_WINDOWS_GUI and PE IMAGE_SUBSYSTEM_WINDOWS_CUI binaries
> and it also does not have GetVersion function at all. Only GetVersionEx.
> So mostly you can ignore CE.
>
> Therefore if you want to check for all possible OS system variants, the
> GetVersion() function is universal, available on all implementations and
> contains mostly everything what you need.
>
>
> _______________________________________________
> Mingw-w64-public mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
>

_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to