* cygcheck.cc (dump_sysinfo): Always try to get a OSVERSIONINFOEX
first. Load kernel32.dll earlier. Make osname a buffer. Simplify Non-NT code. Use GetProductInfo in Vista/2008 case. Clean up non-Vista version info. Exit early if not on NT.
This commit is contained in:
parent
40617efc8b
commit
2652ae1036
@ -1,3 +1,10 @@
|
|||||||
|
2008-01-13 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* cygcheck.cc (dump_sysinfo): Always try to get a OSVERSIONINFOEX
|
||||||
|
first. Load kernel32.dll earlier. Make osname a buffer. Simplify
|
||||||
|
Non-NT code. Use GetProductInfo in Vista/2008 case. Clean up
|
||||||
|
non-Vista version info. Exit early if not on NT.
|
||||||
|
|
||||||
2007-12-29 Dave Korn <dave.korn@artimi.com>
|
2007-12-29 Dave Korn <dave.korn@artimi.com>
|
||||||
|
|
||||||
* bloda.cc (enum bad_app): Add BYTEMOBILE.
|
* bloda.cc (enum bad_app): Add BYTEMOBILE.
|
||||||
|
@ -1179,98 +1179,156 @@ dump_sysinfo ()
|
|||||||
time_t now;
|
time_t now;
|
||||||
char *found_cygwin_dll;
|
char *found_cygwin_dll;
|
||||||
bool is_nt = false;
|
bool is_nt = false;
|
||||||
|
bool more_info = true;
|
||||||
|
char osname[80];
|
||||||
|
|
||||||
printf ("\nCygwin Configuration Diagnostics\n");
|
printf ("\nCygwin Configuration Diagnostics\n");
|
||||||
time (&now);
|
time (&now);
|
||||||
printf ("Current System Time: %s\n", ctime (&now));
|
printf ("Current System Time: %s\n", ctime (&now));
|
||||||
|
|
||||||
OSVERSIONINFO osversion;
|
OSVERSIONINFOEX osversion;
|
||||||
osversion.dwOSVersionInfoSize = sizeof (osversion);
|
osversion.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
|
||||||
if (!GetVersionEx (&osversion))
|
if (!GetVersionEx (reinterpret_cast<LPOSVERSIONINFO>(&osversion)))
|
||||||
display_error ("dump_sysinfo: GetVersionEx()");
|
{
|
||||||
const char *osname = "unknown OS";
|
more_info = false;
|
||||||
|
osversion.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
|
||||||
|
if (!GetVersionEx (reinterpret_cast<LPOSVERSIONINFO>(&osversion)))
|
||||||
|
display_error ("dump_sysinfo: GetVersionEx()");
|
||||||
|
}
|
||||||
|
|
||||||
|
HMODULE k32 = LoadLibrary ("kernel32.dll");
|
||||||
|
|
||||||
switch (osversion.dwPlatformId)
|
switch (osversion.dwPlatformId)
|
||||||
{
|
{
|
||||||
case VER_PLATFORM_WIN32s:
|
case VER_PLATFORM_WIN32s:
|
||||||
osname = "32s";
|
strcpy (osname, "32s (not supported)");
|
||||||
break;
|
break;
|
||||||
case VER_PLATFORM_WIN32_WINDOWS:
|
case VER_PLATFORM_WIN32_WINDOWS:
|
||||||
switch (osversion.dwMinorVersion)
|
strcpy (osname, "95/98/Me (not supported)");
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
osname = "95 (not supported)";
|
|
||||||
break;
|
|
||||||
case 10:
|
|
||||||
osname = "98 (not supported)";
|
|
||||||
break;
|
|
||||||
case 90:
|
|
||||||
osname = "ME (not supported)";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
osname = "9X (not supported)";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case VER_PLATFORM_WIN32_NT:
|
case VER_PLATFORM_WIN32_NT:
|
||||||
is_nt = true;
|
is_nt = true;
|
||||||
if (osversion.dwMajorVersion == 6)
|
if (osversion.dwMajorVersion == 6)
|
||||||
osname = "Vista";
|
{
|
||||||
|
BOOL (WINAPI *GetProductInfo) (DWORD, DWORD, DWORD, DWORD, PDWORD) =
|
||||||
|
(BOOL (WINAPI *)(DWORD, DWORD, DWORD, DWORD, PDWORD))
|
||||||
|
GetProcAddress (k32, "GetProductInfo");
|
||||||
|
if (osversion.wProductType == VER_NT_WORKSTATION)
|
||||||
|
strcpy (osname, "Vista");
|
||||||
|
else
|
||||||
|
strcpy (osname, "2008");
|
||||||
|
DWORD prod;
|
||||||
|
if (GetProductInfo (osversion.dwMajorVersion,
|
||||||
|
osversion.dwMinorVersion,
|
||||||
|
osversion.wServicePackMajor,
|
||||||
|
osversion.wServicePackMinor,
|
||||||
|
&prod))
|
||||||
|
{
|
||||||
|
#define PRODUCT_UNLICENSED 0xabcdabcd
|
||||||
|
#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x19
|
||||||
|
const char *products[] =
|
||||||
|
{
|
||||||
|
"",
|
||||||
|
" Ultimate Edition",
|
||||||
|
" Home Basic Edition",
|
||||||
|
" Home Premium Edition",
|
||||||
|
" Enterprise Edition",
|
||||||
|
" Home Basic N Edition",
|
||||||
|
" Business Edition",
|
||||||
|
" Server Standard Edition",
|
||||||
|
" Server Datacenter Edition",
|
||||||
|
" Small Business Server",
|
||||||
|
" Server Enterprise Edition",
|
||||||
|
" Starter Edition",
|
||||||
|
" Server Datacenter Edition Core",
|
||||||
|
" Server Standard Edition Core",
|
||||||
|
" Server Enterprise Edition Core",
|
||||||
|
" Server Enterprise Edition for Itanium-based Systems",
|
||||||
|
" Business N Edition",
|
||||||
|
" Web Server Edition",
|
||||||
|
" Cluster Server Edition",
|
||||||
|
" Home Server Edition",
|
||||||
|
" Storage Server Express Edition",
|
||||||
|
" Storage Server Standard Edition",
|
||||||
|
" Storage Server Workgroup Edition",
|
||||||
|
" Storage Server Enterprise Edition",
|
||||||
|
" Server for Small Business Edition",
|
||||||
|
" Small Business Server Premium Edition"
|
||||||
|
};
|
||||||
|
if (prod == PRODUCT_UNLICENSED)
|
||||||
|
strcat (osname, "Unlicensed");
|
||||||
|
else if (prod > PRODUCT_SMALLBUSINESS_SERVER_PREMIUM)
|
||||||
|
strcat (osname, "");
|
||||||
|
else
|
||||||
|
strcat (osname, products[prod]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (osversion.dwMajorVersion == 5)
|
else if (osversion.dwMajorVersion == 5)
|
||||||
{
|
{
|
||||||
BOOL more_info = FALSE;
|
|
||||||
OSVERSIONINFOEX osversionex;
|
|
||||||
osversionex.dwOSVersionInfoSize = sizeof (osversionex);
|
|
||||||
if (GetVersionEx ((OSVERSIONINFO *) &osversionex))
|
|
||||||
more_info = TRUE;
|
|
||||||
if (osversion.dwMinorVersion == 0)
|
if (osversion.dwMinorVersion == 0)
|
||||||
{
|
{
|
||||||
if (!more_info)
|
strcpy (osname, "2000");
|
||||||
osname = "2000";
|
if (osversion.wProductType == VER_NT_WORKSTATION)
|
||||||
else if (osversionex.wProductType == VER_NT_SERVER
|
strcat (osname, " Professional");
|
||||||
|| osversionex.wProductType == VER_NT_DOMAIN_CONTROLLER)
|
else if (osversion.wSuiteMask & VER_SUITE_DATACENTER)
|
||||||
{
|
strcat (osname, " Datacenter Server");
|
||||||
if (osversionex.wSuiteMask & VER_SUITE_DATACENTER)
|
else if (osversion.wSuiteMask & VER_SUITE_ENTERPRISE)
|
||||||
osname = "2000 Datacenter Server";
|
strcat (osname, " Advanced Server");
|
||||||
else if (osversionex.wSuiteMask & VER_SUITE_ENTERPRISE)
|
|
||||||
osname = "2000 Advanced Server";
|
|
||||||
else
|
|
||||||
osname = "2000 Server";
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
osname = "2000 Professional";
|
strcat (osname, " Server");
|
||||||
}
|
}
|
||||||
else if (osversion.dwMinorVersion == 1)
|
else if (osversion.dwMinorVersion == 1)
|
||||||
{
|
{
|
||||||
|
strcpy (osname, "XP");
|
||||||
if (GetSystemMetrics (SM_MEDIACENTER))
|
if (GetSystemMetrics (SM_MEDIACENTER))
|
||||||
osname = "XP Media Center Edition";
|
strcat (osname, " Media Center Edition");
|
||||||
else if (GetSystemMetrics (SM_TABLETPC))
|
else if (GetSystemMetrics (SM_TABLETPC))
|
||||||
osname = "XP Tablet PC Edition";
|
strcat (osname, " Tablet PC Edition");
|
||||||
else if (!more_info)
|
else if (GetSystemMetrics (SM_STARTER))
|
||||||
osname = "XP";
|
strcat (osname, " Starter Edition");
|
||||||
else if (osversionex.wSuiteMask & VER_SUITE_PERSONAL)
|
else if (osversion.wSuiteMask & VER_SUITE_PERSONAL)
|
||||||
osname = "XP Home Edition";
|
strcat (osname, " Home Edition");
|
||||||
else
|
else
|
||||||
osname = "XP Professional";
|
strcat (osname, " Professional");
|
||||||
}
|
}
|
||||||
else if (osversion.dwMinorVersion == 2)
|
else if (osversion.dwMinorVersion == 2)
|
||||||
{
|
{
|
||||||
if (!more_info)
|
strcpy (osname, "2003 Server");
|
||||||
osname = "2003 Server";
|
if (GetSystemMetrics (SM_SERVERR2))
|
||||||
else if (osversionex.wSuiteMask & VER_SUITE_BLADE)
|
strcat (osname, " R2");
|
||||||
osname = "2003 Web Server";
|
if (osversion.wSuiteMask & VER_SUITE_BLADE)
|
||||||
else if (osversionex.wSuiteMask & VER_SUITE_DATACENTER)
|
strcat (osname, " Web Edition");
|
||||||
osname = "2003 Datacenter Server";
|
else if (osversion.wSuiteMask & VER_SUITE_DATACENTER)
|
||||||
else if (osversionex.wSuiteMask & VER_SUITE_ENTERPRISE)
|
strcat (osname, " Datacenter Edition");
|
||||||
osname = "2003 Enterprise Server";
|
else if (osversion.wSuiteMask & VER_SUITE_ENTERPRISE)
|
||||||
|
strcat (osname, " Enterprise Edition");
|
||||||
|
else if (osversion.wSuiteMask & VER_SUITE_COMPUTE_SERVER)
|
||||||
|
strcat (osname, " Compute Cluster Edition");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (osversion.dwMajorVersion == 4)
|
||||||
|
{
|
||||||
|
strcpy (osname, "NT 4");
|
||||||
|
if (more_info)
|
||||||
|
{
|
||||||
|
if (osversion.wProductType == VER_NT_WORKSTATION)
|
||||||
|
strcat (osname, " Workstation");
|
||||||
else
|
else
|
||||||
osname = "2003 Server";
|
{
|
||||||
|
strcat (osname, " Server");
|
||||||
|
if (osversion.wSuiteMask & VER_SUITE_ENTERPRISE)
|
||||||
|
strcat (osname, " Enterprise Edition");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
osname = "NT";
|
strcpy (osname, "NT");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
osname = "??";
|
strcpy (osname, "??");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
printf ("Windows %s Ver %lu.%lu Build %lu %s\n", osname,
|
printf ("Windows %s Ver %lu.%lu Build %lu %s\n", osname,
|
||||||
@ -1280,7 +1338,9 @@ dump_sysinfo ()
|
|||||||
osversion.dwPlatformId == VER_PLATFORM_WIN32_NT ?
|
osversion.dwPlatformId == VER_PLATFORM_WIN32_NT ?
|
||||||
osversion.szCSDVersion : "");
|
osversion.szCSDVersion : "");
|
||||||
|
|
||||||
HMODULE k32 = LoadLibrary ("kernel32.dll");
|
if (osversion.dwPlatformId == VER_PLATFORM_WIN32s
|
||||||
|
|| osversion.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
|
||||||
BOOL (WINAPI *wow64_func) (HANDLE, PBOOL) = (BOOL (WINAPI *) (HANDLE, PBOOL))
|
BOOL (WINAPI *wow64_func) (HANDLE, PBOOL) = (BOOL (WINAPI *) (HANDLE, PBOOL))
|
||||||
GetProcAddress (k32, "IsWow64Process");
|
GetProcAddress (k32, "IsWow64Process");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user