mirror of
https://github.com/pbatard/rufus.git
synced 2024-08-14 23:57:05 +00:00
[core] enable the installation of a bare UEFI:NTFS in advanced mode
* Closes #468 * Also prevent drives with UEFI:NTFS from being listed as multi-partitions * Also add a label for the UEFI:NTFS FAT partition * Also fix internal chver script
This commit is contained in:
parent
ee5af9f8fc
commit
7f621b9648
11 changed files with 85 additions and 44 deletions
|
@ -1497,7 +1497,8 @@ DWORD WINAPI FormatThread(void* param)
|
|||
// According to Microsoft, every GPT disk (we RUN Windows from) must have an MSR due to not having hidden sectors
|
||||
// http://msdn.microsoft.com/en-us/library/windows/hardware/dn640535.aspx#gpt_faq_what_disk_require_msr
|
||||
extra_partitions = XP_MSR | XP_EFI;
|
||||
else if ((fs == FS_NTFS) && (dt == DT_ISO) && (iso_report.has_efi) && ((bt == BT_UEFI) || (windows_to_go)))
|
||||
else if ( (fs == FS_NTFS) && ((dt == DT_UEFI_NTFS) ||
|
||||
((dt == DT_ISO) && (iso_report.has_efi) && ((bt == BT_UEFI) || (windows_to_go) || (allow_dual_uefi_bios)))) )
|
||||
extra_partitions = XP_UEFI_NTFS;
|
||||
else if (IsChecked(IDC_EXTRA_PARTITION))
|
||||
extra_partitions = XP_COMPAT;
|
||||
|
@ -1803,7 +1804,9 @@ DWORD WINAPI FormatThread(void* param)
|
|||
CHECK_FOR_USER_CANCEL;
|
||||
|
||||
if (IsChecked(IDC_BOOT)) {
|
||||
if (bt == BT_UEFI) {
|
||||
if (dt == DT_UEFI_NTFS) {
|
||||
// All good
|
||||
} else if (bt == BT_UEFI) {
|
||||
// For once, no need to do anything - just check our sanity
|
||||
if ( (dt != DT_ISO) || (!iso_report.has_efi) || (fs > FS_NTFS) ) {
|
||||
uprintf("Spock gone crazy error!\n");
|
||||
|
|
20
src/rufus.c
20
src/rufus.c
|
@ -1233,7 +1233,7 @@ static BOOL BootCheck(void)
|
|||
if ((togo_mode) && (Button_GetCheck(GetDlgItem(hMainDialog, IDC_WINDOWS_TO_GO)) == BST_CHECKED)) {
|
||||
if (fs != FS_NTFS) {
|
||||
// Windows To Go only works for NTFS
|
||||
MessageBoxU(hMainDialog, lmprintf(MSG_097), lmprintf(MSG_092), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
||||
MessageBoxU(hMainDialog, lmprintf(MSG_097, "Windows To Go"), lmprintf(MSG_092), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
||||
return FALSE;
|
||||
} else if (SelectedDrive.Geometry.MediaType != FixedMedia) {
|
||||
if ((bt == BT_UEFI) && (pt == PARTITION_STYLE_GPT)) {
|
||||
|
@ -1488,6 +1488,12 @@ static BOOL BootCheck(void)
|
|||
return FALSE;
|
||||
}
|
||||
}
|
||||
} else if (dt == DT_UEFI_NTFS) {
|
||||
fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
||||
if (fs != FS_NTFS) {
|
||||
MessageBoxU(hMainDialog, lmprintf(MSG_097, "UEFI:NTFS"), lmprintf(MSG_092), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -1812,6 +1818,8 @@ void SetBoot(int fs, int bt)
|
|||
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType,
|
||||
"Grub4DOS " GRUB4DOS_VERSION), DT_GRUB4DOS));
|
||||
}
|
||||
if (advanced_mode)
|
||||
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "UEFI:NTFS"), DT_UEFI_NTFS));
|
||||
if ((!advanced_mode) && (selection_default >= DT_SYSLINUX_V4)) {
|
||||
selection_default = DT_FREEDOS;
|
||||
CheckDlgButton(hMainDialog, IDC_DISK_ID, BST_UNCHECKED);
|
||||
|
@ -2200,6 +2208,16 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
SetWindowTextU(hLabel, iso_report.label);
|
||||
}
|
||||
} else {
|
||||
if (selection_default == DT_UEFI_NTFS) {
|
||||
// Try to select NTFS as default
|
||||
for (i=0; i<ComboBox_GetCount(hFileSystem); i++) {
|
||||
fs = (int)ComboBox_GetItemData(hFileSystem, i);
|
||||
if (fs == FS_NTFS)
|
||||
IGNORE_RETVAL(ComboBox_SetCurSel(hFileSystem, i));
|
||||
}
|
||||
SendMessage(hMainDialog, WM_COMMAND, (CBN_SELCHANGE<<16) | IDC_FILESYSTEM,
|
||||
ComboBox_GetCurSel(hFileSystem));
|
||||
}
|
||||
// Set focus on the start button
|
||||
SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)FALSE, 0);
|
||||
SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hMainDialog, IDC_START), TRUE);
|
||||
|
|
|
@ -196,6 +196,7 @@ enum dos_type {
|
|||
DT_REACTOS,
|
||||
DT_GRUB4DOS,
|
||||
DT_GRUB2,
|
||||
DT_UEFI_NTFS,
|
||||
DT_MAX
|
||||
};
|
||||
|
||||
|
|
16
src/rufus.rc
16
src/rufus.rc
|
@ -32,7 +32,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
|||
|
||||
IDD_DIALOG DIALOGEX 12, 12, 242, 376
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Rufus 2.0.646"
|
||||
CAPTION "Rufus 2.1.647"
|
||||
FONT 8, "Segoe UI", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Start",IDC_START,127,339,50,14
|
||||
|
@ -157,7 +157,7 @@ END
|
|||
|
||||
IDD_DIALOG_XP DIALOGEX 12, 12, 242, 376
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Rufus 2.0.646"
|
||||
CAPTION "Rufus 2.1.647"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Start",IDC_START,127,339,50,14
|
||||
|
@ -283,7 +283,7 @@ END
|
|||
IDD_DIALOG_RTL DIALOGEX 12, 12, 242, 376
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
|
||||
CAPTION "Rufus 2.0.646"
|
||||
CAPTION "Rufus 2.1.647"
|
||||
FONT 8, "Segoe UI", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Start",IDC_START,127,339,50,14
|
||||
|
@ -415,7 +415,7 @@ END
|
|||
IDD_DIALOG_RTL_XP DIALOGEX 12, 12, 242, 376
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
|
||||
CAPTION "Rufus 2.0.646"
|
||||
CAPTION "Rufus 2.1.647"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Start",IDC_START,127,339,50,14
|
||||
|
@ -671,8 +671,8 @@ END
|
|||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 2,1,646,0
|
||||
PRODUCTVERSION 2,1,646,0
|
||||
FILEVERSION 2,1,647,0
|
||||
PRODUCTVERSION 2,1,647,0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
|
@ -689,13 +689,13 @@ BEGIN
|
|||
BEGIN
|
||||
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
||||
VALUE "FileDescription", "Rufus"
|
||||
VALUE "FileVersion", "2.1.646"
|
||||
VALUE "FileVersion", "2.1.647"
|
||||
VALUE "InternalName", "Rufus"
|
||||
VALUE "LegalCopyright", "© 2011-2015 Pete Batard (GPL v3)"
|
||||
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
||||
VALUE "OriginalFilename", "rufus.exe"
|
||||
VALUE "ProductName", "Rufus"
|
||||
VALUE "ProductVersion", "2.1.646"
|
||||
VALUE "ProductVersion", "2.1.647"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
|
|
12
src/usb.c
12
src/usb.c
|
@ -135,13 +135,14 @@ BOOL GetUSBDevices(DWORD devnum)
|
|||
htab_table htab_devid = HTAB_EMPTY;
|
||||
StrArray dev_if_path;
|
||||
char letter_name[] = " (?:)";
|
||||
char uefi_togo_check[] = "?:\\EFI\\Rufus\\ntfs_x64.efi";
|
||||
BOOL r = FALSE, found = FALSE, is_SCSI;
|
||||
HDEVINFO dev_info = NULL;
|
||||
SP_DEVINFO_DATA dev_info_data;
|
||||
SP_DEVICE_INTERFACE_DATA devint_data;
|
||||
PSP_DEVICE_INTERFACE_DETAIL_DATA_A devint_detail_data;
|
||||
DEVINST parent_inst, device_inst;
|
||||
DWORD size, i, j, k, datatype, drive_index;
|
||||
DWORD size, i, j, k, l, datatype, drive_index;
|
||||
ULONG list_size[ARRAYSIZE(storage_name)] = { 0 }, full_list_size, ulFlags;
|
||||
HANDLE hDrive;
|
||||
LONG maxwidth = 0;
|
||||
|
@ -401,6 +402,15 @@ BOOL GetUSBDevices(DWORD devnum)
|
|||
entry = lmprintf(MSG_046, label, drive_number,
|
||||
SizeToHumanReadable(GetDriveSize(drive_index), FALSE, use_fake_units));
|
||||
} else {
|
||||
// Find the UEFI:TOGO partition(s) (and eliminate them form our listing)
|
||||
for (k=0; drive_letters[k]; k++) {
|
||||
uefi_togo_check[0] = drive_letters[k];
|
||||
if (PathFileExistsA(uefi_togo_check)) {
|
||||
for (l=k; drive_letters[l]; l++)
|
||||
drive_letters[l] = drive_letters[l+1];
|
||||
k--;
|
||||
}
|
||||
}
|
||||
// We have multiple volumes assigned to the same device (multiple partitions)
|
||||
// If that is the case, use "Multiple Volumes" instead of the label
|
||||
safe_strcpy(entry_msg, sizeof(entry_msg), ((drive_letters[0] != 0) && (drive_letters[1] != 0))?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue