#include
<
windows.h
>
#include < stdio.h >
#define BUFSIZE 80
int main()
... {
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
// Try calling GetVersionEx using the OSVERSIONINFOEX structure.
// If that fails, try using the OSVERSIONINFO structure.
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if(!(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*)&osvi)))
...{
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(!GetVersionEx((OSVERSIONINFO*)&osvi))
return FALSE;
}
switch(osvi.dwPlatformId)
...{
// Test for the Windows NT product family.
case VER_PLATFORM_WIN32_NT:
// Test for the specific product family.
if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==2)
printf("Microsoft Windows .NET Server 2003 family, ");
if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==1)
printf("Microsoft Windows XP");
if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==0)
printf("Microsoft Windows 2000");
if(osvi.dwMajorVersion <= 4 )
printf("Microsoft Windows NT");
// Test for specific product on Windows NT 4.0 SP6 and later.
if( bOsVersionInfoEx )
...{
// Test for the workstation type.
if( osvi.wProductType == VER_NT_WORKSTATION )
...{
if(osvi.dwMajorVersion == 4 )
printf("Workstation 4.0 ");
else if(osvi.wSuiteMask & VER_SUITE_PERSONAL)
printf("Home Edition ");
else
printf("Professional ");
}
// Test for the server type.
else if(osvi.wProductType == VER_NT_SERVER)
...{
if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==2)
...{
if(osvi.wSuiteMask & VER_SUITE_DATACENTER)
printf("Datacenter Edition");
else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
printf("Enterprise Edition");
else if(osvi.wSuiteMask == VER_SUITE_BLADE)
printf("Web Edition");
else
printf("Standard Edition");
}
else if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==0)
...{
if(osvi.wSuiteMask & VER_SUITE_DATACENTER)
printf("Datacenter Server");
else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
printf("Advanced Server");
else
printf("Server");
}
else // Windows NT 4.0
...{
if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
printf("Server 4.0, Enterprise Edition");
else
printf("Server 4.0");
}
}
}
else // Test for specific product on Windows NT 4.0 SP5 and earlier
...{
HKEY hKey;
char szProductType[BUFSIZE];
DWORD dwBufLen = BUFSIZE;
LONG lRet;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SYSTEM/CurrentControlSet/Control/ProductOptions",
0, KEY_QUERY_VALUE, &hKey);
if(lRet != ERROR_SUCCESS)
return FALSE;
lRet = RegQueryValueEx(hKey, "ProductType", NULL, NULL,
(LPBYTE)szProductType, &dwBufLen);
if((lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE))
return FALSE;
RegCloseKey( hKey );
if(lstrcmpi("WINNT", szProductType) == 0)
printf("Workstation");
if(lstrcmpi("LANMANNT", szProductType) == 0)
printf("Server");
if(lstrcmpi("SERVERNT", szProductType) == 0)
printf("Advanced Server");
printf("%d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion);
}
// Display service pack (if any) and build number.
if(osvi.dwMajorVersion==4 && lstrcmpi(osvi.szCSDVersion, "Service Pack 6")==0)
...{
HKEY hKey;
LONG lRet;
// Test for SP6 versus SP6a.
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE/Microsoft/Windows NT/CurrentVersion/Hotfix/Q246009",
0, KEY_QUERY_VALUE, &hKey);
if(lRet == ERROR_SUCCESS)
printf("Service Pack 6a (Build %d) ", osvi.dwBuildNumber & 0xFFFF);
else // Windows NT 4.0 prior to SP6a
...{
printf("%s (Build %d) ",
osvi.szCSDVersion,
osvi.dwBuildNumber & 0xFFFF);
}
RegCloseKey(hKey);
}
else // Windows NT 3.51 and earlier or Windows 2000 and later
...{
printf("%s(Build%d) ",
osvi.szCSDVersion,
osvi.dwBuildNumber & 0xFFFF);
}
break;
// Test for the Windows 95 product family.
case VER_PLATFORM_WIN32_WINDOWS:
if(osvi.dwMajorVersion==4 && osvi.dwMinorVersion==0)
...{
printf("Microsoft Windows 95");
if(osvi.szCSDVersion[1]=='C' || osvi.szCSDVersion[1]=='B')
printf("OSR2");
}
if(osvi.dwMajorVersion==4 && osvi.dwMinorVersion==10)
...{
printf("Microsoft Windows 98");
if(osvi.szCSDVersion[1] == 'A')
printf("SE");
}
if(osvi.dwMajorVersion==4 && osvi.dwMinorVersion==90)
...{
printf("Microsoft Windows Millennium Edition ");
}
break;
case VER_PLATFORM_WIN32s:
printf("Microsoft Win32s ");
break;
}
return TRUE;
}
#include < stdio.h >
#define BUFSIZE 80
int main()
... {
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
// Try calling GetVersionEx using the OSVERSIONINFOEX structure.
// If that fails, try using the OSVERSIONINFO structure.
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if(!(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*)&osvi)))
...{
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(!GetVersionEx((OSVERSIONINFO*)&osvi))
return FALSE;
}
switch(osvi.dwPlatformId)
...{
// Test for the Windows NT product family.
case VER_PLATFORM_WIN32_NT:
// Test for the specific product family.
if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==2)
printf("Microsoft Windows .NET Server 2003 family, ");
if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==1)
printf("Microsoft Windows XP");
if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==0)
printf("Microsoft Windows 2000");
if(osvi.dwMajorVersion <= 4 )
printf("Microsoft Windows NT");
// Test for specific product on Windows NT 4.0 SP6 and later.
if( bOsVersionInfoEx )
...{
// Test for the workstation type.
if( osvi.wProductType == VER_NT_WORKSTATION )
...{
if(osvi.dwMajorVersion == 4 )
printf("Workstation 4.0 ");
else if(osvi.wSuiteMask & VER_SUITE_PERSONAL)
printf("Home Edition ");
else
printf("Professional ");
}
// Test for the server type.
else if(osvi.wProductType == VER_NT_SERVER)
...{
if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==2)
...{
if(osvi.wSuiteMask & VER_SUITE_DATACENTER)
printf("Datacenter Edition");
else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
printf("Enterprise Edition");
else if(osvi.wSuiteMask == VER_SUITE_BLADE)
printf("Web Edition");
else
printf("Standard Edition");
}
else if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==0)
...{
if(osvi.wSuiteMask & VER_SUITE_DATACENTER)
printf("Datacenter Server");
else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
printf("Advanced Server");
else
printf("Server");
}
else // Windows NT 4.0
...{
if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
printf("Server 4.0, Enterprise Edition");
else
printf("Server 4.0");
}
}
}
else // Test for specific product on Windows NT 4.0 SP5 and earlier
...{
HKEY hKey;
char szProductType[BUFSIZE];
DWORD dwBufLen = BUFSIZE;
LONG lRet;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SYSTEM/CurrentControlSet/Control/ProductOptions",
0, KEY_QUERY_VALUE, &hKey);
if(lRet != ERROR_SUCCESS)
return FALSE;
lRet = RegQueryValueEx(hKey, "ProductType", NULL, NULL,
(LPBYTE)szProductType, &dwBufLen);
if((lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE))
return FALSE;
RegCloseKey( hKey );
if(lstrcmpi("WINNT", szProductType) == 0)
printf("Workstation");
if(lstrcmpi("LANMANNT", szProductType) == 0)
printf("Server");
if(lstrcmpi("SERVERNT", szProductType) == 0)
printf("Advanced Server");
printf("%d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion);
}
// Display service pack (if any) and build number.
if(osvi.dwMajorVersion==4 && lstrcmpi(osvi.szCSDVersion, "Service Pack 6")==0)
...{
HKEY hKey;
LONG lRet;
// Test for SP6 versus SP6a.
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE/Microsoft/Windows NT/CurrentVersion/Hotfix/Q246009",
0, KEY_QUERY_VALUE, &hKey);
if(lRet == ERROR_SUCCESS)
printf("Service Pack 6a (Build %d) ", osvi.dwBuildNumber & 0xFFFF);
else // Windows NT 4.0 prior to SP6a
...{
printf("%s (Build %d) ",
osvi.szCSDVersion,
osvi.dwBuildNumber & 0xFFFF);
}
RegCloseKey(hKey);
}
else // Windows NT 3.51 and earlier or Windows 2000 and later
...{
printf("%s(Build%d) ",
osvi.szCSDVersion,
osvi.dwBuildNumber & 0xFFFF);
}
break;
// Test for the Windows 95 product family.
case VER_PLATFORM_WIN32_WINDOWS:
if(osvi.dwMajorVersion==4 && osvi.dwMinorVersion==0)
...{
printf("Microsoft Windows 95");
if(osvi.szCSDVersion[1]=='C' || osvi.szCSDVersion[1]=='B')
printf("OSR2");
}
if(osvi.dwMajorVersion==4 && osvi.dwMinorVersion==10)
...{
printf("Microsoft Windows 98");
if(osvi.szCSDVersion[1] == 'A')
printf("SE");
}
if(osvi.dwMajorVersion==4 && osvi.dwMinorVersion==90)
...{
printf("Microsoft Windows Millennium Edition ");
}
break;
case VER_PLATFORM_WIN32s:
printf("Microsoft Win32s ");
break;
}
return TRUE;
}