]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
1.0.09 beta1 release v1.0.09beta1
authorlongpanda <admin@ventoy.net>
Mon, 4 May 2020 15:46:51 +0000 (23:46 +0800)
committerlongpanda <admin@ventoy.net>
Mon, 4 May 2020 15:47:01 +0000 (23:47 +0800)
INSTALL/Ventoy2Disk.exe
INSTALL/Ventoy2Disk.sh
Ventoy2Disk/Ventoy2Disk/Language.c
Ventoy2Disk/Ventoy2Disk/Language.h
Ventoy2Disk/Ventoy2Disk/PhyDrive.c
Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.rc
Ventoy2Disk/Ventoy2Disk/WinDialog.c
Ventoy2Disk/Ventoy2Disk/resource.h

index 228eb99082c3b2a7c883f7c67ec0b6b03ba78227..a30726ed51f7d4fc4a16cad1727edbd03d898ec4 100644 (file)
Binary files a/INSTALL/Ventoy2Disk.exe and b/INSTALL/Ventoy2Disk.exe differ
index 8e05b586e7b887fbdb0a3d56126bdae569de7f31..29e30710d05c8434c62ff3a4f1c85c09efe49474 100644 (file)
@@ -26,20 +26,29 @@ echo ''
 
 vtdebug "############# Ventoy2Disk $0 ################"
 
-if [ "$1" = "-i" ]; then
-    MODE="install"
-elif [ "$1" = "-I" ]; then
-    MODE="install"
-    FORCE="Y"
-elif [ "$1" = "-u" ]; then
-    MODE="update"
-else
-    print_usage
-    cd $OLDDIR
-    exit 1
-fi
+while [ -n "$1" ]; do
+    if [ "$1" = "-i" ]; then
+        MODE="install"
+    elif [ "$1" = "-I" ]; then
+        MODE="install"
+        FORCE="Y"
+    elif [ "$1" = "-u" ]; then
+        MODE="update"
+    elif [ "$1" = "-s" ]; then
+        SECUREBOOT="YES"
+    else
+        if ! [ -b "$1" ]; then
+            print_usage
+            cd $OLDDIR
+            exit 1
+        fi
+        DISK=$1
+    fi
+    
+    shift
+done
 
-if ! [ -b "$2" ]; then
+if [ -z "$MODE" ]; then
     print_usage
     cd $OLDDIR
     exit 1
@@ -85,8 +94,6 @@ if ! check_tool_work_ok; then
 fi
 
 
-DISK=$2
-
 if ! [ -b "$DISK" ]; then
     vterr "Disk $DISK does not exist"
     cd $OLDDIR
