aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/General/gen_crasher/GetWinVer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/General/gen_crasher/GetWinVer.cpp')
-rw-r--r--Src/Plugins/General/gen_crasher/GetWinVer.cpp195
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