1 /* DllSecur.c -- DLL loading security
\r
2 2016-10-04 : Igor Pavlov : Public domain */
\r
10 #include "DllSecur.h"
\r
14 typedef BOOL (WINAPI *Func_SetDefaultDllDirectories)(DWORD DirectoryFlags);
\r
16 #define MY_LOAD_LIBRARY_SEARCH_USER_DIRS 0x400
\r
17 #define MY_LOAD_LIBRARY_SEARCH_SYSTEM32 0x800
\r
19 static const char * const g_Dlls =
\r
35 void LoadSecurityDlls()
\r
39 wchar_t buf[MAX_PATH + 100];
\r
42 // at Vista (ver 6.0) : CoCreateInstance(CLSID_ShellLink, ...) doesn't work after SetDefaultDllDirectories() : Check it ???
\r
44 vi.dwOSVersionInfoSize = sizeof(vi);
\r
45 if (!GetVersionEx(&vi) || vi.dwMajorVersion != 6 || vi.dwMinorVersion != 0)
\r
47 Func_SetDefaultDllDirectories setDllDirs = (Func_SetDefaultDllDirectories)
\r
48 GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "SetDefaultDllDirectories");
\r
50 if (setDllDirs(MY_LOAD_LIBRARY_SEARCH_SYSTEM32 | MY_LOAD_LIBRARY_SEARCH_USER_DIRS))
\r
56 unsigned len = GetSystemDirectoryW(buf, MAX_PATH + 2);
\r
57 if (len == 0 || len > MAX_PATH)
\r
62 unsigned pos = (unsigned)lstrlenW(buf);
\r
64 if (buf[pos - 1] != '\\')
\r
67 for (dll = g_Dlls; dll[0] != 0;)
\r
79 lstrcatW(buf, L".dll");
\r
80 LoadLibraryExW(buf, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
\r