diff options
Diffstat (limited to 'Src/Plugins/General/gen_crasher/GetWinVer.cpp')
-rw-r--r-- | Src/Plugins/General/gen_crasher/GetWinVer.cpp | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/Src/Plugins/General/gen_crasher/GetWinVer.cpp b/Src/Plugins/General/gen_crasher/GetWinVer.cpp new file mode 100644 index 00000000..7434d73e --- /dev/null +++ b/Src/Plugins/General/gen_crasher/GetWinVer.cpp @@ -0,0 +1,195 @@ +// GetWinVer.cpp Version 1.1 +// +// Copyright (C) 2001-2003 Hans Dietrich +// +// This software is released into the public domain. +// You are free to use it in any way you like, except +// that you may not sell this source code. +// +// This software is provided "as is" with no expressed +// or implied warranty. I accept no liability for any +// damage or loss of business that this software may cause. +// +/////////////////////////////////////////////////////////////////////////////// + +//#include "tchar.h" +#include "GetWinVer.h" + +// from winbase.h +#ifndef VER_PLATFORM_WIN32s +#define VER_PLATFORM_WIN32s 0 +#endif +#ifndef VER_PLATFORM_WIN32_WINDOWS +#define VER_PLATFORM_WIN32_WINDOWS 1 +#endif +#ifndef VER_PLATFORM_WIN32_NT +#define VER_PLATFORM_WIN32_NT 2 +#endif +#ifndef VER_PLATFORM_WIN32_CE +#define VER_PLATFORM_WIN32_CE 3 +#endif + +/* + This table has been assembled from Usenet postings, personal + observations, and reading other people's code. Please feel + free to add to it or correct it. + + + dwPlatFormID dwMajorVersion dwMinorVersion dwBuildNumber +95 1 4 0 950 +95 SP1 1 4 0 >950 && <=1080 +95 OSR2 1 4 <10 >1080 +98 1 4 10 1998 +98 SP1 1 4 10 >1998 && <2183 +98 SE 1 4 10 >=2183 +ME 1 4 90 3000 + +NT 3.51 2 3 51 +NT 4 2 4 0 1381 +2000 2 5 0 2195 +XP 2 5 1 2600 +2003 Server 2 5 2 3790 +VISTA 2 6 0 6000 +7 2 6 1 7600 +8 2 6 2 9200 +8.1 2 6 3 9600 +10 2 10 0 10240 +11 2 11 0 22000 + +CE 3 + +*/ + + +/////////////////////////////////////////////////////////////////////////////// +// GetWinVer +BOOL GetWinVer(LPWSTR pszVersion, int *nVersion, LPWSTR pszMajorMinorBuild) +{ + if (!pszVersion || !nVersion || !pszMajorMinorBuild) + return FALSE; + lstrcpy(pszVersion, WUNKNOWNSTR); + *nVersion = WUNKNOWN; + + DWORD (WINAPI *RtlGetVersion)(LPOSVERSIONINFOEXW); + OSVERSIONINFOEXW osinfo; + *(FARPROC*)&RtlGetVersion = GetProcAddress(GetModuleHandleW(L"ntdll"), "RtlGetVersion"); + if (!RtlGetVersion) { + return FALSE; + } + osinfo.dwOSVersionInfoSize = sizeof(osinfo); + if (RtlGetVersion(&osinfo)) { + return FALSE; + } + + DWORD dwPlatformId = osinfo.dwPlatformId; + DWORD dwMajorVersion = osinfo.dwMajorVersion; + DWORD dwMinorVersion = osinfo.dwMinorVersion; + DWORD dwBuildNumber = osinfo.dwBuildNumber & 0xFFFF; // Win 95 needs this + + wsprintfW(pszMajorMinorBuild, L"%u.%u.%u", dwMajorVersion, dwMinorVersion, dwBuildNumber); + + if ((dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (dwMajorVersion == 4)) + { + if ((dwMinorVersion < 10) && (dwBuildNumber == 950)) + { + lstrcpy(pszVersion, W95STR); + *nVersion = W95; + } + else if ((dwMinorVersion < 10) && + ((dwBuildNumber > 950) && (dwBuildNumber <= 1080))) + { + lstrcpy(pszVersion, W95SP1STR); + *nVersion = W95SP1; + } + else if ((dwMinorVersion < 10) && (dwBuildNumber > 1080)) + { + lstrcpy(pszVersion, W95OSR2STR); + *nVersion = W95OSR2; + } + else if ((dwMinorVersion == 10) && (dwBuildNumber == 1998)) + { + lstrcpy(pszVersion, W98STR); + *nVersion = W98; + } + else if ((dwMinorVersion == 10) && + ((dwBuildNumber > 1998) && (dwBuildNumber < 2183))) + { + lstrcpy(pszVersion, W98SP1STR); + *nVersion = W98SP1; + } + else if ((dwMinorVersion == 10) && (dwBuildNumber >= 2183)) + { + lstrcpy(pszVersion, W98SESTR); + *nVersion = W98SE; + } + else if (dwMinorVersion == 90) + { + lstrcpy(pszVersion, WMESTR); + *nVersion = WME; + } + } + else if (dwPlatformId == VER_PLATFORM_WIN32_NT) + { + if ((dwMajorVersion == 3) && (dwMinorVersion == 51)) + { + lstrcpy(pszVersion, WNT351STR); + *nVersion = WNT351; + } + else if ((dwMajorVersion == 4) && (dwMinorVersion == 0)) + { + lstrcpy(pszVersion, WNT4STR); + *nVersion = WNT4; + } + else if ((dwMajorVersion == 5) && (dwMinorVersion == 0)) + { + lstrcpy(pszVersion, W2KSTR); + *nVersion = W2K; + } + else if ((dwMajorVersion == 5) && (dwMinorVersion == 1)) + { + lstrcpy(pszVersion, WXPSTR); + *nVersion = WXP; + } + else if ((dwMajorVersion == 5) && (dwMinorVersion == 2)) + { + lstrcpy(pszVersion, W2003SERVERSTR); + *nVersion = W2003SERVER; + } + else if ((dwMajorVersion == 6) && (dwMinorVersion == 0)) + { + lstrcpy(pszVersion, WVSTR); + *nVersion = WV; + } + else if ((dwMajorVersion == 6) && (dwMinorVersion == 1)) + { + lstrcpy(pszVersion, W7STR); + *nVersion = W7; + } + else if ((dwMajorVersion == 6) && (dwMinorVersion == 2)) + { + lstrcpy(pszVersion, W8STR); + *nVersion = W8; + } + else if ((dwMajorVersion == 6) && (dwMinorVersion == 3)) + { + lstrcpy(pszVersion, W81STR); + *nVersion = W81; + } + else if ((dwMajorVersion == 10) && (dwMinorVersion == 0) && (dwBuildNumber < 22000)) + { + lstrcpy(pszVersion, W10STR); + *nVersion = W10; + } + else if ((dwMajorVersion == 10) && (dwMinorVersion == 0) && (dwBuildNumber >= 22000)) + { + lstrcpy(pszVersion, W11STR); + *nVersion = W11; + } + } + else if (dwPlatformId == VER_PLATFORM_WIN32_CE) + { + lstrcpy(pszVersion, WCESTR); + *nVersion = WCE; + } + return TRUE; +}
\ No newline at end of file |