mirror of
https://github.com/pbatard/rufus.git
synced 2025-05-21 10:25:12 -04:00
[core] use Linux Data GUID for ext GPT partitions
* Also add an IS_EXT() macro
This commit is contained in:
parent
c2cd5185a3
commit
d8af83dd14
6 changed files with 26 additions and 16 deletions
16
src/drive.c
16
src/drive.c
|
@ -2427,7 +2427,12 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = write_as_esp ? PARTITION_GENERIC_ESP : PARTITION_MICROSOFT_DATA;
|
if (write_as_esp)
|
||||||
|
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_GENERIC_ESP;
|
||||||
|
else if (IS_EXT(file_system))
|
||||||
|
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_LINUX_DATA;
|
||||||
|
else
|
||||||
|
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_MICROSOFT_DATA;
|
||||||
IGNORE_RETVAL(CoCreateGuid(&DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionId));
|
IGNORE_RETVAL(CoCreateGuid(&DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionId));
|
||||||
wcsncpy(DriveLayoutEx.PartitionEntry[pn].Gpt.Name, main_part_name, ARRAYSIZE(DriveLayoutEx.PartitionEntry[pn].Gpt.Name));
|
wcsncpy(DriveLayoutEx.PartitionEntry[pn].Gpt.Name, main_part_name, ARRAYSIZE(DriveLayoutEx.PartitionEntry[pn].Gpt.Name));
|
||||||
}
|
}
|
||||||
|
@ -2453,9 +2458,14 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
||||||
partition_offset[PI_ESP] = SelectedDrive.PartitionOffset[pn];
|
partition_offset[PI_ESP] = SelectedDrive.PartitionOffset[pn];
|
||||||
|
|
||||||
if (partition_style == PARTITION_STYLE_GPT) {
|
if (partition_style == PARTITION_STYLE_GPT) {
|
||||||
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = (extra_partitions & XP_ESP) ? PARTITION_GENERIC_ESP : PARTITION_MICROSOFT_DATA;
|
if (extra_partitions & XP_ESP)
|
||||||
|
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_GENERIC_ESP;
|
||||||
|
else if (extra_partitions & XP_CASPER)
|
||||||
|
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_LINUX_DATA;
|
||||||
|
else
|
||||||
|
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_MICROSOFT_DATA;
|
||||||
if (extra_partitions & XP_UEFI_NTFS) {
|
if (extra_partitions & XP_UEFI_NTFS) {
|
||||||
// Prevent a drive letter to be assigned to the UEFI:NTFS partition
|
// Prevent a drive letter from being assigned to the UEFI:NTFS partition
|
||||||
DriveLayoutEx.PartitionEntry[pn].Gpt.Attributes = GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER;
|
DriveLayoutEx.PartitionEntry[pn].Gpt.Attributes = GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER;
|
||||||
#if !defined(_DEBUG)
|
#if !defined(_DEBUG)
|
||||||
// Also make the partition read-only for release versions
|
// Also make the partition read-only for release versions
|
||||||
|
|
|
@ -671,7 +671,7 @@ static BOOL FormatPartition(DWORD DriveIndex, uint64_t PartitionOffset, DWORD Un
|
||||||
actual_fs_type = FSType;
|
actual_fs_type = FSType;
|
||||||
if ((FSType == FS_FAT32) && ((SelectedDrive.DiskSize > LARGE_FAT32_SIZE) || (force_large_fat32) || (Flags & FP_LARGE_FAT32)))
|
if ((FSType == FS_FAT32) && ((SelectedDrive.DiskSize > LARGE_FAT32_SIZE) || (force_large_fat32) || (Flags & FP_LARGE_FAT32)))
|
||||||
return FormatLargeFAT32(DriveIndex, PartitionOffset, UnitAllocationSize, FileSystemLabel[FSType], Label, Flags);
|
return FormatLargeFAT32(DriveIndex, PartitionOffset, UnitAllocationSize, FileSystemLabel[FSType], Label, Flags);
|
||||||
else if (FSType >= FS_EXT2)
|
else if (IS_EXT(FSType))
|
||||||
return FormatExtFs(DriveIndex, PartitionOffset, UnitAllocationSize, FileSystemLabel[FSType], Label, Flags);
|
return FormatExtFs(DriveIndex, PartitionOffset, UnitAllocationSize, FileSystemLabel[FSType], Label, Flags);
|
||||||
else if (use_vds)
|
else if (use_vds)
|
||||||
return FormatNativeVds(DriveIndex, PartitionOffset, UnitAllocationSize, FileSystemLabel[FSType], Label, Flags);
|
return FormatNativeVds(DriveIndex, PartitionOffset, UnitAllocationSize, FileSystemLabel[FSType], Label, Flags);
|
||||||
|
@ -1925,15 +1925,14 @@ DWORD WINAPI FormatThread(void* param)
|
||||||
extra_partitions = XP_COMPAT;
|
extra_partitions = XP_COMPAT;
|
||||||
// On pre 1703 platforms (and even on later ones), anything with ext2/ext3 doesn't sit
|
// On pre 1703 platforms (and even on later ones), anything with ext2/ext3 doesn't sit
|
||||||
// too well with Windows. Same with ESPs. Relaxing our locking rules seems to help...
|
// too well with Windows. Same with ESPs. Relaxing our locking rules seems to help...
|
||||||
if ((extra_partitions & (XP_ESP | XP_CASPER)) || (fs_type >= FS_EXT2))
|
if ((extra_partitions & (XP_ESP | XP_CASPER)) || IS_EXT(fs_type))
|
||||||
actual_lock_drive = FALSE;
|
actual_lock_drive = FALSE;
|
||||||
// Windows 11 is a lot more proactive in locking ESPs and MSRs than previous versions
|
// Windows 11 is a lot more proactive in locking ESPs and MSRs than previous versions
|
||||||
// were, meaning that we also can't lock the drive without incurring errors...
|
// were, meaning that we also can't lock the drive without incurring errors...
|
||||||
if ((nWindowsVersion >= WINDOWS_11) && extra_partitions)
|
if ((nWindowsVersion >= WINDOWS_11) && extra_partitions)
|
||||||
actual_lock_drive = FALSE;
|
actual_lock_drive = FALSE;
|
||||||
// Fixed drives + ext2/ext3 don't play nice and require the same handling as ESPs
|
// Fixed drives + ext2/ext3 don't play nice and require the same handling as ESPs
|
||||||
write_as_ext = (fs_type >= FS_EXT2 && fs_type <= FS_EXT4) &&
|
write_as_ext = IS_EXT(fs_type) && (GetDriveTypeFromIndex(DriveIndex) == DRIVE_FIXED);
|
||||||
(GetDriveTypeFromIndex(DriveIndex) == DRIVE_FIXED);
|
|
||||||
|
|
||||||
PrintInfoDebug(0, MSG_225);
|
PrintInfoDebug(0, MSG_225);
|
||||||
hPhysicalDrive = GetPhysicalHandle(DriveIndex, actual_lock_drive, FALSE, !actual_lock_drive);
|
hPhysicalDrive = GetPhysicalHandle(DriveIndex, actual_lock_drive, FALSE, !actual_lock_drive);
|
||||||
|
@ -2254,7 +2253,7 @@ DWORD WINAPI FormatThread(void* param)
|
||||||
if ((fs_type < FS_EXT2) && !GetVolumeInformationU(drive_name, img_report.usb_label,
|
if ((fs_type < FS_EXT2) && !GetVolumeInformationU(drive_name, img_report.usb_label,
|
||||||
ARRAYSIZE(img_report.usb_label), NULL, NULL, NULL, NULL, 0)) {
|
ARRAYSIZE(img_report.usb_label), NULL, NULL, NULL, NULL, 0)) {
|
||||||
uprintf("Warning: Failed to refresh label: %s", WindowsErrorString());
|
uprintf("Warning: Failed to refresh label: %s", WindowsErrorString());
|
||||||
} else if ((fs_type >= FS_EXT2) && (fs_type <= FS_EXT4)) {
|
} else if (IS_EXT(fs_type)) {
|
||||||
const char* ext_label = GetExtFsLabel(DriveIndex, 0);
|
const char* ext_label = GetExtFsLabel(DriveIndex, 0);
|
||||||
if (ext_label != NULL)
|
if (ext_label != NULL)
|
||||||
static_strcpy(img_report.usb_label, label);
|
static_strcpy(img_report.usb_label, label);
|
||||||
|
|
|
@ -782,7 +782,7 @@ static void EnableExtendedLabel(BOOL enable, BOOL remove_checkboxes)
|
||||||
static UINT checked, state = 0;
|
static UINT checked, state = 0;
|
||||||
HWND hCtrl = GetDlgItem(hMainDialog, IDC_EXTENDED_LABEL);
|
HWND hCtrl = GetDlgItem(hMainDialog, IDC_EXTENDED_LABEL);
|
||||||
|
|
||||||
if ((fs_type >= FS_EXT2) || ((boot_type == BT_IMAGE) && IS_DD_ONLY(img_report)))
|
if (IS_EXT(fs_type) || ((boot_type == BT_IMAGE) && IS_DD_ONLY(img_report)))
|
||||||
enable = FALSE;
|
enable = FALSE;
|
||||||
|
|
||||||
if (remove_checkboxes) {
|
if (remove_checkboxes) {
|
||||||
|
|
|
@ -339,7 +339,8 @@ enum checksum_type {
|
||||||
#define IS_BIOS_BOOTABLE(r) (HAS_BOOTMGR(r) || HAS_SYSLINUX(r) || HAS_WINPE(r) || HAS_GRUB(r) || HAS_REACTOS(r) || HAS_KOLIBRIOS(r))
|
#define IS_BIOS_BOOTABLE(r) (HAS_BOOTMGR(r) || HAS_SYSLINUX(r) || HAS_WINPE(r) || HAS_GRUB(r) || HAS_REACTOS(r) || HAS_KOLIBRIOS(r))
|
||||||
#define HAS_WINTOGO(r) (HAS_BOOTMGR(r) && IS_EFI_BOOTABLE(r) && HAS_WININST(r))
|
#define HAS_WINTOGO(r) (HAS_BOOTMGR(r) && IS_EFI_BOOTABLE(r) && HAS_WININST(r))
|
||||||
#define HAS_PERSISTENCE(r) ((HAS_SYSLINUX(r) || HAS_GRUB(r)) && !(HAS_WINDOWS(r) || HAS_REACTOS(r) || HAS_KOLIBRIOS(r)))
|
#define HAS_PERSISTENCE(r) ((HAS_SYSLINUX(r) || HAS_GRUB(r)) && !(HAS_WINDOWS(r) || HAS_REACTOS(r) || HAS_KOLIBRIOS(r)))
|
||||||
#define IS_FAT(fs) ((fs_type == FS_FAT16) || (fs_type == FS_FAT32))
|
#define IS_FAT(fs) ((fs == FS_FAT16) || (fs == FS_FAT32))
|
||||||
|
#define IS_EXT(fs) ((fs >= FS_EXT2) && (fs <= FS_EXT4))
|
||||||
#define SYMLINKS_RR 0x01
|
#define SYMLINKS_RR 0x01
|
||||||
#define SYMLINKS_UDF 0x02
|
#define SYMLINKS_UDF 0x02
|
||||||
|
|
||||||
|
|
10
src/rufus.rc
10
src/rufus.rc
|
@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_ACCEPTFILES
|
EXSTYLE WS_EX_ACCEPTFILES
|
||||||
CAPTION "Rufus 3.19.1895"
|
CAPTION "Rufus 3.19.1896"
|
||||||
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
||||||
|
@ -395,8 +395,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 3,19,1895,0
|
FILEVERSION 3,19,1896,0
|
||||||
PRODUCTVERSION 3,19,1895,0
|
PRODUCTVERSION 3,19,1896,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -414,13 +414,13 @@ BEGIN
|
||||||
VALUE "Comments", "https://rufus.ie"
|
VALUE "Comments", "https://rufus.ie"
|
||||||
VALUE "CompanyName", "Akeo Consulting"
|
VALUE "CompanyName", "Akeo Consulting"
|
||||||
VALUE "FileDescription", "Rufus"
|
VALUE "FileDescription", "Rufus"
|
||||||
VALUE "FileVersion", "3.19.1895"
|
VALUE "FileVersion", "3.19.1896"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "© 2011-2022 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "© 2011-2022 Pete Batard (GPL v3)"
|
||||||
VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html"
|
VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html"
|
||||||
VALUE "OriginalFilename", "rufus-3.19.exe"
|
VALUE "OriginalFilename", "rufus-3.19.exe"
|
||||||
VALUE "ProductName", "Rufus"
|
VALUE "ProductName", "Rufus"
|
||||||
VALUE "ProductVersion", "3.19.1895"
|
VALUE "ProductVersion", "3.19.1896"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
2
src/ui.c
2
src/ui.c
|
@ -1201,7 +1201,7 @@ void InitProgress(BOOL bOnlyFormat)
|
||||||
// So, yeah, if you're doing slow format, or using Large FAT32, and have persistence, you'll see
|
// So, yeah, if you're doing slow format, or using Large FAT32, and have persistence, you'll see
|
||||||
// the progress bar revert during format on account that we reuse the same operation for both
|
// the progress bar revert during format on account that we reuse the same operation for both
|
||||||
// partitions. Maybe one day I'll be bothered to handle two separate OP_FORMAT ops...
|
// partitions. Maybe one day I'll be bothered to handle two separate OP_FORMAT ops...
|
||||||
if ((!IsChecked(IDC_QUICK_FORMAT)) || (persistence_size != 0) || (fs_type >= FS_EXT2) ||
|
if ((!IsChecked(IDC_QUICK_FORMAT)) || (persistence_size != 0) || IS_EXT(fs_type) ||
|
||||||
((fs_type == FS_FAT32) && ((SelectedDrive.DiskSize >= LARGE_FAT32_SIZE) || (force_large_fat32)))) {
|
((fs_type == FS_FAT32) && ((SelectedDrive.DiskSize >= LARGE_FAT32_SIZE) || (force_large_fat32)))) {
|
||||||
nb_slots[OP_FORMAT] = -1;
|
nb_slots[OP_FORMAT] = -1;
|
||||||
nb_slots[OP_CREATE_FS] = 0;
|
nb_slots[OP_CREATE_FS] = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue