-#include <Windows.h>\r
+#include <Windows.h>\r
#include <Shlobj.h>\r
#include <tlhelp32.h>\r
#include <Psapi.h>\r
#include <ventoy_disk.h>\r
#include <ventoy_http.h>\r
\r
+char g_ventoy_dir[MAX_PATH];\r
+\r
static BOOL g_running = FALSE;\r
static HWND g_refresh_button;\r
static HWND g_start_button;\r
MSGID_BTN_STOP_TIP, \r
MSGID_BTN_EXIT_TIP,\r
MSGID_RUNNING_TIP,\r
+ MSGID_NO_TARXZ_TIP,\r
\r
MSGID_BUTT\r
}MSGID;\r
\r
const WCHAR *g_msg_cn[MSGID_BUTT] =\r
{\r
- L"´íÎó",\r
- L"ÌáÐÑ",\r
- L"ÇëÔÚ Ventoy Å̸ùĿ¼ÏÂÔËÐб¾³ÌÐò£¡£¨´æ·ÅISOÎļþµÄλÖã©",\r
- L"´´½¨ ventoy Ŀ¼ʧ°Ü£¬ÎÞ·¨¼ÌÐø£¡",\r
- L"ventoy Ŀ¼´æÔÚ£¬µ«ÊÇ´óСд²»Æ¥Å䣬ÇëÏȽ«ÆäÖØÃüÃû£¡",\r
- L"ÄÚ²¿´íÎ󣬳ÌÐò¼´½«Í˳ö£¡",\r
- L"Ë¢ÐÂ",\r
- L"Æô¶¯",\r
- L"ֹͣ",\r
- L"Á´½Ó",\r
- L"Í˳ö",\r
-\r
- L"Í£Ö¹ÔËÐкóä¯ÀÀÆ÷Ò³Ãæ½«»á¹Ø±Õ£¬ÊÇ·ñ¼ÌÐø£¿",\r
- L"µ±Ç°·þÎñÕýÔÚÔËÐУ¬ÊÇ·ñÍ˳ö£¿",\r
- L"ÇëÏȹرÕÕýÔÚÔËÐÐµÄ VentoyPlugson ³ÌÐò£¡",\r
+ L"错误",\r
+ L"提醒",\r
+ L"请在 Ventoy 盘根目录下运行本程序!(存放ISO文件的位置)",\r
+ L"创建 ventoy 目录失败,无法继续!",\r
+ L"ventoy 目录存在,但是大小写不匹配,请先将其重命名!",\r
+ L"内部错误,程序即将退出!",\r
+ L"刷新",\r
+ L"启动",\r
+ L"停止",\r
+ L"链接",\r
+ L"退出",\r
+\r
+ L"停止运行后浏览器页面将会关闭,是否继续?",\r
+ L"当前服务正在运行,是否退出?",\r
+ L"请先关闭正在运行的 VentoyPlugson 程序!",\r
+ L"ventoy\\plugson.tar.xz 文件不存在,请在正确的目录下运行!",\r
};\r
const WCHAR *g_msg_en[MSGID_BUTT] =\r
{\r
L"The browser page will close after stop, continue?",\r
L"Service is running, continue?",\r
L"Please close another running VentoyPlugson instance!",\r
+ L"ventoy\\plugson.tar.xz does not exist, please run under the correct directory!",\r
};\r
\r
const WCHAR **g_msg_lang = NULL;\r
\r
static BOOL OnDestroyDialog()\r
{ \r
- ventoy_http_exit();
+ ventoy_http_exit();\r
ventoy_disk_exit();\r
#ifndef VENTOY_SIM \r
ventoy_www_exit();\r
return 0;\r
}\r
\r
+\r
+\r
+//\r
+//copy from Rufus\r
+//Copyright © 2011-2021 Pete Batard <pete@akeo.ie>\r
+//\r
+#include <delayimp.h>\r
+// For delay-loaded DLLs, use LOAD_LIBRARY_SEARCH_SYSTEM32 to avoid DLL search order hijacking.\r
+FARPROC WINAPI dllDelayLoadHook(unsigned dliNotify, PDelayLoadInfo pdli)\r
+{\r
+ if (dliNotify == dliNotePreLoadLibrary) {\r
+ // Windows 7 without KB2533623 does not support the LOAD_LIBRARY_SEARCH_SYSTEM32 flag.\r
+ // That is is OK, because the delay load handler will interrupt the NULL return value\r
+ // to mean that it should perform a normal LoadLibrary.\r
+ return (FARPROC)LoadLibraryExA(pdli->szDll, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);\r
+ }\r
+ return NULL;\r
+}\r
+\r
+#if defined(_MSC_VER)\r
+// By default the Windows SDK headers have a `const` while MinGW does not.\r
+const\r
+#endif\r
+PfnDliHook __pfnDliNotifyHook2 = dllDelayLoadHook;\r
+\r
+typedef BOOL(WINAPI* SetDefaultDllDirectories_t)(DWORD);\r
+static void DllProtect(void)\r
+{\r
+ SetDefaultDllDirectories_t pfSetDefaultDllDirectories = NULL;\r
+\r
+ // Disable loading system DLLs from the current directory (sideloading mitigation)\r
+ // PS: You know that official MSDN documentation for SetDllDirectory() that explicitly\r
+ // indicates that "If the parameter is an empty string (""), the call removes the current\r
+ // directory from the default DLL search order"? Yeah, that doesn't work. At all.\r
+ // Still, we invoke it, for platforms where the following call might actually work...\r
+ SetDllDirectoryA("");\r
+\r
+ // For libraries on the KnownDLLs list, the system will always load them from System32.\r
+ // For other DLLs we link directly to, we can delay load the DLL and use a delay load\r
+ // hook to load them from System32. Note that, for this to work, something like:\r
+ // 'somelib.dll;%(DelayLoadDLLs)' must be added to the 'Delay Loaded Dlls' option of\r
+ // the linker properties in Visual Studio (which means this won't work with MinGW).\r
+ // For all other DLLs, use SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32).\r
+ // Finally, we need to perform the whole gymkhana below, where we can't call on\r
+ // SetDefaultDllDirectories() directly, because Windows 7 doesn't have the API exposed.\r
+ // Also, no, Coverity, we never need to care about freeing kernel32 as a library.\r
+ // coverity[leaked_storage]\r
+\r
+ pfSetDefaultDllDirectories = (SetDefaultDllDirectories_t)\r
+ GetProcAddress(LoadLibraryW(L"kernel32.dll"), "SetDefaultDllDirectories");\r
+ if (pfSetDefaultDllDirectories != NULL)\r
+ pfSetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32);\r
+}\r
+\r
+\r
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)\r
{\r
int rc;\r
HANDLE hMutex;\r
+ WCHAR CurDir[MAX_PATH];\r
\r
UNREFERENCED_PARAMETER(hPrevInstance);\r
\r
+ DllProtect();\r
+\r
if (GetUserDefaultUILanguage() == 0x0804)\r
{\r
g_sysinfo.language = LANGUAGE_CN;\r
return 1;\r
}\r
\r
- GetCurrentDirectoryA(MAX_PATH, g_cur_dir);\r
+ GetCurrentDirectoryW(MAX_PATH, CurDir);\r
+ WideCharToMultiByte(CP_UTF8, 0, CurDir, -1, g_cur_dir, MAX_PATH, NULL, 0);\r
+\r
+ sprintf_s(g_ventoy_dir, sizeof(g_ventoy_dir), "%s", g_cur_dir);\r
sprintf_s(g_log_file, sizeof(g_log_file), "%s\\%s", g_cur_dir, LOG_FILE);\r
ventoy_log_init();\r
\r
+ if (!ventoy_is_file_exist("%s\\ventoy\\%s", g_ventoy_dir, PLUGSON_TXZ))\r
+ { \r
+ MessageBoxW(NULL, g_msg_lang[MSGID_NO_TARXZ_TIP], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);\r
+ return 1;\r
+ }\r
\r
ParseCmdLine(lpCmdLine, g_sysinfo.ip, g_sysinfo.port);\r
if (g_sysinfo.ip[0] == 0)\r