///////////////////////////////////////////////////////////////////////////////
// MuldeR's Utilities for Qt
-// Copyright (C) 2004-2017 LoRd_MuldeR <MuldeR2@GMX.de>
+// Copyright (C) 2004-2023 LoRd_MuldeR <MuldeR2@GMX.de>
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
///////////////////////////////////////////////////////////////////////////////
// Invalid parameters handler
-static void my_invalid_param_handler(const wchar_t* exp, const wchar_t* fun, const wchar_t* fil, unsigned int, uintptr_t)
+static void my_invalid_param_handler(const wchar_t* /*exp*/, const wchar_t* /*fun*/, const wchar_t* /*fil*/, unsigned int, uintptr_t)
{
MUtils::OS::fatal_exit(L"Invalid parameter handler invoked, application will exit!");
}
}
// Global exception handler
-static LONG WINAPI my_exception_handler(struct _EXCEPTION_POINTERS *ExceptionInfo)
+static LONG WINAPI my_exception_handler(struct _EXCEPTION_POINTERS* /*ExceptionInfo*/)
{
MUtils::OS::fatal_exit(L"Unhandeled exception handler invoked, application will exit!");
return LONG_MAX;
}
///////////////////////////////////////////////////////////////////////////////
+// DEFAULT DLL DIRECTORIES
+///////////////////////////////////////////////////////////////////////////////
+
+//Flags
+#define MY_LOAD_LIBRARY_SEARCH_APPLICATION_DIR 0x200
+#define MY_LOAD_LIBRARY_SEARCH_USER_DIRS 0x400
+#define MY_LOAD_LIBRARY_SEARCH_SYSTEM32 0x800
+
+#ifdef MUTILS_STATIC_LIB
+#define MY_LOAD_LIBRARY_FLAGS (MY_LOAD_LIBRARY_SEARCH_SYSTEM32 | MY_LOAD_LIBRARY_SEARCH_USER_DIRS)
+#else
+#define MY_LOAD_LIBRARY_FLAGS (MY_LOAD_LIBRARY_SEARCH_SYSTEM32 | MY_LOAD_LIBRARY_SEARCH_USER_DIRS | MY_LOAD_LIBRARY_SEARCH_APPLICATION_DIR)
+#endif
+
+static void set_default_dll_directories(void)
+{
+ typedef BOOL(__stdcall *MySetDefaultDllDirectories)(const DWORD DirectoryFlags);
+ if (const HMODULE kernel32 = GetModuleHandleW(L"kernel32"))
+ {
+ if (const MySetDefaultDllDirectories pSetDefaultDllDirectories = (MySetDefaultDllDirectories)GetProcAddress(kernel32, "SetDefaultDllDirectories"))
+ {
+ pSetDefaultDllDirectories(MY_LOAD_LIBRARY_FLAGS);
+ }
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
// SETUP ERROR HANDLERS
///////////////////////////////////////////////////////////////////////////////
SetUnhandledExceptionFilter(my_exception_handler);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL);
_set_invalid_parameter_handler(my_invalid_param_handler);
- SetDllDirectoryW(L""); /*don'tload DLL from "current" directory*/
-
+
+ /*to prevent DLL pre-loading attacks*/
+ set_default_dll_directories();
+ SetDllDirectoryW(L"");
+
static const int signal_num[6] = { SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM };
for(size_t i = 0; i < 6; i++)
{
signal(signal_num[i], my_signal_handler);
}
-
}
///////////////////////////////////////////////////////////////////////////////