diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index 5f7c3efd436615a35748246873312e7e3bda37b3..b94bc28883f4892ffa168d51036bb4733d081976 100755 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -303,18 +303,26 @@ LLOSInfo::LLOSInfo() : mOSStringSimple += "32-bit "; } - DWORD shell32_major, shell32_minor, shell32_build; - bool got_shell32_version = get_shell32_dll_version(shell32_major, - shell32_minor, - shell32_build); + OSVERSIONINFOEX osvi; + BOOL bOsVersionInfoEx; + // Try calling GetVersionEx using the OSVERSIONINFOEX structure. + ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + if (!(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *) &osvi))) + { + // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO. + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *) &osvi); + } + std::string tmpstr; - if (got_shell32_version) + if (bOsVersionInfoEx) { - mMajorVer = shell32_major; - mMinorVer = shell32_minor; - mBuild = shell32_build; - tmpstr = llformat("%s(Build %d)", service_pack.c_str(), shell32_build); + mMajorVer = osvi.dwMajorVersion; + mMinorVer = osvi.dwMinorVersion; + mBuild = osvi.dwBuildNumber; + tmpstr = llformat("%s(Build %d)", service_pack.c_str(), mBuild); } else {