@@ -101,7 +108,7 @@ if [ -e /sys/class/block/${DISK#/dev/}/start ]; then
 fi
 
 grep "^$DISK" /proc/mounts | while read mtline; do
-    mtpnt=$(echo $mtline | awk '{print $2}')
+    mtpnt=$(echo $mtline | awk '{print $DISK}')
     vtdebug "Trying to umount $mtpnt ..."
     umount $mtpnt >/dev/null 2>&1
 done
@@ -204,6 +211,7 @@ if [ "$MODE" = "install" ]; then
 
     chmod +x ./tool/vtoy_gen_uuid
 
+    vtinfo "writing data to disk ..."
     dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=446
     ./tool/xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2047 seek=1
     ./tool/xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start_sector
@@ -214,7 +222,31 @@ if [ "$MODE" = "install" ]; then
     #disk signature
     ./tool/vtoy_gen_uuid | dd status=none conv=fsync of=${DISK} skip=12 seek=440 bs=1 count=4
 
+    vtinfo "sync data ..."
     sync
+    
+    vtinfo "esp partition processing ..."
+    
+    if [ "$SECUREBOOT" != "YES" ]; then
+        mkdir ./tmp_mnt
+        
+        vtdebug "mounting part2 ...."
+        for tt in 1 2 3; do
+            if mount ${DISK}2 ./tmp_mnt; then
+                vtdebug "mounting part2 success"
+                break
+            fi
+            sleep 2
+        done
+              
+        rm -f ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
+        rm -f ./tmp_mnt/EFI/BOOT/grubx64.efi
+        rm -f ./tmp_mnt/EFI/BOOT/MokManager.efi
+        mv ./tmp_mnt/EFI/BOOT/grubx64_real.efi  ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
+        
+        umount ./tmp_mnt
+        rm -rf ./tmp_mnt
+    fi
 
     echo ""
     vtinfo "Install Ventoy to $DISK successfully finished."
@@ -257,6 +289,27 @@ else
     ./tool/xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start
 
     sync
+    
+    if [ "$SECUREBOOT" != "YES" ]; then
+        mkdir ./tmp_mnt
+        
+        vtdebug "mounting part2 ...."
+        for tt in 1 2 3; do
+            if mount ${DISK}2 ./tmp_mnt; then
+                vtdebug "mounting part2 success"
+                break
+            fi
+            sleep 2
+        done
+              
+        rm -f ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
+        rm -f ./tmp_mnt/EFI/BOOT/grubx64.efi
+        rm -f ./tmp_mnt/EFI/BOOT/MokManager.efi
+        mv ./tmp_mnt/EFI/BOOT/grubx64_real.efi  ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
+        
+        umount ./tmp_mnt
+        rm -rf ./tmp_mnt
+    fi
 
     echo ""
     vtinfo "Update Ventoy to $DISK successfully finished."
index 023158d5536db401ebb3af7107434d640452168b..6f95c224da3671a714ae7506bb7263f2a62681e6 100644 (file)
@@ -52,8 +52,8 @@ const TCHAR * g_Str_ChineseSimple[STR_ID_MAX] =
     TEXT("ÌáÐÑ"),
     TEXT("ÇëÔÚÕýÈ·µÄĿ¼ÏÂÔËÐÐ!"),
     TEXT("É豸"),
-    TEXT("±¾µØ Ventoy"),
-    TEXT("É豸ÉÏ Ventoy"),
+    TEXT("°²×°°üÄÚ Ventoy °æ±¾"),
+    TEXT("É豸ÄÚ²¿ Ventoy °æ±¾"),
     TEXT("״̬ - ×¼±¸¾ÍÐ÷"),
     TEXT("°²×°"),
     TEXT("Éý¼¶"),
@@ -70,5 +70,5 @@ const TCHAR * g_Str_ChineseSimple[STR_ID_MAX] =
 
 const TCHAR * GetString(enum STR_ID ID)
 {
-    return g_Str_English[ID];
+       return g_cur_lang_data->MsgString[ID];
 };
index 478188fda7db374050f8233fb51ee1dfb130ccd2..01eddd666bb7d422cef05543d687eb55625e3e85 100644 (file)
 #ifndef __LANGUAGE_H__
 #define __LANGUAGE_H__
 
+
 typedef enum STR_ID
 {
-    STR_ERROR = 0,
-    STR_WARNING,
-    STR_INFO,
-    STR_INCORRECT_DIR,
+       STR_ERROR = 0,
+       STR_WARNING, // 1
+       STR_INFO, // 2
+       STR_INCORRECT_DIR, //3
+       STR_INCORRECT_TREE_DIR, //4
 
-    STR_DEVICE,
-    STR_LOCAL_VER,
-    STR_DISK_VER,
-    STR_STATUS,
-    STR_INSTALL,
-    STR_UPDATE,
+       STR_DEVICE, //5
+       STR_LOCAL_VER, //6
+       STR_DISK_VER, //7
+       STR_STATUS, //8
+       STR_INSTALL, //9
+       STR_UPDATE, //10
 
-    STR_UPDATE_TIP,
-    STR_INSTALL_TIP,
-    STR_INSTALL_TIP2,
+       STR_UPDATE_TIP, //11
+       STR_INSTALL_TIP, //12
+       STR_INSTALL_TIP2,//13
 
-    STR_INSTALL_SUCCESS,
-    STR_INSTALL_FAILED,
-    STR_UPDATE_SUCCESS,
-    STR_UPDATE_FAILED,
+       STR_INSTALL_SUCCESS,//14
+       STR_INSTALL_FAILED,//15
+       STR_UPDATE_SUCCESS,//16
+       STR_UPDATE_FAILED,//17
 
-    STR_WAIT_PROCESS,
+       STR_WAIT_PROCESS,//18
 
+       STR_MENU_OPTION,//19
+       STR_MENU_SECURE_BOOT,//20
 
-    STR_ID_MAX
+       STR_ID_MAX
 }STR_ID;
 
+extern BOOL g_SecureBoot;
+
+#define VTOY_MENU_SECURE_BOOT    0xA000
+#define VTOY_MENU_LANGUAGE_BEGIN  0xB000
+
+
+#define VENTOY_LANGUAGE_INI  TEXT(".\\ventoy\\languages.ini")
+#define VENTOY_CFG_INI  TEXT(".\\Ventoy2Disk.ini")
+#define VENTOY_MAX_LANGUAGE     200
+
+#define GET_INI_STRING(Key, Buf) GetPrivateProfileString(Language, Key, TEXT("#"), Buf, sizeof(Buf), VENTOY_LANGUAGE_INI)
+
+typedef struct VENTOY_LANGUAGE
+{
+       WCHAR Name[64];
+       WCHAR FontFamily[64];
+       int FontSize;
+
+       WCHAR StrId[STR_ID_MAX][64];
+       WCHAR MsgString[STR_ID_MAX][1024];
+
+}VENTOY_LANGUAGE;
+
+extern VENTOY_LANGUAGE *g_cur_lang_data;
+
 const TCHAR * GetString(enum STR_ID ID);
 
 #define _G(a) GetString(a)
index 6b579ed3d06b5de5bef41cea8bfdb8f64c766c6d..b35a2d503296fc7341c8c046463d24f8aa094e7b 100644 (file)
@@ -824,10 +824,128 @@ int GetVentoyVerInPhyDrive(const PHY_DRIVE_INFO *pDriveInfo, CHAR *VerBuf, size_
 
 
 
+
 static unsigned int g_disk_unxz_len = 0;
 static BYTE *g_part_img_pos = NULL;
 static BYTE *g_part_img_buf[VENTOY_EFI_PART_SIZE / SIZE_1MB];
 
+
+static int VentoyFatMemRead(uint32 Sector, uint8 *Buffer, uint32 SectorCount)
+{
+       uint32 i;
+       uint32 offset;
+       BYTE *MbBuf = NULL;
+
+       for (i = 0; i < SectorCount; i++)
+       {
+               offset = (Sector + i) * 512;
+
+               if (g_part_img_buf[1] == NULL)
+               {
+                       MbBuf = g_part_img_buf[0] + offset;
+                       memcpy(Buffer + i * 512, MbBuf, 512);
+               }
+               else
+               {
+                       MbBuf = g_part_img_buf[offset / SIZE_1MB];
+                       memcpy(Buffer + i * 512, MbBuf + (offset % SIZE_1MB), 512);
+               }
+       }
+
+       return 1;
+}
+
+
+static int VentoyFatMemWrite(uint32 Sector, uint8 *Buffer, uint32 SectorCount)
+{
+       uint32 i;
+       uint32 offset;
+       BYTE *MbBuf = NULL;
+
+       for (i = 0; i < SectorCount; i++)
+       {
+               offset = (Sector + i) * 512;
+
+               if (g_part_img_buf[1] == NULL)
+               {
+                       MbBuf = g_part_img_buf[0] + offset;
+                       memcpy(MbBuf, Buffer + i * 512, 512);
+               }
+               else
+               {
+                       MbBuf = g_part_img_buf[offset / SIZE_1MB];
+                       memcpy(MbBuf + (offset % SIZE_1MB), Buffer + i * 512, 512);
+               }
+       }
+
+       return 1;
+}
+
+int VentoyProcSecureBoot(BOOL SecureBoot)
+{
+       int rc = 0;
+       int size;
+       char *filebuf = NULL;
+       void *file = NULL;
+
+       Log("VentoyProcSecureBoot %d ...", SecureBoot);
+       
+       if (SecureBoot)
+       {
+               Log("Secure boot is enabled ...");
+               return 0;
+       }
+
+       fl_init();
+
+       if (0 == fl_attach_media(VentoyFatMemRead, VentoyFatMemWrite))
+       {
+               file = fl_fopen("/EFI/BOOT/grubx64_real.efi", "rb");
+               Log("Open ventoy efi file %p ", file);
+               if (file)
+               {
+                       fl_fseek(file, 0, SEEK_END);
+                       size = (int)fl_ftell(file);
+                       fl_fseek(file, 0, SEEK_SET);
+
+                       Log("ventoy efi file size %d ...", size);
+
+                       filebuf = (char *)malloc(size);
+                       if (filebuf)
+                       {
+                               fl_fread(filebuf, 1, size, file);
+                       }
+
+                       fl_fclose(file);
+
+                       Log("Now delete all efi files ...");
+                       fl_remove("/EFI/BOOT/BOOTX64.EFI");
+                       fl_remove("/EFI/BOOT/grubx64.efi");
+                       fl_remove("/EFI/BOOT/grubx64_real.efi");
+                       fl_remove("/EFI/BOOT/MokManager.efi");
+
+                       file = fl_fopen("/EFI/BOOT/BOOTX64.EFI", "wb");
+                       Log("Open bootx64 efi file %p ", file);
+                       if (file)
+                       {
+                               fl_fwrite(filebuf, 1, size, file);
+                               fl_fflush(file);
+                               fl_fclose(file);
+                       }
+               }
+       }
+       else
+       {
+               rc = 1;
+       }
+
+       fl_shutdown();
+
+       return rc;
+}
+
+
+
 static int disk_xz_flush(void *src, unsigned int size)
 {
     unsigned int i;
@@ -919,6 +1037,9 @@ static int FormatPart2Fat(HANDLE hDrive, UINT64 StartSectorId)
         if (len == writelen)
         {
             Log("decompress finished success");
+
+                       VentoyProcSecureBoot(g_SecureBoot);
+
             for (i = 0; i < VENTOY_EFI_PART_SIZE / SIZE_1MB; i++)
             {
                 dwSize = 0;
@@ -965,6 +1086,9 @@ static int FormatPart2Fat(HANDLE hDrive, UINT64 StartSectorId)
         if (g_disk_unxz_len == VENTOY_EFI_PART_SIZE)
         {
             Log("decompress finished success");
+                       
+                       VentoyProcSecureBoot(g_SecureBoot);
+
             for (int i = 0; i < VENTOY_EFI_PART_SIZE / SIZE_1MB; i++)
             {
                 dwSize = 0;
index 990dcfe3b10675c2af95777c4cd6f5e6e376f49e..698098564dedd7a575c099c874b2185cde52263c 100644 (file)
Binary files a/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.rc and b/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.rc differ
index d531b4563ce414b065bb2d45482ed6fd89458299..c2535603574c4dd1f3b6408cefb6a46f0fd8a635 100644 (file)
 
 HINSTANCE g_hInst;
 
+
+BOOL g_SecureBoot = FALSE;
 HWND g_DialogHwnd;
 HWND g_ComboxHwnd;
 HWND g_StaticLocalVerHwnd;
 HWND g_StaticDiskVerHwnd;
 HWND g_BtnInstallHwnd;
+HWND g_StaticDevHwnd;
+HWND g_StaticLocalHwnd;
+HWND g_StaticDiskHwnd;
 HWND g_BtnUpdateHwnd;
 HWND g_ProgressBarHwnd;
 HWND g_StaticStatusHwnd;
 CHAR g_CurVersion[64];
 HANDLE g_ThreadHandle = NULL;
 
+int g_language_count = 0;
+int g_cur_lang_id = 0;
+VENTOY_LANGUAGE *g_language_data = NULL;
+VENTOY_LANGUAGE *g_cur_lang_data = NULL;
+
+static int LoadCfgIni(void)
+{
+       int value;
+
+       value = GetPrivateProfileInt(TEXT("Ventoy"), TEXT("SecureBoot"), 0, VENTOY_CFG_INI);
+
+       if (value == 1)
+       {
+               g_SecureBoot = TRUE;
+       }
+       
+       return 0;
+}
+
+static int WriteCfgIni(void)
+{
+       WCHAR TmpBuf[128];
+
+       swprintf_s(TmpBuf, 128, TEXT("%d"), g_cur_lang_id);
+       WritePrivateProfileString(TEXT("Ventoy"), TEXT("Language"), TmpBuf, VENTOY_CFG_INI);
+
+       swprintf_s(TmpBuf, 128, TEXT("%d"), g_SecureBoot);
+       WritePrivateProfileString(TEXT("Ventoy"), TEXT("SecureBoot"), TmpBuf, VENTOY_CFG_INI);
+
+       return 0;
+}
+
+
 void GetExeVersionInfo(const char *FilePath)
 {
     UINT length;
@@ -124,15 +162,126 @@ static void OnComboxSelChange(HWND hCombox)
     UpdateWindow(g_DialogHwnd);
 }
 
+static void UpdateItemString(int defaultLangId)
+{
+       int i;
+       HMENU SubMenu;
+       HFONT hLangFont;
+       HMENU hMenu = GetMenu(g_DialogHwnd);
+
+       g_cur_lang_id = defaultLangId;
+       g_cur_lang_data = g_language_data + defaultLangId;
+
+
+
+       hLangFont = CreateFont(g_language_data[defaultLangId].FontSize, 0, 0, 0, 400, FALSE, FALSE, 0,
+               DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
+               CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
+               DEFAULT_PITCH, g_language_data[defaultLangId].FontFamily);
+
+       SendMessage(g_BtnInstallHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
+       SendMessage(g_BtnUpdateHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
+       SendMessage(g_StaticStatusHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
+       SendMessage(g_StaticLocalHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
+       SendMessage(g_StaticDiskHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
+       SendMessage(g_StaticDevHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
+       SendMessage(g_DialogHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
+
+       ModifyMenu(hMenu, 0, MF_BYPOSITION | MF_STRING, 0, _G(STR_MENU_OPTION));
+
+       SetWindowText(GetDlgItem(g_DialogHwnd, IDC_STATIC_DEV), _G(STR_DEVICE));
+       SetWindowText(GetDlgItem(g_DialogHwnd, IDC_STATIC_LOCAL), _G(STR_LOCAL_VER));
+       SetWindowText(GetDlgItem(g_DialogHwnd, IDC_STATIC_DISK), _G(STR_DISK_VER));
+       SetWindowText(g_StaticStatusHwnd, _G(STR_STATUS));
+
+       SetWindowText(g_BtnInstallHwnd, _G(STR_INSTALL));
+       SetWindowText(g_BtnUpdateHwnd, _G(STR_UPDATE));
+
+       SubMenu = GetSubMenu(hMenu, 0);
+       if (g_SecureBoot)
+       {
+               ModifyMenu(SubMenu, 0, MF_BYPOSITION | MF_STRING | MF_CHECKED, 0, _G(STR_MENU_SECURE_BOOT));
+       }
+       else
+       {
+               ModifyMenu(SubMenu, 0, MF_BYPOSITION | MF_STRING | MF_UNCHECKED, 0, _G(STR_MENU_SECURE_BOOT));
+       }
+
+       ShowWindow(g_DialogHwnd, SW_HIDE);
+       ShowWindow(g_DialogHwnd, SW_NORMAL);
+
+       //Update check
+       for (i = 0; i < g_language_count; i++)
+       {
+               CheckMenuItem(hMenu, VTOY_MENU_LANGUAGE_BEGIN | i, MF_BYCOMMAND | MF_STRING | MF_UNCHECKED);
+       }
+       CheckMenuItem(hMenu, VTOY_MENU_LANGUAGE_BEGIN | defaultLangId, MF_BYCOMMAND | MF_STRING | MF_CHECKED);
+}
+
 static void LanguageInit(void)
 {
-    SetWindowText(GetDlgItem(g_DialogHwnd, IDC_STATIC_DEV), _G(STR_DEVICE));
-    SetWindowText(GetDlgItem(g_DialogHwnd, IDC_STATIC_LOCAL), _G(STR_LOCAL_VER));
-    SetWindowText(GetDlgItem(g_DialogHwnd, IDC_STATIC_DISK), _G(STR_DISK_VER));
-    SetWindowText(g_StaticStatusHwnd, _G(STR_STATUS));
+       int i, j, k;
+       int id, DefaultId;
+       WCHAR Language[64];
+       WCHAR TmpBuf[256];
+       LANGID LangId = GetSystemDefaultUILanguage();
+       HMENU SubMenu;
+       HMENU hMenu = GetMenu(g_DialogHwnd);
+
+       SubMenu = GetSubMenu(hMenu, 1);
+       DeleteMenu(SubMenu, 0, MF_BYPOSITION);
+
+       g_language_data = (VENTOY_LANGUAGE *)malloc(sizeof(VENTOY_LANGUAGE)* VENTOY_MAX_LANGUAGE);
+       memset(g_language_data, 0, sizeof(VENTOY_LANGUAGE)* VENTOY_MAX_LANGUAGE);
+
+       swprintf_s(Language, 64, L"StringDefine");
+       for (i = 0; i < STR_ID_MAX; i++)
+       {
+               swprintf_s(TmpBuf, 256, L"%d", i);
+               GET_INI_STRING(TmpBuf, g_language_data[0].StrId[i]);
+       }
+
+       for (i = 0; i < VENTOY_MAX_LANGUAGE; i++)
+       {
+               swprintf_s(Language, 64, L"Language%d", i);
+               GET_INI_STRING(TEXT("name"), g_language_data[i].Name);
+
+               if (g_language_data[i].Name[0] == '#')
+               {
+                       break;
+               }
+
+               g_language_count++;
+               Log("Find Language%d ...", i);
+               
+               AppendMenu(SubMenu, MF_STRING | MF_BYCOMMAND, VTOY_MENU_LANGUAGE_BEGIN | i, g_language_data[i].Name);
+
+               GET_INI_STRING(TEXT("FontFamily"), g_language_data[i].FontFamily);
+               g_language_data[i].FontSize = GetPrivateProfileInt(Language, TEXT("FontSize"), 10, VENTOY_LANGUAGE_INI);
+
+               for (j = 0; j < STR_ID_MAX; j++)
+               {
+                       GET_INI_STRING(g_language_data[0].StrId[j], g_language_data[i].MsgString[j]);
+
+                       for (k = 0; g_language_data[i].MsgString[j][k] && g_language_data[i].MsgString[j][k + 1]; k++)
+                       {
+                               if (g_language_data[i].MsgString[j][k] == '#' && g_language_data[i].MsgString[j][k + 1] == '@')
+                               {
+                                       g_language_data[i].MsgString[j][k] = '\r';
+                                       g_language_data[i].MsgString[j][k + 1] = '\n';
+                               }
+                       }
+               }
+       }
+
+       DefaultId = (MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED) == LangId) ? 0 : 1;
+       id = GetPrivateProfileInt(TEXT("Ventoy"), TEXT("Language"), DefaultId, VENTOY_CFG_INI);
+       if (id >= i)
+       {
+               id = DefaultId;
+       }
 
-    SetWindowText(g_BtnInstallHwnd, _G(STR_INSTALL));
-    SetWindowText(g_BtnUpdateHwnd, _G(STR_UPDATE));
+       UpdateItemString(id);
 }
 
 static BOOL InitDialog(HWND hWnd, WPARAM wParam, LPARAM lParam)
@@ -149,6 +298,13 @@ static BOOL InitDialog(HWND hWnd, WPARAM wParam, LPARAM lParam)
     g_StaticLocalVerHwnd = GetDlgItem(hWnd, IDC_STATIC_LOCAL_VER);
     g_StaticDiskVerHwnd = GetDlgItem(hWnd, IDC_STATIC_DISK_VER);
     g_BtnInstallHwnd = GetDlgItem(hWnd, IDC_BUTTON4);
+
+
+       g_StaticDevHwnd = GetDlgItem(hWnd, IDC_STATIC_DEV);
+       g_StaticLocalHwnd = GetDlgItem(hWnd, IDC_STATIC_LOCAL);
+       g_StaticDiskHwnd = GetDlgItem(hWnd, IDC_STATIC_DISK);
+       
+
     g_BtnUpdateHwnd = GetDlgItem(hWnd, IDC_BUTTON3);
     g_ProgressBarHwnd = GetDlgItem(hWnd, IDC_PROGRESS1);
     g_StaticStatusHwnd = GetDlgItem(hWnd, IDC_STATIC_STATUS);
@@ -160,8 +316,12 @@ static BOOL InitDialog(HWND hWnd, WPARAM wParam, LPARAM lParam)
     SendMessage(g_ProgressBarHwnd, PBM_SETRANGE, (WPARAM)0, (LPARAM)(MAKELPARAM(0, PT_FINISH)));
     PROGRESS_BAR_SET_POS(PT_START);
 
+       SetMenu(hWnd, LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU1)));
+
+       LoadCfgIni();
     LanguageInit();
 
+
     // Fill device combox
     hCombox = GetDlgItem(hWnd, IDC_COMBO1);
     for (i = 0; i < g_PhyDriveCount; i++)
@@ -358,6 +518,31 @@ static void OnUpdateBtnClick(void)
     g_ThreadHandle = CreateThread(NULL, 0, UpdateVentoyThread, (LPVOID)pPhyDrive, 0, NULL);
 }
 
+static void MenuProc(HWND hWnd, WPARAM wParam, LPARAM lParam)
+{
+       WORD CtrlID;
+       HMENU hMenu = GetMenu(hWnd);
+
+       CtrlID = LOWORD(wParam);
+
+       if (CtrlID == 0)
+       {
+               g_SecureBoot = !g_SecureBoot;
+
+               if (g_SecureBoot)
+               {
+                       CheckMenuItem(hMenu, 0, MF_BYCOMMAND | MF_STRING | MF_CHECKED);
+               }
+               else
+               {
+                       CheckMenuItem(hMenu, 0, MF_BYCOMMAND | MF_STRING | MF_UNCHECKED);
+               }
+       }
+       else if (CtrlID >= VTOY_MENU_LANGUAGE_BEGIN && CtrlID < VTOY_MENU_LANGUAGE_BEGIN + g_language_count)
+       {
+               UpdateItemString(CtrlID - VTOY_MENU_LANGUAGE_BEGIN);
+       }
+}
 
 INT_PTR CALLBACK DialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
 {
@@ -385,6 +570,10 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lPara
                 OnUpdateBtnClick();
             }
 
+                       if (lParam == 0 && NotifyCode == 0)
+                       {
+                               MenuProc(hWnd, wParam, lParam);
+                       }
 
             break;
         }
@@ -417,6 +606,7 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lPara
             {
                 EndDialog(hWnd, 0);
             }
+                       WriteCfgIni();
             break;
         }
     }
@@ -430,7 +620,14 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
 
     if (!IsFileExist(VENTOY_FILE_VERSION))
     {
-        MessageBox(NULL, _G(STR_INCORRECT_DIR), _G(STR_ERROR), MB_OK | MB_ICONERROR);
+               if (IsDirExist("grub"))
+               {
+                       MessageBox(NULL, _G(STR_INCORRECT_DIR), _G(STR_ERROR), MB_OK | MB_ICONERROR);
+               }
+               else
+               {
+                       MessageBox(NULL, _G(STR_INCORRECT_DIR), _G(STR_ERROR), MB_OK | MB_ICONERROR);
+               }
         return ERROR_NOT_FOUND;
     }
 
@@ -444,6 +641,8 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
 
     Ventoy2DiskInit();
 
+       
+
     g_hInst = hInstance;
     DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
 
index 4e81d7f9c1c9e57d4772f1169af999fd988177ba..706d3c74139ec1c42e09552078eaf9917766c6ed 100644 (file)
Binary files a/Ventoy2Disk/Ventoy2Disk/resource.h and b/Ventoy2Disk/Ventoy2Disk/resource.h differ