Skip to content

Detect WinVersion

A console snippet that identifies the running Windows version from GetVersionEx and prints it with build number.

Published Jan 31, 1998

The classic pre-Vista version-detection routine: fill an OSVERSIONINFO, call GetVersionEx, then branch on dwPlatformId (Windows 9x versus NT) and major/minor version to name the exact release - 95, 98, ME, NT 3.x/4.x, 2000 or XP - printing the service pack string from szCSDVersion alongside. It is a period piece now since modern apps should use RtlGetVersion or API-set checks, but it remains the clearest illustration of how the old fields mapped to product names.

#include <Windows.H>
#include <WindowsX.H>
#include <Stdio.H>
#include <Stdlib.H>

void WriteOsVersion(void)
{
	char Temp[257];
	int TempINT;
	OSVERSIONINFO os;
	DWORD dwVersion;
	os.dwOSVersionInfoSize=sizeof(os);
	dwVersion = GetVersion();

	if(GetVersionEx(&os))
	{
		if(os.dwPlatformId == 1)
		{
			if(os.dwMinorVersion == 0)
				sprintf(Temp, "\t Windows 95 %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
			if(os.dwMinorVersion == 10)
				sprintf(Temp, "\t Windows 98 %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
			if(os.dwMinorVersion == 90)
				sprintf(Temp, "\t Windows ME %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
		}

		if(os.dwPlatformId == 2)
		{
			if(os.dwMajorVersion == 3)
				sprintf(Temp, "\t Windows NT %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
			if(os.dwMajorVersion == 4)
				sprintf(Temp, "\t Windows NT %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
			if(os.dwMajorVersion == 5 && os.dwMinorVersion == 0)
				sprintf(Temp, "\t Windows 2000 %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
			if(os.dwMajorVersion == 5 && os.dwMinorVersion == 1)
				sprintf(Temp, "\t Windows XP %d.%d (Build %d) %s\r\n",LOBYTE(LOWORD(dwVersion)),HIBYTE(LOWORD(dwVersion)),os.dwBuildNumber & 0xFFFF,os.szCSDVersion);
		}
	}

	printf("Temp = %s\n",Temp);
}

int main(int argc, char *argv[])
{
	WriteOsVersion();

	return 0;
}
An unhandled error has occurred. Reload 🗙