* 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>
|
||||
|
||||
* bloda.cc (enum bad_app): Add BYTEMOBILE.
|
||||
|
|
|
@ -1179,98 +1179,156 @@ dump_sysinfo ()
|
|||
time_t now;
|
||||
char *found_cygwin_dll;
|
||||
bool is_nt = false;
|
||||
bool more_info = true;
|
||||
char osname[80];
|
||||
|
||||
printf ("\nCygwin Configuration Diagnostics\n");
|
||||
time (&now);
|
||||
printf ("Current System Time: %s\n", ctime (&now));
|
||||
|
||||
OSVERSIONINFO osversion;
|
||||
osversion.dwOSVersionInfoSize = sizeof (osversion);
|
||||
if (!GetVersionEx (&osversion))
|
||||
OSVERSIONINFOEX osversion;
|
||||
osversion.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
|
||||
if (!GetVersionEx (reinterpret_cast<LPOSVERSIONINFO>(&osversion)))
|
||||
{
|
||||
more_info = false;
|
||||
osversion.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
|
||||
if (!GetVersionEx (reinterpret_cast<LPOSVERSIONINFO>(&osversion)))
|
||||
display_error ("dump_sysinfo: GetVersionEx()");
|
||||
const char *osname = "unknown OS";
|
||||
}
|
||||
|
||||
HMODULE k32 = LoadLibrary ("kernel32.dll");
|
||||
|
||||
switch (osversion.dwPlatformId)
|
||||
{
|
||||
case VER_PLATFORM_WIN32s:
|
||||
osname = "32s";
|
||||
strcpy (osname, "32s (not supported)");
|
||||
break;
|
||||
case VER_PLATFORM_WIN32_WINDOWS:
|
||||
switch (osversion.dwMinorVersion)
|
||||
{
|
||||
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;
|
||||
}
|
||||
strcpy (osname, "95/98/Me (not supported)");
|
||||
break;
|
||||
case VER_PLATFORM_WIN32_NT:
|
||||
is_nt = true;
|
||||
if (osversion.dwMajorVersion == 6)
|
||||
osname = "Vista";
|
||||
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 (!more_info)
|
||||
osname = "2000";
|
||||
else if (osversionex.wProductType == VER_NT_SERVER
|
||||
|| osversionex.wProductType == VER_NT_DOMAIN_CONTROLLER)
|
||||
{
|
||||
if (osversionex.wSuiteMask & VER_SUITE_DATACENTER)
|
||||
osname = "2000 Datacenter Server";
|
||||
else if (osversionex.wSuiteMask & VER_SUITE_ENTERPRISE)
|
||||
osname = "2000 Advanced Server";
|
||||
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
|
||||
osname = "2000 Server";
|
||||
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
|
||||
osname = "2000 Professional";
|
||||
{
|
||||
}
|
||||
}
|
||||
else if (osversion.dwMajorVersion == 5)
|
||||
{
|
||||
if (osversion.dwMinorVersion == 0)
|
||||
{
|
||||
strcpy (osname, "2000");
|
||||
if (osversion.wProductType == VER_NT_WORKSTATION)
|
||||
strcat (osname, " Professional");
|
||||
else if (osversion.wSuiteMask & VER_SUITE_DATACENTER)
|
||||
strcat (osname, " Datacenter Server");
|
||||
else if (osversion.wSuiteMask & VER_SUITE_ENTERPRISE)
|
||||
strcat (osname, " Advanced Server");
|
||||
else
|
||||
strcat (osname, " Server");
|
||||
}
|
||||
else if (osversion.dwMinorVersion == 1)
|
||||
{
|
||||
strcpy (osname, "XP");
|
||||
if (GetSystemMetrics (SM_MEDIACENTER))
|
||||
osname = "XP Media Center Edition";
|
||||
strcat (osname, " Media Center Edition");
|
||||
else if (GetSystemMetrics (SM_TABLETPC))
|
||||
osname = "XP Tablet PC Edition";
|
||||
else if (!more_info)
|
||||
osname = "XP";
|
||||
else if (osversionex.wSuiteMask & VER_SUITE_PERSONAL)
|
||||
osname = "XP Home Edition";
|
||||
strcat (osname, " Tablet PC Edition");
|
||||
else if (GetSystemMetrics (SM_STARTER))
|
||||
strcat (osname, " Starter Edition");
|
||||
else if (osversion.wSuiteMask & VER_SUITE_PERSONAL)
|
||||
strcat (osname, " Home Edition");
|
||||
else
|
||||
osname = "XP Professional";
|
||||
strcat (osname, " Professional");
|
||||
}
|
||||
else if (osversion.dwMinorVersion == 2)
|
||||
{
|
||||
if (!more_info)
|
||||
osname = "2003 Server";
|
||||
else if (osversionex.wSuiteMask & VER_SUITE_BLADE)
|
||||
osname = "2003 Web Server";
|
||||
else if (osversionex.wSuiteMask & VER_SUITE_DATACENTER)
|
||||
osname = "2003 Datacenter Server";
|
||||
else if (osversionex.wSuiteMask & VER_SUITE_ENTERPRISE)
|
||||
osname = "2003 Enterprise Server";
|
||||
strcpy (osname, "2003 Server");
|
||||
if (GetSystemMetrics (SM_SERVERR2))
|
||||
strcat (osname, " R2");
|
||||
if (osversion.wSuiteMask & VER_SUITE_BLADE)
|
||||
strcat (osname, " Web Edition");
|
||||
else if (osversion.wSuiteMask & VER_SUITE_DATACENTER)
|
||||
strcat (osname, " Datacenter Edition");
|
||||
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
|
||||
osname = "2003 Server";
|
||||
{
|
||||
strcat (osname, " Server");
|
||||
if (osversion.wSuiteMask & VER_SUITE_ENTERPRISE)
|
||||
strcat (osname, " Enterprise Edition");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
osname = "NT";
|
||||
strcpy (osname, "NT");
|
||||
break;
|
||||
default:
|
||||
osname = "??";
|
||||
strcpy (osname, "??");
|
||||
break;
|
||||
}
|
||||
printf ("Windows %s Ver %lu.%lu Build %lu %s\n", osname,
|
||||
|
@ -1280,7 +1338,9 @@ dump_sysinfo ()
|
|||
osversion.dwPlatformId == VER_PLATFORM_WIN32_NT ?
|
||||
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))
|
||||
GetProcAddress (k32, "IsWow64Process");
|
||||
|
|
Loading…
Reference in New Issue