372 * writing, decoding of dwMajorVersion and dwMinorVersion.
373 *
374 * Operating system dwMajorVersion dwMinorVersion
375 * ================== ============== ==============
376 *
377 * Windows 95 4 0
378 * Windows 98 4 10
379 * Windows ME 4 90
380 * Windows 3.51 3 51
381 * Windows NT 4.0 4 0
382 * Windows 2000 5 0
383 * Windows XP 32 bit 5 1
384 * Windows Server 2003 family 5 2
385 * Windows XP 64 bit 5 2
386 * where ((&ver.wServicePackMinor) + 2) = 1
387 * and si.wProcessorArchitecture = 9
388 * Windows Vista family 6 0 (VER_NT_WORKSTATION)
389 * Windows Server 2008 6 0 (!VER_NT_WORKSTATION)
390 * Windows 7 6 1 (VER_NT_WORKSTATION)
391 * Windows Server 2008 R2 6 1 (!VER_NT_WORKSTATION)
392 *
393 * This mapping will presumably be augmented as new Windows
394 * versions are released.
395 */
396 switch (ver.dwPlatformId) {
397 case VER_PLATFORM_WIN32s:
398 sprops.os_name = "Windows 3.1";
399 break;
400 case VER_PLATFORM_WIN32_WINDOWS:
401 if (ver.dwMajorVersion == 4) {
402 switch (ver.dwMinorVersion) {
403 case 0: sprops.os_name = "Windows 95"; break;
404 case 10: sprops.os_name = "Windows 98"; break;
405 case 90: sprops.os_name = "Windows Me"; break;
406 default: sprops.os_name = "Windows 9X (unknown)"; break;
407 }
408 } else {
409 sprops.os_name = "Windows 9X (unknown)";
410 }
411 break;
428 * If it is, the operating system is Windows XP 64 bit;
429 * otherwise, it is Windows Server 2003."
430 */
431 if(ver.wProductType == VER_NT_WORKSTATION &&
432 si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
433 sprops.os_name = "Windows XP"; /* 64 bit */
434 } else {
435 sprops.os_name = "Windows 2003";
436 }
437 break;
438 default: sprops.os_name = "Windows NT (unknown)"; break;
439 }
440 } else if (ver.dwMajorVersion == 6) {
441 /*
442 * See table in MSDN OSVERSIONINFOEX documentation.
443 */
444 if (ver.wProductType == VER_NT_WORKSTATION) {
445 switch (ver.dwMinorVersion) {
446 case 0: sprops.os_name = "Windows Vista"; break;
447 case 1: sprops.os_name = "Windows 7"; break;
448 default: sprops.os_name = "Windows NT (unknown)";
449 }
450 } else {
451 switch (ver.dwMinorVersion) {
452 case 0: sprops.os_name = "Windows Server 2008"; break;
453 case 1: sprops.os_name = "Windows Server 2008 R2"; break;
454 default: sprops.os_name = "Windows NT (unknown)";
455 }
456 }
457 } else {
458 sprops.os_name = "Windows NT (unknown)";
459 }
460 break;
461 default:
462 sprops.os_name = "Windows (unknown)";
463 break;
464 }
465 sprintf(buf, "%d.%d", ver.dwMajorVersion, ver.dwMinorVersion);
466 sprops.os_version = _strdup(buf);
467 #if _M_IA64
|
372 * writing, decoding of dwMajorVersion and dwMinorVersion.
373 *
374 * Operating system dwMajorVersion dwMinorVersion
375 * ================== ============== ==============
376 *
377 * Windows 95 4 0
378 * Windows 98 4 10
379 * Windows ME 4 90
380 * Windows 3.51 3 51
381 * Windows NT 4.0 4 0
382 * Windows 2000 5 0
383 * Windows XP 32 bit 5 1
384 * Windows Server 2003 family 5 2
385 * Windows XP 64 bit 5 2
386 * where ((&ver.wServicePackMinor) + 2) = 1
387 * and si.wProcessorArchitecture = 9
388 * Windows Vista family 6 0 (VER_NT_WORKSTATION)
389 * Windows Server 2008 6 0 (!VER_NT_WORKSTATION)
390 * Windows 7 6 1 (VER_NT_WORKSTATION)
391 * Windows Server 2008 R2 6 1 (!VER_NT_WORKSTATION)
392 * Windows 8 6 2 (VER_NT_WORKSTATION)
393 *
394 * This mapping will presumably be augmented as new Windows
395 * versions are released.
396 */
397 switch (ver.dwPlatformId) {
398 case VER_PLATFORM_WIN32s:
399 sprops.os_name = "Windows 3.1";
400 break;
401 case VER_PLATFORM_WIN32_WINDOWS:
402 if (ver.dwMajorVersion == 4) {
403 switch (ver.dwMinorVersion) {
404 case 0: sprops.os_name = "Windows 95"; break;
405 case 10: sprops.os_name = "Windows 98"; break;
406 case 90: sprops.os_name = "Windows Me"; break;
407 default: sprops.os_name = "Windows 9X (unknown)"; break;
408 }
409 } else {
410 sprops.os_name = "Windows 9X (unknown)";
411 }
412 break;
429 * If it is, the operating system is Windows XP 64 bit;
430 * otherwise, it is Windows Server 2003."
431 */
432 if(ver.wProductType == VER_NT_WORKSTATION &&
433 si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
434 sprops.os_name = "Windows XP"; /* 64 bit */
435 } else {
436 sprops.os_name = "Windows 2003";
437 }
438 break;
439 default: sprops.os_name = "Windows NT (unknown)"; break;
440 }
441 } else if (ver.dwMajorVersion == 6) {
442 /*
443 * See table in MSDN OSVERSIONINFOEX documentation.
444 */
445 if (ver.wProductType == VER_NT_WORKSTATION) {
446 switch (ver.dwMinorVersion) {
447 case 0: sprops.os_name = "Windows Vista"; break;
448 case 1: sprops.os_name = "Windows 7"; break;
449 case 2: sprops.os_name = "Windows 8"; break;
450 default: sprops.os_name = "Windows NT (unknown)";
451 }
452 } else {
453 switch (ver.dwMinorVersion) {
454 case 0: sprops.os_name = "Windows Server 2008"; break;
455 case 1: sprops.os_name = "Windows Server 2008 R2"; break;
456 default: sprops.os_name = "Windows NT (unknown)";
457 }
458 }
459 } else {
460 sprops.os_name = "Windows NT (unknown)";
461 }
462 break;
463 default:
464 sprops.os_name = "Windows (unknown)";
465 break;
466 }
467 sprintf(buf, "%d.%d", ver.dwMajorVersion, ver.dwMinorVersion);
468 sprops.os_version = _strdup(buf);
469 #if _M_IA64
|