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."
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
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
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");
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");
\r
pGPT->PartTbl[1].StartLBA = pGPT->PartTbl[0].LastLBA + 1;\r
pGPT->PartTbl[1].LastLBA = pGPT->PartTbl[1].StartLBA + VENTOY_EFI_PART_SIZE / 512 - 1;\r
- pGPT->PartTbl[1].Attr = 0xC000000000000001ULL;\r
+ pGPT->PartTbl[1].Attr = VENTOY_EFI_PART_ATTR;\r
memcpy(pGPT->PartTbl[1].Name, L"VTOYEFI", 7 * 2);\r
\r
//Update CRC\r
BOOL CleanDisk = FALSE;\r
BOOL DelEFI = FALSE;\r
BOOL bWriteBack = TRUE;\r
+ BOOL bUpdateEFIAttr = FALSE;\r
HANDLE hVolume;\r
HANDLE hDrive;\r
DWORD Status;\r
if (pPhyDrive->PartStyle == 1)\r
{\r
Log("TryId=%d EFI GPT partition type is 0x%llx", TryId, pPhyDrive->Part2GPTAttr);\r
- PROGRESS_BAR_SET_POS(PT_DEL_ALL_PART);\r
+ PROGRESS_BAR_SET_POS(PT_DEL_ALL_PART); \r
+\r
+ if (pGptInfo->PartTbl[1].Attr != VENTOY_EFI_PART_ATTR)\r
+ {\r
+ bUpdateEFIAttr = TRUE; \r
+ } \r
+\r
\r
if (TryId == 1)\r
{\r
}\r
else if (TryId == 2)\r
{\r
- Log("Change GPT partition attribute");\r
- if (DISK_ChangeVtoyEFIAttr(pPhyDrive->PhyDrive, StartSector * 512ULL, 0x8000000000000001))\r
+ Log("Try2 Change GPT partition attribute to 0x%016llx", VENTOY_EFI_PART_ATTR & 0xFFFFFFFFFFFFFFFEULL);\r
+ if (DISK_ChangeVtoyEFIAttr(pPhyDrive->PhyDrive, StartSector * 512ULL, VENTOY_EFI_PART_ATTR & 0xFFFFFFFFFFFFFFFEULL))\r
{\r
ChangeAttr = TRUE;\r
Sleep(2000);\r
DISK_ChangeVtoyEFI2Basic(pPhyDrive->PhyDrive, StartSector * 512);\r
}\r
\r
+\r
if (pPhyDrive->PartStyle == 1)\r
{\r
- if (ChangeAttr || ((pPhyDrive->Part2GPTAttr >> 56) != 0xC0))\r
+ if (ChangeAttr || bUpdateEFIAttr)\r
{\r
- Log("Change EFI partition attr %u <0x%llx> to <0x%llx>", ChangeAttr, pPhyDrive->Part2GPTAttr, 0xC000000000000001ULL);\r
- if (DISK_ChangeVtoyEFIAttr(pPhyDrive->PhyDrive, StartSector * 512ULL, 0xC000000000000001ULL))\r
+ Log("Change EFI partition attr %u <0x%llx> to <0x%llx>", ChangeAttr, pGptInfo->PartTbl[1].Attr, VENTOY_EFI_PART_ATTR);\r
+ if (DISK_ChangeVtoyEFIAttr(pPhyDrive->PhyDrive, StartSector * 512ULL, VENTOY_EFI_PART_ATTR))\r
{\r
Log("Change EFI partition attr success");\r
- pPhyDrive->Part2GPTAttr = 0xC000000000000001ULL;\r
+ pPhyDrive->Part2GPTAttr = VENTOY_EFI_PART_ATTR;\r
}\r
else\r
{\r
CoCreateGuid(&(Table[1].PartGuid));\r
Table[1].StartLBA = Table[0].LastLBA + 1;\r
Table[1].LastLBA = Table[1].StartLBA + VENTOY_EFI_PART_SIZE / 512 - 1;\r
- Table[1].Attr = 0xC000000000000001ULL;\r
+ Table[1].Attr = VENTOY_EFI_PART_ATTR;\r
memcpy(Table[1].Name, L"VTOYEFI", 7 * 2);\r
\r
#if 0\r
\r
#define FAT32_MAX_LIMIT (32 * 1073741824ULL)\r
\r
+#define VENTOY_EFI_PART_ATTR 0x8000000000000000ULL\r
+\r
+\r
#define SIZE_1KB (1024)\r
#define SIZE_1GB (1024 * 1024 * 1024)\r
#define SIZE_1TB (1024ULL * 1024ULL * 1024ULL * 1024ULL)\r
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';
#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)
return 0;
}
-#define VENTOY_EFI_PART_ATTR 0xC000000000000001ULL
+#define VENTOY_EFI_PART_ATTR 0x8000000000000000ULL
int main(int argc, const char **argv)
{