Dave's Brain

Browse - Programming Tips - How can I get the true Windows version since GetVersionEx() is broken?

Date: 2015oct1
Updated: 2016dec6
OS: Windows
Language: C/C++
Keywords: deprecated, GetVersion()

Q.  How can I get the true Windows version since GetVersionEx() is broken?

A.  On Windows 8.1 and later it returns version 8.0

You can do this:

#include "lm.h" bool GetWindowsVersion(DWORD& major, DWORD& minor) { LPBYTE pinfoRawData; if (NERR_Success == NetWkstaGetInfo(NULL, 100, &pinfoRawData)) { WKSTA_INFO_100 * pworkstationInfo = (WKSTA_INFO_100 *)pinfoRawData; major = pworkstationInfo->wki100_ver_major; minor = pworkstationInfo->wki100_ver_minor; NetApiBufferFree(pinfoRawData); return true; } return false; }
I dynamically load these functions so I don't have to link with Netapi32.lib Apparently NetWkstaGetInfo() is slower than GetVersionEx() so you can cache its result for the life of your process (since it won't change). Then you can pass those versions into GetProductInfo() to get a friendly version or just process them yourself. Main source: http://www.codeproject.com/Articles/678606/Part-Overcoming-Windows-s-deprecation-of-GetVe

Add a comment

Sign in to add a comment
Copyright © 2008-2017, dave - Code samples on Dave's Brain is licensed under the Creative Commons Attribution 2.5 License. However other material, including English text has all rights reserved.