|
|
|
@ -707,38 +707,6 @@ int OTTDStringCompare(const char *s1, const char *s2)
|
|
|
|
|
return CompareString(MAKELCID(_current_language->winlangid, SORT_DEFAULT), NORM_IGNORECASE, s1_buf, -1, s2_buf, -1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Is the current Windows version Vista or later?
|
|
|
|
|
* @return True if the current Windows is Vista or later.
|
|
|
|
|
*/
|
|
|
|
|
bool IsWindowsVistaOrGreater()
|
|
|
|
|
{
|
|
|
|
|
typedef BOOL (WINAPI * LPVERIFYVERSIONINFO)(LPOSVERSIONINFOEX, DWORD, DWORDLONG);
|
|
|
|
|
typedef ULONGLONG (NTAPI * LPVERSETCONDITIONMASK)(ULONGLONG, DWORD, BYTE);
|
|
|
|
|
#ifdef UNICODE
|
|
|
|
|
static LPVERIFYVERSIONINFO _VerifyVersionInfo = (LPVERIFYVERSIONINFO)GetProcAddress(GetModuleHandle(_T("Kernel32")), "VerifyVersionInfoW");
|
|
|
|
|
#else
|
|
|
|
|
static LPVERIFYVERSIONINFO _VerifyVersionInfo = (LPVERIFYVERSIONINFO)GetProcAddress(GetModuleHandle(_T("Kernel32")), "VerifyVersionInfoA");
|
|
|
|
|
#endif
|
|
|
|
|
static LPVERSETCONDITIONMASK _VerSetConditionMask = (LPVERSETCONDITIONMASK)GetProcAddress(GetModuleHandle(_T("Kernel32")), "VerSetConditionMask");
|
|
|
|
|
|
|
|
|
|
if (_VerifyVersionInfo != nullptr && _VerSetConditionMask != nullptr) {
|
|
|
|
|
OSVERSIONINFOEX osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 };
|
|
|
|
|
DWORDLONG dwlConditionMask = 0;
|
|
|
|
|
dwlConditionMask = _VerSetConditionMask(dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL);
|
|
|
|
|
dwlConditionMask = _VerSetConditionMask(dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL);
|
|
|
|
|
dwlConditionMask = _VerSetConditionMask(dwlConditionMask, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
|
|
|
|
|
|
|
|
|
|
osvi.dwMajorVersion = 6;
|
|
|
|
|
osvi.dwMinorVersion = 0;
|
|
|
|
|
osvi.wServicePackMajor = 0;
|
|
|
|
|
|
|
|
|
|
return _VerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE;
|
|
|
|
|
} else {
|
|
|
|
|
return LOBYTE(GetVersion()) >= 6;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef _MSC_VER
|
|
|
|
|
/* Based on code from MSDN: https://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx */
|
|
|
|
|
const DWORD MS_VC_EXCEPTION = 0x406D1388;
|
|
|
|
|