83 lines
1.8 KiB
C
83 lines
1.8 KiB
C
/*
|
|
* Use the GetVersionEx() Win32 API call to show information about
|
|
* which version of Windows we're running (or which version of Windows
|
|
* Wine believes it is masquerading as).
|
|
*
|
|
* Copyright 1999 by Morten Eriksen <mailto:mortene@sim.no>
|
|
*
|
|
*/
|
|
|
|
#include <windows.h>
|
|
#include <winbase.h>
|
|
#include <stdio.h>
|
|
|
|
void
|
|
show_last_error(void)
|
|
{
|
|
DWORD lasterr;
|
|
LPTSTR buffer;
|
|
BOOL result;
|
|
|
|
lasterr = GetLastError();
|
|
|
|
result = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL,
|
|
lasterr,
|
|
0,
|
|
(LPTSTR)&buffer,
|
|
0,
|
|
NULL);
|
|
|
|
if (result) {
|
|
fprintf(stderr, "Win32 API error (%ld):\t%s", lasterr, buffer);
|
|
LocalFree((HLOCAL)buffer);
|
|
}
|
|
else {
|
|
fprintf(stderr, "Win32 API error (%ld)", lasterr);
|
|
}
|
|
}
|
|
|
|
int
|
|
main(int argc, char ** argv)
|
|
|
|
{
|
|
BOOL result;
|
|
OSVERSIONINFO oiv;
|
|
|
|
/* FIXME: GetVersionEx() is a Win32 API call, so there should be a
|
|
preliminary check to see if we're running bare-bones Windows3.xx
|
|
(or even lower?). 19990916 mortene. */
|
|
|
|
oiv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
|
result = GetVersionEx(&oiv);
|
|
|
|
if (result == FALSE) {
|
|
show_last_error();
|
|
}
|
|
else {
|
|
char * platforms[] = {
|
|
"Win32s on Windows 3.1",
|
|
"Win32 on Windows 95 or Windows 98",
|
|
"Win32 on Windows NT/Windows 2000",
|
|
"unknown!"
|
|
};
|
|
int platformval = 3;
|
|
|
|
switch (oiv.dwPlatformId) {
|
|
case VER_PLATFORM_WIN32s: platformval = 0; break;
|
|
case VER_PLATFORM_WIN32_WINDOWS: platformval = 1; break;
|
|
case VER_PLATFORM_WIN32_NT: platformval = 2; break;
|
|
}
|
|
|
|
fprintf(stdout,
|
|
"MajorVersion: %ld\nMinorVersion: %ld\nBuildNumber: 0x%lx\n"
|
|
"Platform: %s\nCSDVersion: '%s'\n",
|
|
oiv.dwMajorVersion, oiv.dwMinorVersion, oiv.dwBuildNumber,
|
|
platforms[platformval], oiv.szCSDVersion);
|
|
}
|
|
|
|
return 0;
|
|
}
|