diff options
| author | Shauren <shauren.trinity@gmail.com> | 2023-12-01 19:53:13 +0100 |
|---|---|---|
| committer | funjoker <funjoker109@gmail.com> | 2023-12-01 23:29:27 +0100 |
| commit | 7e238a32fbef7b746fd1f76fc0b15c1a010a2792 (patch) | |
| tree | 7d0a0e3bc014f1fc12cc25c98b5ac6a710ca3ba9 /src/common | |
| parent | 33510fafd866ab14045731ad6e6833a01ade9ba6 (diff) | |
Core/Misc: Added windows version checks during startup to avoid confusion about crashes when running on unsupported OS
(cherry picked from commit 333630b7de15c4090392fcbbc1bc58da4d5fb138)
Diffstat (limited to 'src/common')
| -rw-r--r-- | src/common/Debugging/WheatyExceptionReport.cpp | 2 | ||||
| -rw-r--r-- | src/common/Utilities/Util.cpp | 24 | ||||
| -rw-r--r-- | src/common/Utilities/Util.h | 2 |
3 files changed, 23 insertions, 5 deletions
diff --git a/src/common/Debugging/WheatyExceptionReport.cpp b/src/common/Debugging/WheatyExceptionReport.cpp index bab98e72e3b..2c20a8a2e0b 100644 --- a/src/common/Debugging/WheatyExceptionReport.cpp +++ b/src/common/Debugging/WheatyExceptionReport.cpp @@ -243,7 +243,7 @@ BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax) RTL_OSVERSIONINFOEXW osvi = { }; osvi.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW); NTSTATUS bVersionEx = RtlGetVersion((PRTL_OSVERSIONINFOW)&osvi); - if (bVersionEx < 0) + if (FAILED(bVersionEx)) { osvi.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOW); if (!RtlGetVersion((PRTL_OSVERSIONINFOW)&osvi)) diff --git a/src/common/Utilities/Util.cpp b/src/common/Utilities/Util.cpp index d852ed655a0..5fb34c59948 100644 --- a/src/common/Utilities/Util.cpp +++ b/src/common/Utilities/Util.cpp @@ -31,11 +31,27 @@ #include <cstdarg> #include <ctime> -#if TRINITY_COMPILER == TRINITY_COMPILER_GNU - #include <sys/socket.h> - #include <netinet/in.h> - #include <arpa/inet.h> +void Trinity::VerifyOsVersion() +{ +#if TRINITY_PLATFORM == TRINITY_PLATFORM_WINDOWS + auto isWindowsBuildGreaterOrEqual = [](DWORD build) + { + OSVERSIONINFOEX osvi = { sizeof(osvi), 0, 0, build, 0, {0}, 0, 0, 0, 0 }; + ULONGLONG conditionMask = 0; + VER_SET_CONDITION(conditionMask, VER_BUILDNUMBER, VER_GREATER_EQUAL); + + return VerifyVersionInfo(&osvi, VER_BUILDNUMBER, conditionMask); + }; + + if (!isWindowsBuildGreaterOrEqual(TRINITY_REQUIRED_WINDOWS_BUILD)) + { + OSVERSIONINFOEX osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0, 0, 0 }; + GetVersionEx((LPOSVERSIONINFO)&osvi); + ABORT_MSG("TrinityCore requires Windows 10 19H1 (1903) or Windows Server 2019 (1903) - require build number 10.0.%d but found %d.%d.%d", + TRINITY_REQUIRED_WINDOWS_BUILD, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber); + } #endif +} std::vector<std::string_view> Trinity::Tokenize(std::string_view str, char sep, bool keepEmpty) { diff --git a/src/common/Utilities/Util.h b/src/common/Utilities/Util.h index 334b3ab6ac0..e847eaab24a 100644 --- a/src/common/Utilities/Util.h +++ b/src/common/Utilities/Util.h @@ -40,6 +40,8 @@ enum class TimeFormat : uint8 namespace Trinity { + TC_COMMON_API void VerifyOsVersion(); + TC_COMMON_API std::vector<std::string_view> Tokenize(std::string_view str, char sep, bool keepEmpty); /* this would return string_view into temporary otherwise */ |
