aboutsummaryrefslogtreecommitdiff
path: root/deps/lzma-16.04/C/DllSecur.c
diff options
context:
space:
mode:
authoraliaspider2019-05-14 08:58:52 +0100
committeraliaspider2019-05-14 08:58:52 +0100
commitce188d4d7f3b9ad04867c49b424e8497c2ade92b (patch)
treeb7f82140860acabb2d0e3a5216f78bf98691c267 /deps/lzma-16.04/C/DllSecur.c
parent5ffd1f23eb970679dfe8b540bc3df8e776dc9e17 (diff)
downloadpcsx_rearmed-ce188d4d7f3b9ad04867c49b424e8497c2ade92b.tar.gz
pcsx_rearmed-ce188d4d7f3b9ad04867c49b424e8497c2ade92b.tar.bz2
pcsx_rearmed-ce188d4d7f3b9ad04867c49b424e8497c2ade92b.zip
add CHD support.
Diffstat (limited to 'deps/lzma-16.04/C/DllSecur.c')
-rw-r--r--deps/lzma-16.04/C/DllSecur.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/deps/lzma-16.04/C/DllSecur.c b/deps/lzma-16.04/C/DllSecur.c
new file mode 100644
index 0000000..8745421
--- /dev/null
+++ b/deps/lzma-16.04/C/DllSecur.c
@@ -0,0 +1,87 @@
+/* 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