summaryrefslogtreecommitdiff
path: root/build/appstub/appstub.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'build/appstub/appstub.cpp')
-rw-r--r--build/appstub/appstub.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/build/appstub/appstub.cpp b/build/appstub/appstub.cpp
new file mode 100644
index 0000000000..67e4159c8e
--- /dev/null
+++ b/build/appstub/appstub.cpp
@@ -0,0 +1,37 @@
+#include <Windows.h>
+
+#include <delayimp.h>
+#pragma comment(lib, "delayimp.lib")
+
+static HANDLE hUcrtDll = nullptr;
+
+EXTERN_C HANDLE WINAPI hook(unsigned mode, PDelayLoadInfo)
+{
+ if (mode == dliNotePreLoadLibrary && hUcrtDll == nullptr) {
+ wchar_t wszPath[MAX_PATH];
+ GetModuleFileNameW(nullptr, wszPath, _countof(wszPath));
+
+ // if current dir isn't set
+ for (int i = lstrlenW(wszPath); i >= 0; i--)
+ if (wszPath[i] == '\\') {
+ wszPath[i] = 0;
+ break;
+ }
+
+ SetCurrentDirectoryW(wszPath);
+
+ lstrcatW(wszPath, L"\\libs");
+ SetDllDirectoryW(wszPath);
+
+#ifdef _DEBUG
+ lstrcatW(wszPath, L"\\ucrtbased.dll");
+#else
+ lstrcatW(wszPath, L"\\ucrtbase.dll");
+#endif
+ hUcrtDll = LoadLibraryW(wszPath);
+ }
+
+ return 0;
+}
+
+EXTERN_C const PfnDliHook __pfnDliNotifyHook2 = (PfnDliHook)&hook;