From: longpanda Date: Wed, 19 Feb 2025 15:49:03 +0000 (+0800) Subject: Fix Windows 11 error 0x80070001. (#3010 #3029 #3105) X-Git-Tag: v1.1.03~6 X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/commitdiff_plain/4e8d8b2e19d0222f5f859c8462f420877b68aa24?ds=sidebyside Fix Windows 11 error 0x80070001. (#3010 #3029 #3105) --- diff --git a/INSTALL/Ventoy2Disk.exe b/INSTALL/Ventoy2Disk.exe index aa91ecf..312b707 100644 Binary files a/INSTALL/Ventoy2Disk.exe and b/INSTALL/Ventoy2Disk.exe differ diff --git a/INSTALL/Ventoy2Disk_ARM.exe b/INSTALL/Ventoy2Disk_ARM.exe index 9acbd96..337f38a 100644 Binary files a/INSTALL/Ventoy2Disk_ARM.exe and b/INSTALL/Ventoy2Disk_ARM.exe differ diff --git a/INSTALL/Ventoy2Disk_ARM64.exe b/INSTALL/Ventoy2Disk_ARM64.exe index c53d0e0..4b8a28f 100644 Binary files a/INSTALL/Ventoy2Disk_ARM64.exe and b/INSTALL/Ventoy2Disk_ARM64.exe differ diff --git a/INSTALL/Ventoy2Disk_X64.exe b/INSTALL/Ventoy2Disk_X64.exe index 155e465..a4e6546 100644 Binary files a/INSTALL/Ventoy2Disk_X64.exe and b/INSTALL/Ventoy2Disk_X64.exe differ diff --git a/INSTALL/tool/VentoyWorker.sh b/INSTALL/tool/VentoyWorker.sh index e0800d9..fa2af33 100644 --- a/INSTALL/tool/VentoyWorker.sh +++ b/INSTALL/tool/VentoyWorker.sh @@ -625,6 +625,10 @@ else check_umount_disk "$DISK" vtoycli partresize -s $DISK $part2_start fi + + vtinfo "update esp partition attribute" + vtoycli gpt -f $DISK + sync echo "" vtinfo "Update Ventoy on $DISK successfully finished." diff --git a/INSTALL/tool/aarch64/V2DServer b/INSTALL/tool/aarch64/V2DServer index 53859bc..64fbbbc 100644 Binary files a/INSTALL/tool/aarch64/V2DServer and b/INSTALL/tool/aarch64/V2DServer differ diff --git a/INSTALL/tool/aarch64/Ventoy2Disk.gtk3 b/INSTALL/tool/aarch64/Ventoy2Disk.gtk3 index ce1ae01..65f84ec 100644 Binary files a/INSTALL/tool/aarch64/Ventoy2Disk.gtk3 and b/INSTALL/tool/aarch64/Ventoy2Disk.gtk3 differ diff --git a/INSTALL/tool/aarch64/Ventoy2Disk.qt5 b/INSTALL/tool/aarch64/Ventoy2Disk.qt5 index 18ad203..cc7630a 100644 Binary files a/INSTALL/tool/aarch64/Ventoy2Disk.qt5 and b/INSTALL/tool/aarch64/Ventoy2Disk.qt5 differ diff --git a/INSTALL/tool/aarch64/vtoycli b/INSTALL/tool/aarch64/vtoycli index c6fe074..0ce9c93 100644 Binary files a/INSTALL/tool/aarch64/vtoycli and b/INSTALL/tool/aarch64/vtoycli differ diff --git a/INSTALL/tool/i386/V2DServer b/INSTALL/tool/i386/V2DServer index 5cc85c0..1f809e7 100644 Binary files a/INSTALL/tool/i386/V2DServer and b/INSTALL/tool/i386/V2DServer differ diff --git a/INSTALL/tool/i386/Ventoy2Disk.gtk2 b/INSTALL/tool/i386/Ventoy2Disk.gtk2 index dd18b8f..697631b 100644 Binary files a/INSTALL/tool/i386/Ventoy2Disk.gtk2 and b/INSTALL/tool/i386/Ventoy2Disk.gtk2 differ diff --git a/INSTALL/tool/i386/Ventoy2Disk.gtk3 b/INSTALL/tool/i386/Ventoy2Disk.gtk3 index 4d0d763..7dc3ad7 100644 Binary files a/INSTALL/tool/i386/Ventoy2Disk.gtk3 and b/INSTALL/tool/i386/Ventoy2Disk.gtk3 differ diff --git a/INSTALL/tool/i386/Ventoy2Disk.qt5 b/INSTALL/tool/i386/Ventoy2Disk.qt5 index 337b284..3ba8307 100644 Binary files a/INSTALL/tool/i386/Ventoy2Disk.qt5 and b/INSTALL/tool/i386/Ventoy2Disk.qt5 differ diff --git a/INSTALL/tool/i386/vtoycli b/INSTALL/tool/i386/vtoycli index f30deb5..cbe2d98 100644 Binary files a/INSTALL/tool/i386/vtoycli and b/INSTALL/tool/i386/vtoycli differ diff --git a/INSTALL/tool/mips64el/V2DServer b/INSTALL/tool/mips64el/V2DServer index fe1b1ea..b4d9fe6 100644 Binary files a/INSTALL/tool/mips64el/V2DServer and b/INSTALL/tool/mips64el/V2DServer differ diff --git a/INSTALL/tool/mips64el/Ventoy2Disk.gtk3 b/INSTALL/tool/mips64el/Ventoy2Disk.gtk3 index 98d6bf2..e53bb8b 100644 Binary files a/INSTALL/tool/mips64el/Ventoy2Disk.gtk3 and b/INSTALL/tool/mips64el/Ventoy2Disk.gtk3 differ diff --git a/INSTALL/tool/mips64el/Ventoy2Disk.qt5 b/INSTALL/tool/mips64el/Ventoy2Disk.qt5 index 7387ae5..e919b93 100644 Binary files a/INSTALL/tool/mips64el/Ventoy2Disk.qt5 and b/INSTALL/tool/mips64el/Ventoy2Disk.qt5 differ diff --git a/INSTALL/tool/mips64el/vtoycli b/INSTALL/tool/mips64el/vtoycli index a4c97ea..4a0e20b 100644 Binary files a/INSTALL/tool/mips64el/vtoycli and b/INSTALL/tool/mips64el/vtoycli differ diff --git a/INSTALL/tool/ventoy_lib.sh b/INSTALL/tool/ventoy_lib.sh index 0195e8a..854881d 100644 --- a/INSTALL/tool/ventoy_lib.sh +++ b/INSTALL/tool/ventoy_lib.sh @@ -449,7 +449,6 @@ format_ventoy_disk_gpt() { mkpart Ventoy ntfs $part1_start_sector $part1_end_sector \ mkpart VTOYEFI fat16 $part2_start_sector $part2_end_sector \ $vt_set_efi_type \ - set 2 hidden on \ quit sync diff --git a/INSTALL/tool/x86_64/V2DServer b/INSTALL/tool/x86_64/V2DServer index 8703fbf..bb1235f 100644 Binary files a/INSTALL/tool/x86_64/V2DServer and b/INSTALL/tool/x86_64/V2DServer differ diff --git a/INSTALL/tool/x86_64/Ventoy2Disk.gtk2 b/INSTALL/tool/x86_64/Ventoy2Disk.gtk2 index c74a2ac..4eea103 100644 Binary files a/INSTALL/tool/x86_64/Ventoy2Disk.gtk2 and b/INSTALL/tool/x86_64/Ventoy2Disk.gtk2 differ diff --git a/INSTALL/tool/x86_64/Ventoy2Disk.gtk3 b/INSTALL/tool/x86_64/Ventoy2Disk.gtk3 index 089d35c..8e69192 100644 Binary files a/INSTALL/tool/x86_64/Ventoy2Disk.gtk3 and b/INSTALL/tool/x86_64/Ventoy2Disk.gtk3 differ diff --git a/INSTALL/tool/x86_64/Ventoy2Disk.qt5 b/INSTALL/tool/x86_64/Ventoy2Disk.qt5 index a7616ef..e87fe82 100644 Binary files a/INSTALL/tool/x86_64/Ventoy2Disk.qt5 and b/INSTALL/tool/x86_64/Ventoy2Disk.qt5 differ diff --git a/INSTALL/tool/x86_64/vtoycli b/INSTALL/tool/x86_64/vtoycli index a5d792d..ab36a28 100644 Binary files a/INSTALL/tool/x86_64/vtoycli and b/INSTALL/tool/x86_64/vtoycli differ diff --git a/LinuxGUI/Ventoy2Disk/Core/ventoy_util.c b/LinuxGUI/Ventoy2Disk/Core/ventoy_util.c index 03d9319..cbee36a 100644 --- a/LinuxGUI/Ventoy2Disk/Core/ventoy_util.c +++ b/LinuxGUI/Ventoy2Disk/Core/ventoy_util.c @@ -442,7 +442,7 @@ int ventoy_fill_gpt(uint64_t size, uint64_t reserve, int align4k, VTOY_GPT_INFO ventoy_gen_preudo_uuid(&(Table[1].PartGuid)); Table[1].StartLBA = Table[0].LastLBA + 1; Table[1].LastLBA = Table[1].StartLBA + VTOYEFI_PART_BYTES / 512 - 1; - Table[1].Attr = 0xC000000000000001ULL; + Table[1].Attr = 0x8000000000000000ULL; ventoy_fill_gpt_partname(Table[1].Name, "VTOYEFI"); #if 0 diff --git a/LinuxGUI/Ventoy2Disk/Web/ventoy_http.c b/LinuxGUI/Ventoy2Disk/Web/ventoy_http.c index d221dd3..ec0c3ca 100644 --- a/LinuxGUI/Ventoy2Disk/Web/ventoy_http.c +++ b/LinuxGUI/Ventoy2Disk/Web/ventoy_http.c @@ -727,6 +727,7 @@ static void * ventoy_update_thread(void *data) MBR_HEAD MBR; ventoy_disk *disk = NULL; ventoy_thread_data *thread = (ventoy_thread_data *)data; + VTOY_GPT_INFO *pstGPT = NULL; vdebug("ventoy_update_thread run ...\n"); @@ -790,6 +791,34 @@ static void * ventoy_update_thread(void *data) vlog("No need to update MBR\n"); } + + if (disk->vtoydata.partition_style) + { + pstGPT = (VTOY_GPT_INFO *)malloc(sizeof(VTOY_GPT_INFO)); + memset(pstGPT, 0, sizeof(VTOY_GPT_INFO)); + + offset = lseek(fd, 0, SEEK_SET); + len = read(fd, pstGPT, sizeof(VTOY_GPT_INFO)); + vlog("Read GPT table offset:%llu len:%llu ...\n", (_ull)offset, (_ull)len); + + if (pstGPT->PartTbl[1].Attr != 0x8000000000000000ULL) + { + vlog("Update EFI part attr from 0x%016llx to 0x%016llx\n", + pstGPT->PartTbl[1].Attr, 0x8000000000000000ULL); + + pstGPT->PartTbl[1].Attr = 0x8000000000000000ULL; + pstGPT->Head.Crc = 0; + pstGPT->Head.Crc = ventoy_crc32(&(pstGPT->Head), pstGPT->Head.Length); + ventoy_write_gpt_part_table(fd, disk->size_in_byte, pstGPT); + } + else + { + vlog("No need to update EFI part attr\n"); + } + free(pstGPT); + } + + g_current_progress = PT_SYNC_DATA1; vlog("fsync data1...\n"); diff --git a/Ventoy2Disk/Ventoy2Disk/PhyDrive.c b/Ventoy2Disk/Ventoy2Disk/PhyDrive.c index d64916e..c9ac5b1 100644 --- a/Ventoy2Disk/Ventoy2Disk/PhyDrive.c +++ b/Ventoy2Disk/Ventoy2Disk/PhyDrive.c @@ -2520,7 +2520,7 @@ int PartitionResizeForVentoy(PHY_DRIVE_INFO *pPhyDrive) pGPT->PartTbl[1].StartLBA = pGPT->PartTbl[0].LastLBA + 1; pGPT->PartTbl[1].LastLBA = pGPT->PartTbl[1].StartLBA + VENTOY_EFI_PART_SIZE / 512 - 1; - pGPT->PartTbl[1].Attr = 0xC000000000000001ULL; + pGPT->PartTbl[1].Attr = VENTOY_EFI_PART_ATTR; memcpy(pGPT->PartTbl[1].Name, L"VTOYEFI", 7 * 2); //Update CRC @@ -2797,6 +2797,7 @@ int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId) BOOL CleanDisk = FALSE; BOOL DelEFI = FALSE; BOOL bWriteBack = TRUE; + BOOL bUpdateEFIAttr = FALSE; HANDLE hVolume; HANDLE hDrive; DWORD Status; @@ -2904,7 +2905,13 @@ int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId) if (pPhyDrive->PartStyle == 1) { Log("TryId=%d EFI GPT partition type is 0x%llx", TryId, pPhyDrive->Part2GPTAttr); - PROGRESS_BAR_SET_POS(PT_DEL_ALL_PART); + PROGRESS_BAR_SET_POS(PT_DEL_ALL_PART); + + if (pGptInfo->PartTbl[1].Attr != VENTOY_EFI_PART_ATTR) + { + bUpdateEFIAttr = TRUE; + } + if (TryId == 1) { @@ -2917,8 +2924,8 @@ int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId) } else if (TryId == 2) { - Log("Change GPT partition attribute"); - if (DISK_ChangeVtoyEFIAttr(pPhyDrive->PhyDrive, StartSector * 512ULL, 0x8000000000000001)) + Log("Try2 Change GPT partition attribute to 0x%016llx", VENTOY_EFI_PART_ATTR & 0xFFFFFFFFFFFFFFFEULL); + if (DISK_ChangeVtoyEFIAttr(pPhyDrive->PhyDrive, StartSector * 512ULL, VENTOY_EFI_PART_ATTR & 0xFFFFFFFFFFFFFFFEULL)) { ChangeAttr = TRUE; Sleep(2000); @@ -3253,15 +3260,16 @@ End: DISK_ChangeVtoyEFI2Basic(pPhyDrive->PhyDrive, StartSector * 512); } + if (pPhyDrive->PartStyle == 1) { - if (ChangeAttr || ((pPhyDrive->Part2GPTAttr >> 56) != 0xC0)) + if (ChangeAttr || bUpdateEFIAttr) { - Log("Change EFI partition attr %u <0x%llx> to <0x%llx>", ChangeAttr, pPhyDrive->Part2GPTAttr, 0xC000000000000001ULL); - if (DISK_ChangeVtoyEFIAttr(pPhyDrive->PhyDrive, StartSector * 512ULL, 0xC000000000000001ULL)) + Log("Change EFI partition attr %u <0x%llx> to <0x%llx>", ChangeAttr, pGptInfo->PartTbl[1].Attr, VENTOY_EFI_PART_ATTR); + if (DISK_ChangeVtoyEFIAttr(pPhyDrive->PhyDrive, StartSector * 512ULL, VENTOY_EFI_PART_ATTR)) { Log("Change EFI partition attr success"); - pPhyDrive->Part2GPTAttr = 0xC000000000000001ULL; + pPhyDrive->Part2GPTAttr = VENTOY_EFI_PART_ATTR; } else { diff --git a/Ventoy2Disk/Ventoy2Disk/Utility.c b/Ventoy2Disk/Ventoy2Disk/Utility.c index daa6ecf..8e4c530 100644 --- a/Ventoy2Disk/Ventoy2Disk/Utility.c +++ b/Ventoy2Disk/Ventoy2Disk/Utility.c @@ -982,7 +982,7 @@ int VentoyFillGpt(UINT64 DiskSizeBytes, VTOY_GPT_INFO *pInfo) CoCreateGuid(&(Table[1].PartGuid)); Table[1].StartLBA = Table[0].LastLBA + 1; Table[1].LastLBA = Table[1].StartLBA + VENTOY_EFI_PART_SIZE / 512 - 1; - Table[1].Attr = 0xC000000000000001ULL; + Table[1].Attr = VENTOY_EFI_PART_ATTR; memcpy(Table[1].Name, L"VTOYEFI", 7 * 2); #if 0 diff --git a/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.h b/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.h index 6106520..e7d5bfc 100644 --- a/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.h +++ b/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.h @@ -34,6 +34,9 @@ typedef enum VTOY_FS #define FAT32_MAX_LIMIT (32 * 1073741824ULL) +#define VENTOY_EFI_PART_ATTR 0x8000000000000000ULL + + #define SIZE_1KB (1024) #define SIZE_1GB (1024 * 1024 * 1024) #define SIZE_1TB (1024ULL * 1024ULL * 1024ULL * 1024ULL) diff --git a/vtoycli/partresize.c b/vtoycli/partresize.c index 6613be7..d47618c 100644 --- a/vtoycli/partresize.c +++ b/vtoycli/partresize.c @@ -599,7 +599,7 @@ static int update_part_table(char *disk, UINT64 part2start) PartTbl[1].StartLBA = PartTbl[0].LastLBA + 1; PartTbl[1].LastLBA = PartTbl[1].StartLBA + VENTOY_EFI_PART_SIZE / 512 - 1; - PartTbl[1].Attr = 0xC000000000000001ULL; + PartTbl[1].Attr = VENTOY_EFI_PART_ATTR; PartTbl[1].Name[0] = 'V'; PartTbl[1].Name[1] = 'T'; PartTbl[1].Name[2] = 'O'; diff --git a/vtoycli/vtoycli.h b/vtoycli/vtoycli.h index 1a6667f..006e1f3 100644 --- a/vtoycli/vtoycli.h +++ b/vtoycli/vtoycli.h @@ -21,7 +21,7 @@ #ifndef __VTOYCLI_H__ #define __VTOYCLI_H__ -#define VENTOY_EFI_PART_ATTR 0xC000000000000001ULL +#define VENTOY_EFI_PART_ATTR 0x8000000000000000ULL #define SIZE_1MB (1024 * 1024) #define VENTOY_EFI_PART_SIZE (32 * SIZE_1MB) diff --git a/vtoygpt/vtoygpt.c b/vtoygpt/vtoygpt.c index 705f750..cfd99fd 100644 --- a/vtoygpt/vtoygpt.c +++ b/vtoygpt/vtoygpt.c @@ -244,7 +244,7 @@ int DumpGptInfo(VTOY_GPT_INFO *pGptInfo) return 0; } -#define VENTOY_EFI_PART_ATTR 0xC000000000000001ULL +#define VENTOY_EFI_PART_ATTR 0x8000000000000000ULL int main(int argc, const char **argv) {