| 55 | #include "misc.h" |
| 56 | |
| 57 | const char *get_os(void) |
| 58 | { |
| 59 | #ifdef WIN32 |
| 60 | { |
| 61 | static char buffer[100] = {0x00}; |
| 62 | /* For more information, read |
| 63 | https://msdn.microsoft.com/en-us/library/windows/desktop/ms724834%28v=vs.85%29.aspx |
| 64 | */ |
| 65 | OSVERSIONINFOEX Ver; |
| 66 | int Extended = 1; |
| 67 | memset(&Ver,0,sizeof(OSVERSIONINFOEX)); |
| 68 | Ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); |
| 69 | |
| 70 | if (!GetVersionEx((OSVERSIONINFO *)&Ver)) { |
| 71 | Extended = 0; |
| 72 | Ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); |
| 73 | if (!GetVersionEx((OSVERSIONINFO *)&Ver)) { |
| 74 | snprintf(buffer, sizeof(buffer) - 1, "Windows"); |
| 75 | return buffer; |
| 76 | } |
| 77 | } |
| 78 | |
| 79 | /* ----------------- 9x/NT4 family ------------------ */ |
| 80 | |
| 81 | if (Ver.dwMajorVersion == 4 && Ver.dwMinorVersion == 0) |
| 82 | { |
| 83 | /* no info about Win95 SP1, Win95 OSR2.1, Win95 OSR2.5.... */ |
| 84 | if(Ver.dwBuildNumber == 950) |
| 85 | snprintf(buffer, sizeof(buffer) - 1, "Windows 95"); |
| 86 | else if (Ver.dwBuildNumber == 1111) |
| 87 | snprintf(buffer, sizeof(buffer) - 1, "Windows 95 OSR2.x"); |
| 88 | else if(Ver.dwBuildNumber == 1381) |
| 89 | snprintf(buffer, sizeof(buffer) - 1, "Windows NT 4.0"); |
| 90 | else |
| 91 | snprintf(buffer, sizeof(buffer) - 1, "Windows 95 or NT 4.0 (%lu)", Ver.dwBuildNumber); |
| 92 | } |
| 93 | else if (Ver.dwMajorVersion == 4 && Ver.dwMinorVersion == 10) |
| 94 | { |
| 95 | /* no info about Win98 SP1.... */ |
| 96 | if(Ver.dwBuildNumber == 1998) |
| 97 | snprintf(buffer, sizeof(buffer) - 1, "Windows 98"); |
| 98 | else if (Ver.dwBuildNumber == 2222) |
| 99 | snprintf(buffer, sizeof(buffer) - 1, "Windows 98 SE"); |
| 100 | else |
| 101 | snprintf(buffer, sizeof(buffer) - 1, "Windows 98 (%lu)", Ver.dwBuildNumber); |
| 102 | } |
| 103 | else if (Ver.dwMajorVersion == 4 && Ver.dwMinorVersion == 90) |
| 104 | { |
| 105 | if(Ver.dwBuildNumber == 3000) |
| 106 | snprintf(buffer, sizeof(buffer) - 1, "Windows ME"); |
| 107 | else |
| 108 | snprintf(buffer, sizeof(buffer) - 1, "Windows ME (%lu)", Ver.dwBuildNumber); |
| 109 | } |
| 110 | else if (Ver.dwMajorVersion == 5 && Ver.dwMinorVersion == 0) |
| 111 | { |
| 112 | if(Ver.dwBuildNumber == 2195) |
| 113 | snprintf(buffer, sizeof(buffer) - 1, "Windows 2000"); |
| 114 | else |