* 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:
		| @@ -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)) | ||||
|     display_error ("dump_sysinfo: GetVersionEx()"); | ||||
|   const char *osname = "unknown OS"; | ||||
|   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()"); | ||||
|     } | ||||
|  | ||||
|   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"; | ||||
| 	{ | ||||
| 	  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) | ||||
| 	{ | ||||
| 	  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"; | ||||
| 		  else | ||||
| 		    osname = "2000 Server"; | ||||
| 		} | ||||
| 	      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 | ||||
| 		osname = "2000 Professional"; | ||||
| 		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"); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user