From 3302895145ed285af61d0b55d76755845ecd2069 Mon Sep 17 00:00:00 2001 From: LoRd_MuldeR Date: Sun, 8 May 2016 20:39:23 +0200 Subject: [PATCH] Fixed is_library_file() for older Windows versions. --- src/OSSupport_Win32.cpp | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/OSSupport_Win32.cpp b/src/OSSupport_Win32.cpp index 46bbb4e..ce2dd35 100644 --- a/src/OSSupport_Win32.cpp +++ b/src/OSSupport_Win32.cpp @@ -1000,27 +1000,46 @@ void MUtils::OS::sleep_ms(const size_t &duration) // EXECUTABLE CHECK /////////////////////////////////////////////////////////////////////////////// +static bool libraryAsImageResourceSupported() +{ + OSVERSIONINFOEXW osvi; + memset(&osvi, 0, sizeof(OSVERSIONINFOEXW)); + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW); + if(GetVersionExW((LPOSVERSIONINFOW)&osvi)) + { + if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) + { + return (osvi.dwMajorVersion >= 6U); + } + } + return false; +} + bool MUtils::OS::is_executable_file(const QString &path) { - bool bIsExecutable = false; DWORD binaryType; if(GetBinaryType(MUTILS_WCHR(QDir::toNativeSeparators(path)), &binaryType)) { - bIsExecutable = (binaryType == SCS_32BIT_BINARY || binaryType == SCS_64BIT_BINARY); + return ((binaryType == SCS_32BIT_BINARY) || (binaryType == SCS_64BIT_BINARY)); } - return bIsExecutable; + + const DWORD errorCode = GetLastError(); + qWarning("GetBinaryType() failed with error: 0x%08X", errorCode); + return false; } bool MUtils::OS::is_library_file(const QString &path) { - bool bIsLibrary = false; - const HMODULE hMod = LoadLibraryEx(MUTILS_WCHR(QDir::toNativeSeparators(path)), NULL, LOAD_LIBRARY_AS_IMAGE_RESOURCE); - if (hMod) + const DWORD flags = libraryAsImageResourceSupported() ? (LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE) : (LOAD_LIBRARY_AS_DATAFILE | DONT_RESOLVE_DLL_REFERENCES); + if (const HMODULE hMod = LoadLibraryEx(MUTILS_WCHR(QDir::toNativeSeparators(path)), NULL, flags)) { - bIsLibrary = true; FreeLibrary(hMod); + return true; } - return bIsLibrary; + + const DWORD errorCode = GetLastError(); + qWarning("LoadLibraryEx() failed with error: 0x%08X", errorCode); + return false; } /////////////////////////////////////////////////////////////////////////////// -- 2.11.4.GIT