Answered by:

Where does kernel32.dll GetVersionEx() get its information from?

Question

Despite my protests, I've been tasked with installing an obsolete 10 year old application on Windows Server 2016. Unfortunately, the installer detects an incompatible Windows version and refuses to install the app. Since the customer absolutely needs to
have the app AND Windows Server 2016, I need to somehow fool the installer into thinking that it's running on an older system.

I do not have the source code for the app (3rd party), nor does it contain the list of supported OS versions in any of the plaintext config files. It most likely doesn't extract the info into %TEMP% either (I checked there and found nothing) - and if it
does, it does not do it in a human-readable way.

I know the app is old and written in Visual C++, so it's likely that it uses the GetVersionEx() function to obtain the version info. The installer log information it provides is also consistent with the output of this function.

My first question is: where does that information come from, and whether it is feasible to spoof the version somehow. In case the answer is negative, I'd like to know what other ways of achieving the goal might there be.