Source code
Revision control
Copy as Markdown
Other Tools
/* DllSecur.c -- DLL loading security↩
2016-10-04 : Igor Pavlov : Public domain */↩
↩
#include "Precomp.h"↩
↩
#ifdef _WIN32↩
↩
#include <windows.h>↩
↩
#include "DllSecur.h"↩
↩
#ifndef UNDER_CE↩
↩
typedef BOOL (WINAPI *Func_SetDefaultDllDirectories)(DWORD DirectoryFlags);↩
↩
#define MY_LOAD_LIBRARY_SEARCH_USER_DIRS 0x400↩
#define MY_LOAD_LIBRARY_SEARCH_SYSTEM32 0x800↩
↩
static const char * const g_Dlls =↩
#ifndef _CONSOLE↩
"UXTHEME\0"↩
#endif↩
"USERENV\0"↩
"SETUPAPI\0"↩
"APPHELP\0"↩
"PROPSYS\0"↩
"DWMAPI\0"↩
"CRYPTBASE\0"↩
"OLEACC\0"↩
"CLBCATQ\0"↩
;↩
↩
#endif↩
↩
void LoadSecurityDlls()↩
{↩
#ifndef UNDER_CE↩
↩
wchar_t buf[MAX_PATH + 100];↩
↩
{↩
// at Vista (ver 6.0) : CoCreateInstance(CLSID_ShellLink, ...) doesn't work after SetDefaultDllDirectories() : Check it ???↩
OSVERSIONINFO vi;↩
vi.dwOSVersionInfoSize = sizeof(vi);↩
if (!GetVersionEx(&vi) || vi.dwMajorVersion != 6 || vi.dwMinorVersion != 0)↩
{↩
Func_SetDefaultDllDirectories setDllDirs = (Func_SetDefaultDllDirectories)↩
GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "SetDefaultDllDirectories");↩
if (setDllDirs)↩
if (setDllDirs(MY_LOAD_LIBRARY_SEARCH_SYSTEM32 | MY_LOAD_LIBRARY_SEARCH_USER_DIRS))↩
return;↩
}↩
}↩
↩
{↩
unsigned len = GetSystemDirectoryW(buf, MAX_PATH + 2);↩
if (len == 0 || len > MAX_PATH)↩
return;↩
}↩
{↩
const char *dll;↩
unsigned pos = (unsigned)lstrlenW(buf);↩
↩
if (buf[pos - 1] != '\\')↩
buf[pos++] = '\\';↩
↩
for (dll = g_Dlls; dll[0] != 0;)↩
{↩
unsigned k = 0;↩
for (;;)↩
{↩
char c = *dll++;↩
buf[pos + k] = c;↩
k++;↩
if (c == 0)↩
break;↩
}↩
↩
lstrcatW(buf, L".dll");↩
LoadLibraryExW(buf, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);↩
}↩
}↩
↩
#endif↩
}↩
↩
#endif↩