Merge pull request #461 from negativeExponent/libchdr
[pcsx_rearmed.git] / deps / lzma-16.04 / C / DllSecur.c
CommitLineData
ce188d4d 1/* DllSecur.c -- DLL loading security\r
22016-10-04 : Igor Pavlov : Public domain */\r
3\r
4#include "Precomp.h"\r
5\r
6#ifdef _WIN32\r
7\r
8#include <windows.h>\r
9\r
10#include "DllSecur.h"\r
11\r
12#ifndef UNDER_CE\r
13\r
14typedef BOOL (WINAPI *Func_SetDefaultDllDirectories)(DWORD DirectoryFlags);\r
15\r
16#define MY_LOAD_LIBRARY_SEARCH_USER_DIRS 0x400\r
17#define MY_LOAD_LIBRARY_SEARCH_SYSTEM32 0x800\r
18\r
19static const char * const g_Dlls =\r
20 #ifndef _CONSOLE\r
21 "UXTHEME\0"\r
22 #endif\r
23 "USERENV\0"\r
24 "SETUPAPI\0"\r
25 "APPHELP\0"\r
26 "PROPSYS\0"\r
27 "DWMAPI\0"\r
28 "CRYPTBASE\0"\r
29 "OLEACC\0"\r
30 "CLBCATQ\0"\r
31 ;\r
32\r
33#endif\r
34\r
35void LoadSecurityDlls()\r
36{\r
37 #ifndef UNDER_CE\r
38 \r
39 wchar_t buf[MAX_PATH + 100];\r
40\r
41 {\r
42 // at Vista (ver 6.0) : CoCreateInstance(CLSID_ShellLink, ...) doesn't work after SetDefaultDllDirectories() : Check it ???\r
43 OSVERSIONINFO vi;\r
44 vi.dwOSVersionInfoSize = sizeof(vi);\r
45 if (!GetVersionEx(&vi) || vi.dwMajorVersion != 6 || vi.dwMinorVersion != 0)\r
46 {\r
47 Func_SetDefaultDllDirectories setDllDirs = (Func_SetDefaultDllDirectories)\r
48 GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "SetDefaultDllDirectories");\r
49 if (setDllDirs)\r
50 if (setDllDirs(MY_LOAD_LIBRARY_SEARCH_SYSTEM32 | MY_LOAD_LIBRARY_SEARCH_USER_DIRS))\r
51 return;\r
52 }\r
53 }\r
54\r
55 {\r
56 unsigned len = GetSystemDirectoryW(buf, MAX_PATH + 2);\r
57 if (len == 0 || len > MAX_PATH)\r
58 return;\r
59 }\r
60 {\r
61 const char *dll;\r
62 unsigned pos = (unsigned)lstrlenW(buf);\r
63\r
64 if (buf[pos - 1] != '\\')\r
65 buf[pos++] = '\\';\r
66 \r
67 for (dll = g_Dlls; dll[0] != 0;)\r
68 {\r
69 unsigned k = 0;\r
70 for (;;)\r
71 {\r
72 char c = *dll++;\r
73 buf[pos + k] = c;\r
74 k++;\r
75 if (c == 0)\r
76 break;\r
77 }\r
78\r
79 lstrcatW(buf, L".dll");\r
80 LoadLibraryExW(buf, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);\r
81 }\r
82 }\r
83 \r
84 #endif\r
85}\r
86\r
87#endif\r