mirror of https://github.com/pbatard/rufus.git
parent
8fb4b091d5
commit
07f3eb42ce
|
@ -98,20 +98,17 @@ v 1.0.22
|
|||
# Main dialog
|
||||
g IDD_DIALOG
|
||||
t IDS_DEVICE_TXT "Device"
|
||||
# TODO: use MSG_278 for translations
|
||||
t IDS_BOOT_TYPE_TXT "Boot type"
|
||||
t IDS_PARTITION_TYPE_TXT "Partition scheme"
|
||||
t IDS_TARGET_SYSTEM_TXT "Target system type"
|
||||
t IDS_TARGET_SYSTEM_TXT "Target system"
|
||||
t IDS_FILESYSTEM_TXT "File system"
|
||||
t IDS_CLUSTERSIZE_TXT "Cluster size"
|
||||
t IDS_LABEL_TXT "New volume label"
|
||||
t IDS_LABEL_TXT "Volume label"
|
||||
t IDS_FORMAT_OPTIONS_GRP "Format Options"
|
||||
# Note: The button (IDC_ADVANCED) that appears next to "Format Options" is repositioned automatically.
|
||||
t IDC_BADBLOCKS "Check device for bad blocks"
|
||||
t IDC_QUICKFORMAT "Quick format"
|
||||
t IDC_BOOT "Create a bootable disk using"
|
||||
t IDC_WINDOWS_INSTALL "Standard Windows installation"
|
||||
# Only translate if Microsoft has a specific name for http://en.wikipedia.org/wiki/Windows_To_Go in your language
|
||||
# Otherwise, you can add a parenthesis eg. "Windows To Go (hint at what it does)" and/or use the tooltip (MSG_200)
|
||||
t IDC_WINDOWS_TO_GO "Windows To Go"
|
||||
t IDC_SET_ICON "Create extended label and icon files"
|
||||
t IDC_ABOUT "About..."
|
||||
t IDC_LOG "Log"
|
||||
|
@ -180,8 +177,8 @@ t MSG_003 "WARNING: ALL DATA ON DEVICE '%s' WILL BE DESTROYED.\n"
|
|||
t MSG_004 "Rufus update policy"
|
||||
t MSG_005 "Do you want to allow Rufus to check for application updates online?"
|
||||
# Must be the same as IDD_DIALOG:IDCANCEL (i.e. "Close" - I know it's confusing)
|
||||
t MSG_006 "Close"
|
||||
t MSG_007 "Cancel"
|
||||
t MSG_006 "CLOSE"
|
||||
t MSG_007 "CANCEL"
|
||||
t MSG_008 "Yes"
|
||||
t MSG_009 "No"
|
||||
t MSG_010 "Bad blocks found"
|
||||
|
@ -210,13 +207,13 @@ t MSG_028 "megabytes"
|
|||
t MSG_029 "Default"
|
||||
# The following gets appended to the file system, cluster size, etc.
|
||||
t MSG_030 "%s (Default)"
|
||||
t MSG_031 "%s partition scheme for BIOS or %s"
|
||||
t MSG_032 "%s partition scheme for BIOS"
|
||||
t MSG_033 "%s partition scheme for UEFI"
|
||||
t MSG_031 "BIOS (or UEFI-CSM)"
|
||||
t MSG_032 "UEFI (non CSM)"
|
||||
t MSG_033 "BIOS or UEFI"
|
||||
# Number of bad block check passes (singular for 1 pass, plural for 2 or more passes)
|
||||
t MSG_034 "%d mass"
|
||||
t MSG_035 "%d masses"
|
||||
t MSG_036 "ISO Image"
|
||||
t MSG_034 "%d pass"
|
||||
t MSG_035 "%d passes"
|
||||
t MSG_036 "Disk or ISO Image"
|
||||
t MSG_037 "Application"
|
||||
t MSG_038 "Abort"
|
||||
t MSG_039 "Launch"
|
||||
|
@ -298,7 +295,7 @@ t MSG_093 "IMPORTANT: THIS DRIVE CONTAINS MULTIPLE PARTITIONS!!\n\n"
|
|||
"This may include partitions/volumes that aren't listed or even visible from Windows. "
|
||||
"Should you wish to proceed, you are responsible for any data loss on these partitions."
|
||||
t MSG_094 "Multiple partitions detected"
|
||||
t MSG_095 "DD Image"
|
||||
###### t MSG_095 "DD Image"
|
||||
t MSG_096 "The file system currently selected can not be used with this type of ISO. "
|
||||
"Please select a different file system or use a different ISO."
|
||||
t MSG_097 "'%s' can only be applied if the file system is NTFS."
|
||||
|
@ -379,7 +376,7 @@ t MSG_159 "Use this field to set the drive label\nInternational characters are a
|
|||
t MSG_160 "Toggle advanced options"
|
||||
t MSG_161 "Check the device for bad blocks using a test pattern"
|
||||
t MSG_162 "Uncheck this box to use the \"slow\" format method"
|
||||
t MSG_163 "Check this box to make the USB drive bootable"
|
||||
### t MSG_163 ###FREE TO USE###
|
||||
t MSG_164 "Method that will be used to make the drive bootable"
|
||||
t MSG_165 "Click to select an image..."
|
||||
t MSG_166 "Check this box to allow the display of international labels "
|
||||
|
@ -570,6 +567,11 @@ t MSG_299 "Timestamp validation error"
|
|||
t MSG_300 "Rufus could not validate that the timestamp of the downloaded update is more recent than the one for the "
|
||||
"current executable.\n\nIn order to prevent potential attack scenarios, the update process has been aborted and "
|
||||
"the download will be deleted. Please check the log for more details."
|
||||
t MSG_301 "Standard Windows installation"
|
||||
# Only translate if Microsoft has a specific name for http://en.wikipedia.org/wiki/Windows_To_Go in your language
|
||||
# Otherwise, you can add a parenthesis eg. "Windows To Go (hint at what it does)" and/or use the tooltip (MSG_200)
|
||||
t MSG_302 "Windows To Go"
|
||||
|
||||
|
||||
################################################################################
|
||||
############################# TRANSLATOR END COPY ##############################
|
||||
|
|
|
@ -69,6 +69,7 @@ uint32_t bufnum, sum_count[CHECKSUM_MAX] = { 16, 20, 32 };
|
|||
HANDLE data_ready[CHECKSUM_MAX] = { 0 }, thread_ready[CHECKSUM_MAX] = { 0 };
|
||||
DWORD read_size[2];
|
||||
unsigned char ALIGNED(64) buffer[2][BUFFER_SIZE];
|
||||
extern progress_in_use;
|
||||
|
||||
/*
|
||||
* Rotate 32 bit integers by n bytes.
|
||||
|
@ -927,6 +928,7 @@ DWORD WINAPI SumThread(void* param)
|
|||
bufnum = 0;
|
||||
_bufnum = 0;
|
||||
read_size[0] = 1; // Don't trigger the first loop break
|
||||
progress_in_use = TRUE;
|
||||
for (rb = 0; ;rb += read_size[_bufnum]) {
|
||||
// Update the progress and check for cancel
|
||||
if (GetTickCount64() > LastRefresh + MAX_REFRESH) {
|
||||
|
@ -982,6 +984,7 @@ DWORD WINAPI SumThread(void* param)
|
|||
r = 0;
|
||||
|
||||
out:
|
||||
progress_in_use = FALSE;
|
||||
for (i = 0; i < CHECKSUM_MAX; i++) {
|
||||
if (sum_thread[i] != NULL)
|
||||
TerminateThread(sum_thread[i], 1);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Device detection and enumeration
|
||||
* Copyright © 2014-2017 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2014-2018 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Drive access function calls
|
||||
* Copyright © 2011-2016 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2011-2018 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1164,7 +1164,7 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
|||
}
|
||||
DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart = main_part_size_in_sectors * SelectedDrive.SectorSize;
|
||||
if (partition_style == PARTITION_STYLE_MBR) {
|
||||
DriveLayoutEx.PartitionEntry[pn].Mbr.BootIndicator = IsChecked(IDC_BOOT);
|
||||
DriveLayoutEx.PartitionEntry[pn].Mbr.BootIndicator = (bt != BT_NON_BOOTABLE);
|
||||
switch (file_system) {
|
||||
case FS_FAT16:
|
||||
DriveLayoutEx.PartitionEntry[pn].Mbr.PartitionType = 0x0e; // FAT16 LBA
|
||||
|
|
68
src/format.c
68
src/format.c
|
@ -2,7 +2,7 @@
|
|||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Formatting function calls
|
||||
* Copyright © 2007-2009 Tom Thornhill/Ridgecrop
|
||||
* Copyright © 2011-2017 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2011-2018 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -683,7 +683,6 @@ static BOOL FormatDrive(DWORD DriveIndex)
|
|||
WCHAR wLabel[64];
|
||||
ULONG ulClusterSize;
|
||||
size_t i;
|
||||
int fs;
|
||||
|
||||
GetWindowTextU(hFileSystem, FSType, ARRAYSIZE(FSType));
|
||||
// Might have a (Default) suffix => remove it
|
||||
|
@ -693,7 +692,6 @@ static BOOL FormatDrive(DWORD DriveIndex)
|
|||
break;
|
||||
}
|
||||
}
|
||||
fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
||||
if ((fs == FS_UDF) && !((dur_mins == 0) && (dur_secs == 0))) {
|
||||
PrintInfoDebug(0, MSG_220, FSType, dur_mins, dur_secs);
|
||||
} else {
|
||||
|
@ -864,9 +862,6 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive)
|
|||
FAKE_FD fake_fd = { 0 };
|
||||
FILE* fp = (FILE*)&fake_fd;
|
||||
const char* using_msg = "Using %s MBR\n";
|
||||
int fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
||||
int bt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType));
|
||||
int tt = GETTARGETTYPE((int)ComboBox_GetItemData(hPartitionScheme, ComboBox_GetCurSel(hPartitionScheme)));
|
||||
|
||||
AnalyzeMBR(hPhysicalDrive, "Drive");
|
||||
|
||||
|
@ -906,7 +901,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive)
|
|||
buffer[0x1c2] = 0x0c;
|
||||
break;
|
||||
}
|
||||
if ((IsChecked(IDC_BOOT)) && (tt == TT_BIOS)) {
|
||||
if ((bt != BT_NON_BOOTABLE) && (tt == TT_BIOS)) {
|
||||
// Set first partition bootable - masquerade as per the DiskID selected
|
||||
buffer[0x1be] = IsChecked(IDC_RUFUS_MBR) ?
|
||||
(BYTE)ComboBox_GetItemData(hDiskID, ComboBox_GetCurSel(hDiskID)):0x80;
|
||||
|
@ -936,21 +931,21 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive)
|
|||
|
||||
// Syslinux
|
||||
if ( (bt == BT_SYSLINUX_V4) || (bt == BT_SYSLINUX_V6) ||
|
||||
((bt == BT_ISO) && HAS_SYSLINUX(img_report)) ) {
|
||||
((bt == BT_IMAGE) && HAS_SYSLINUX(img_report)) ) {
|
||||
uprintf(using_msg, "Syslinux");
|
||||
r = write_syslinux_mbr(fp);
|
||||
goto notify;
|
||||
}
|
||||
|
||||
// Grub 2.0
|
||||
if ( ((bt == BT_ISO) && (img_report.has_grub2)) || (bt == BT_GRUB2) ) {
|
||||
if ( ((bt == BT_IMAGE) && (img_report.has_grub2)) || (bt == BT_GRUB2) ) {
|
||||
uprintf(using_msg, "Grub 2.0");
|
||||
r = write_grub2_mbr(fp);
|
||||
goto notify;
|
||||
}
|
||||
|
||||
// Grub4DOS
|
||||
if ( ((bt == BT_ISO) && (img_report.has_grub4dos)) || (bt == BT_GRUB4DOS) ) {
|
||||
if ( ((bt == BT_IMAGE) && (img_report.has_grub4dos)) || (bt == BT_GRUB4DOS) ) {
|
||||
uprintf(using_msg, "Grub4DOS");
|
||||
r = write_grub4dos_mbr(fp);
|
||||
goto notify;
|
||||
|
@ -964,7 +959,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive)
|
|||
}
|
||||
|
||||
// KolibriOS
|
||||
if ( (bt == BT_ISO) && HAS_KOLIBRIOS(img_report) && (IS_FAT(fs))) {
|
||||
if ( (bt == BT_IMAGE) && HAS_KOLIBRIOS(img_report) && (IS_FAT(fs))) {
|
||||
uprintf(using_msg, "KolibriOS");
|
||||
r = write_kolibrios_mbr(fp);
|
||||
goto notify;
|
||||
|
@ -997,7 +992,7 @@ static BOOL WriteSBR(HANDLE hPhysicalDrive)
|
|||
{
|
||||
// TODO: Do we need anything special for 4K sectors?
|
||||
DWORD size, max_size, mbr_size = 0x200;
|
||||
int r, bt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType));
|
||||
int r;
|
||||
unsigned char* buf = NULL;
|
||||
FAKE_FD fake_fd = { 0 };
|
||||
FILE* fp = (FILE*)&fake_fd;
|
||||
|
@ -1009,7 +1004,7 @@ static BOOL WriteSBR(HANDLE hPhysicalDrive)
|
|||
(DWORD)(SelectedDrive.SectorsPerTrack * SelectedDrive.SectorSize) : 1*MB;
|
||||
max_size -= mbr_size;
|
||||
// Syslinux has precedence over Grub
|
||||
if ((bt == BT_ISO) && (!HAS_SYSLINUX(img_report))) {
|
||||
if ((bt == BT_IMAGE) && (!HAS_SYSLINUX(img_report))) {
|
||||
if (img_report.has_grub4dos)
|
||||
bt = BT_GRUB4DOS;
|
||||
if (img_report.has_grub2)
|
||||
|
@ -1059,12 +1054,12 @@ static BOOL WriteSBR(HANDLE hPhysicalDrive)
|
|||
/*
|
||||
* Process the Partition Boot Record
|
||||
*/
|
||||
static __inline const char* bt_to_name(int bt) {
|
||||
static __inline const char* bt_to_name(void) {
|
||||
switch (bt) {
|
||||
case BT_FREEDOS: return "FreeDOS";
|
||||
case BT_REACTOS: return "ReactOS";
|
||||
default:
|
||||
return ((bt==BT_ISO) && HAS_KOLIBRIOS(img_report)) ? "KolibriOS" : "Standard";
|
||||
return ((bt==BT_IMAGE) && HAS_KOLIBRIOS(img_report)) ? "KolibriOS" : "Standard";
|
||||
}
|
||||
}
|
||||
static BOOL WritePBR(HANDLE hLogicalVolume)
|
||||
|
@ -1072,7 +1067,6 @@ static BOOL WritePBR(HANDLE hLogicalVolume)
|
|||
int i;
|
||||
FAKE_FD fake_fd = { 0 };
|
||||
FILE* fp = (FILE*)&fake_fd;
|
||||
int bt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType));
|
||||
const char* using_msg = "Using %s %s partition boot record\n";
|
||||
|
||||
fake_fd._handle = (char*)hLogicalVolume;
|
||||
|
@ -1080,7 +1074,7 @@ static BOOL WritePBR(HANDLE hLogicalVolume)
|
|||
|
||||
switch (ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem))) {
|
||||
case FS_FAT16:
|
||||
uprintf(using_msg, bt_to_name(bt), "FAT16");
|
||||
uprintf(using_msg, bt_to_name(), "FAT16");
|
||||
if (!is_fat_16_fs(fp)) {
|
||||
uprintf("New volume does not have a FAT16 boot sector - aborting\n");
|
||||
break;
|
||||
|
@ -1090,7 +1084,7 @@ static BOOL WritePBR(HANDLE hLogicalVolume)
|
|||
if (!write_fat_16_fd_br(fp, 0)) break;
|
||||
} else if (bt == BT_REACTOS) {
|
||||
if (!write_fat_16_ros_br(fp, 0)) break;
|
||||
} else if ((bt == BT_ISO) && HAS_KOLIBRIOS(img_report)) {
|
||||
} else if ((bt == BT_IMAGE) && HAS_KOLIBRIOS(img_report)) {
|
||||
uprintf("FAT16 is not supported for KolibriOS\n"); break;
|
||||
} else {
|
||||
if (!write_fat_16_br(fp, 0)) break;
|
||||
|
@ -1100,7 +1094,7 @@ static BOOL WritePBR(HANDLE hLogicalVolume)
|
|||
break;
|
||||
return TRUE;
|
||||
case FS_FAT32:
|
||||
uprintf(using_msg, bt_to_name(bt), "FAT32");
|
||||
uprintf(using_msg, bt_to_name(), "FAT32");
|
||||
for (i=0; i<2; i++) {
|
||||
if (!is_fat_32_fs(fp)) {
|
||||
uprintf("New volume does not have a %s FAT32 boot sector - aborting\n", i?"secondary":"primary");
|
||||
|
@ -1112,11 +1106,11 @@ static BOOL WritePBR(HANDLE hLogicalVolume)
|
|||
if (!write_fat_32_fd_br(fp, 0)) break;
|
||||
} else if (bt == BT_REACTOS) {
|
||||
if (!write_fat_32_ros_br(fp, 0)) break;
|
||||
} else if ((bt == BT_ISO) && HAS_KOLIBRIOS(img_report)) {
|
||||
} else if ((bt == BT_IMAGE) && HAS_KOLIBRIOS(img_report)) {
|
||||
if (!write_fat_32_kos_br(fp, 0)) break;
|
||||
} else if ((bt == BT_ISO) && HAS_BOOTMGR(img_report)) {
|
||||
} else if ((bt == BT_IMAGE) && HAS_BOOTMGR(img_report)) {
|
||||
if (!write_fat_32_pe_br(fp, 0)) break;
|
||||
} else if ((bt == BT_ISO) && HAS_WINPE(img_report)) {
|
||||
} else if ((bt == BT_IMAGE) && HAS_WINPE(img_report)) {
|
||||
if (!write_fat_32_nt_br(fp, 0)) break;
|
||||
} else {
|
||||
if (!write_fat_32_br(fp, 0)) break;
|
||||
|
@ -1128,7 +1122,7 @@ static BOOL WritePBR(HANDLE hLogicalVolume)
|
|||
}
|
||||
return TRUE;
|
||||
case FS_NTFS:
|
||||
uprintf(using_msg, bt_to_name(bt), "NTFS");
|
||||
uprintf(using_msg, bt_to_name(), "NTFS");
|
||||
if (!is_ntfs_fs(fp)) {
|
||||
uprintf("New volume does not have an NTFS boot sector - aborting\n");
|
||||
break;
|
||||
|
@ -1644,7 +1638,7 @@ out:
|
|||
*/
|
||||
DWORD WINAPI FormatThread(void* param)
|
||||
{
|
||||
int i, r, pt, tt, fs, bt;
|
||||
int i, r;
|
||||
BOOL ret, use_large_fat32, windows_to_go;
|
||||
DWORD DriveIndex = (DWORD)(uintptr_t)param;
|
||||
HANDLE hPhysicalDrive = INVALID_HANDLE_VALUE;
|
||||
|
@ -1660,11 +1654,9 @@ DWORD WINAPI FormatThread(void* param)
|
|||
char efi_dst[] = "?:\\efi\\boot\\bootx64.efi";
|
||||
char kolibri_dst[] = "?:\\MTLD_F32";
|
||||
char grub4dos_dst[] = "?:\\grldr";
|
||||
// TODO: Have a boolean to indicate DD writing
|
||||
BOOL write_as_image = FALSE;
|
||||
|
||||
fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
||||
bt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType));
|
||||
pt = GETPARTTYPE((int)ComboBox_GetItemData(hPartitionScheme, ComboBox_GetCurSel(hPartitionScheme)));
|
||||
tt = GETTARGETTYPE((int)ComboBox_GetItemData(hPartitionScheme, ComboBox_GetCurSel(hPartitionScheme)));
|
||||
use_large_fat32 = (fs == FS_FAT32) && ((SelectedDrive.DiskSize > LARGE_FAT32_SIZE) || (force_large_fat32));
|
||||
windows_to_go = (togo_mode) && HAS_WINTOGO(img_report) && (Button_GetCheck(GetDlgItem(hMainDialog, IDC_WINDOWS_TO_GO)) == BST_CHECKED);
|
||||
large_drive = (SelectedDrive.DiskSize > (1*TB));
|
||||
|
@ -1676,7 +1668,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
// 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) && ((bt == BT_UEFI_NTFS) ||
|
||||
((bt == BT_ISO) && IS_EFI_BOOTABLE(img_report) && ((tt == TT_UEFI) || (windows_to_go) || (allow_dual_uefi_bios)))) )
|
||||
((bt == BT_IMAGE) && IS_EFI_BOOTABLE(img_report) && ((tt == TT_UEFI) || (windows_to_go) || (allow_dual_uefi_bios)))) )
|
||||
extra_partitions = XP_UEFI_NTFS;
|
||||
else if (IsChecked(IDC_EXTRA_PARTITION))
|
||||
extra_partitions = XP_COMPAT;
|
||||
|
@ -1707,7 +1699,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
// Do it in reverse so that we always end on the first volume letter
|
||||
for (i=(int)safe_strlen(drive_letters); i>0; i--) {
|
||||
drive_name[0] = drive_letters[i-1];
|
||||
if (IsChecked(IDC_BOOT) && ((bt == BT_ISO) || (bt == BT_IMG))) {
|
||||
if (bt == BT_IMAGE) {
|
||||
// If we are using an image, check that it isn't located on the drive we are trying to format
|
||||
if ((PathGetDriveNumberU(image_path) + 'A') == drive_letters[i-1]) {
|
||||
uprintf("ABORTED: Cannot use an image that is located on the target drive!\n");
|
||||
|
@ -1755,7 +1747,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
// Note, Microsoft's way of cleaning partitions (IOCTL_DISK_CREATE_DISK, which is what we apply
|
||||
// in InitializeDisk) is *NOT ENOUGH* to reset a disk and can render it inoperable for partitioning
|
||||
// or formatting under Windows. See https://github.com/pbatard/rufus/issues/759 for details.
|
||||
if ((!IsChecked(IDC_BOOT)) || (bt != BT_IMG)) {
|
||||
if ((bt != BT_IMAGE) || (img_report.is_iso)) {
|
||||
if ((!ClearMBRGPT(hPhysicalDrive, SelectedDrive.DiskSize, SelectedDrive.SectorSize, use_large_fat32)) ||
|
||||
(!InitializeDisk(hPhysicalDrive))) {
|
||||
uprintf("Could not reset partitions\n");
|
||||
|
@ -1830,7 +1822,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
}
|
||||
|
||||
// Write an image file
|
||||
if (IsChecked(IDC_BOOT) && (bt == BT_IMG)) {
|
||||
if ((bt == BT_IMAGE) && write_as_image) {
|
||||
hSourceImage = CreateFileU(image_path, GENERIC_READ, FILE_SHARE_READ, NULL,
|
||||
OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
|
||||
if (hSourceImage == INVALID_HANDLE_VALUE) {
|
||||
|
@ -1935,18 +1927,18 @@ DWORD WINAPI FormatThread(void* param)
|
|||
uprintf("Warning: Failed to refresh label: %s", WindowsErrorString());
|
||||
}
|
||||
|
||||
if (IsChecked(IDC_BOOT)) {
|
||||
if (bt != BT_NON_BOOTABLE) {
|
||||
if (bt == BT_UEFI_NTFS) {
|
||||
// All good
|
||||
} else if (tt == TT_UEFI) {
|
||||
// For once, no need to do anything - just check our sanity
|
||||
if ( (bt != BT_ISO) || !IS_EFI_BOOTABLE(img_report) || (fs > FS_NTFS) ) {
|
||||
if ( (bt != BT_IMAGE) || !IS_EFI_BOOTABLE(img_report) || (fs > FS_NTFS) ) {
|
||||
uprintf("Spock gone crazy error in %s:%d", __FILE__, __LINE__);
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE;
|
||||
goto out;
|
||||
}
|
||||
} else if ( (bt == BT_SYSLINUX_V4) || (bt == BT_SYSLINUX_V6) ||
|
||||
((bt == BT_ISO) && (HAS_SYSLINUX(img_report) || HAS_REACTOS(img_report)) &&
|
||||
((bt == BT_IMAGE) && (HAS_SYSLINUX(img_report) || HAS_REACTOS(img_report)) &&
|
||||
(!HAS_WINDOWS(img_report) || !allow_dual_uefi_bios)) ) {
|
||||
if (!InstallSyslinux(DriveIndex, drive_name[0], fs)) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE;
|
||||
|
@ -1985,7 +1977,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
goto out;
|
||||
CHECK_FOR_USER_CANCEL;
|
||||
|
||||
if (IsChecked(IDC_BOOT)) {
|
||||
if (bt != BT_NON_BOOTABLE) {
|
||||
if ((bt == BT_MSDOS) || (bt == BT_FREEDOS)) {
|
||||
UpdateProgress(OP_DOS, -1.0f);
|
||||
PrintInfoDebug(0, MSG_230);
|
||||
|
@ -2001,7 +1993,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
IsFileInDB(FILES_DIR "\\grub4dos-" GRUB4DOS_VERSION "\\grldr")?"✓":"✗");
|
||||
if (!CopyFileU(FILES_DIR "\\grub4dos-" GRUB4DOS_VERSION "\\grldr", grub4dos_dst, FALSE))
|
||||
uprintf("Failed to copy file: %s", WindowsErrorString());
|
||||
} else if ((bt == BT_ISO) && (image_path != NULL)) {
|
||||
} else if ((bt == BT_IMAGE) && (image_path != NULL) && (img_report.is_iso)) {
|
||||
UpdateProgress(OP_DOS, 0.0f);
|
||||
drive_name[2] = 0; // Ensure our drive is something like 'D:'
|
||||
if (windows_to_go) {
|
||||
|
@ -2057,7 +2049,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
// Issue another complete remount before we exit, to ensure we're clean
|
||||
RemountVolume(drive_name);
|
||||
// NTFS fixup (WinPE/AIK images don't seem to boot without an extra checkdisk)
|
||||
if ((bt == BT_ISO) && (fs == FS_NTFS)) {
|
||||
if ((bt == BT_IMAGE) && (img_report.is_iso) && (fs == FS_NTFS)) {
|
||||
// Try to ensure that all messages from Checkdisk will be in English
|
||||
if (PRIMARYLANGID(GetThreadUILanguage()) != LANG_ENGLISH) {
|
||||
SetThreadUILanguage(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Formatting function calls
|
||||
* Copyright © 2007-2009 Tom Thornhill/Ridgecrop
|
||||
* Copyright © 2011-2014 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2011-2018 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
24
src/iso.c
24
src/iso.c
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* ISO file extraction
|
||||
* Copyright © 2011-2016 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2011-2018 Pete Batard <pete@akeo.ie>
|
||||
* Based on libcdio's iso & udf samples:
|
||||
* Copyright © 2003-2014 Rocky Bernstein <rocky@gnu.org>
|
||||
*
|
||||
|
@ -1170,7 +1170,7 @@ BOOL ExtractEfiImgFiles(const char* dir)
|
|||
iso9660_readfat_private* p_private = NULL;
|
||||
libfat_sector_t s;
|
||||
int32_t dc, c;
|
||||
struct libfat_filesystem *fs = NULL;
|
||||
struct libfat_filesystem *lf_fs = NULL;
|
||||
struct libfat_direntry direntry;
|
||||
char name[12] = { 0 };
|
||||
char path[64];
|
||||
|
@ -1201,17 +1201,17 @@ BOOL ExtractEfiImgFiles(const char* dir)
|
|||
uprintf("Error reading ISO-9660 file %s at LSN %lu\n", img_report.efi_img_path, (long unsigned int)p_private->lsn);
|
||||
goto out;
|
||||
}
|
||||
fs = libfat_open(iso9660_readfat, (intptr_t)p_private);
|
||||
if (fs == NULL) {
|
||||
lf_fs = libfat_open(iso9660_readfat, (intptr_t)p_private);
|
||||
if (lf_fs == NULL) {
|
||||
uprintf("FAT access error");
|
||||
goto out;
|
||||
}
|
||||
|
||||
// Navigate to /EFI/BOOT
|
||||
if (libfat_searchdir(fs, 0, "EFI ", &direntry) < 0)
|
||||
if (libfat_searchdir(lf_fs, 0, "EFI ", &direntry) < 0)
|
||||
goto out;
|
||||
dc = direntry.entry[26] + (direntry.entry[27] << 8);
|
||||
if (libfat_searchdir(fs, dc, "BOOT ", &direntry) < 0)
|
||||
if (libfat_searchdir(lf_fs, dc, "BOOT ", &direntry) < 0)
|
||||
goto out;
|
||||
dc = direntry.entry[26] + (direntry.entry[27] << 8);
|
||||
|
||||
|
@ -1228,7 +1228,7 @@ BOOL ExtractEfiImgFiles(const char* dir)
|
|||
} else
|
||||
name[k++] = toupper(efi_bootname[i][j]);
|
||||
}
|
||||
c = libfat_searchdir(fs, dc, name, &direntry);
|
||||
c = libfat_searchdir(lf_fs, dc, name, &direntry);
|
||||
if (c > 0) {
|
||||
if (dir == NULL) {
|
||||
if (!ret)
|
||||
|
@ -1265,9 +1265,9 @@ BOOL ExtractEfiImgFiles(const char* dir)
|
|||
}
|
||||
|
||||
written = 0;
|
||||
s = libfat_clustertosector(fs, c);
|
||||
s = libfat_clustertosector(lf_fs, c);
|
||||
while ((s != 0) && (s < 0xFFFFFFFFULL) && (written < file_size)) {
|
||||
buf = libfat_get_sector(fs, s);
|
||||
buf = libfat_get_sector(lf_fs, s);
|
||||
size = MIN(LIBFAT_SECTOR_SIZE, file_size - written);
|
||||
if (!WriteFileWithRetry(handle, buf, size, &size, WRITE_RETRIES) ||
|
||||
(size != MIN(LIBFAT_SECTOR_SIZE, file_size - written))) {
|
||||
|
@ -1276,7 +1276,7 @@ BOOL ExtractEfiImgFiles(const char* dir)
|
|||
continue;
|
||||
}
|
||||
written += size;
|
||||
s = libfat_nextsector(fs, s);
|
||||
s = libfat_nextsector(lf_fs, s);
|
||||
}
|
||||
CloseHandle(handle);
|
||||
ret = TRUE;
|
||||
|
@ -1285,8 +1285,8 @@ BOOL ExtractEfiImgFiles(const char* dir)
|
|||
}
|
||||
|
||||
out:
|
||||
if (fs != NULL)
|
||||
libfat_close(fs);
|
||||
if (lf_fs != NULL)
|
||||
libfat_close(lf_fs);
|
||||
if (p_statbuf != NULL)
|
||||
safe_free(p_statbuf->rr.psz_symlink);
|
||||
safe_free(p_statbuf);
|
||||
|
|
|
@ -34,7 +34,7 @@ RUFUS_URL "\\line\n"
|
|||
|
||||
const char* additional_copyrights =
|
||||
"{\\rtf1\\ansi\n"
|
||||
"Based on a GUI redesign concept by Fahad Al-Riyami\\line\n"
|
||||
"Rufus 3.0 GUI redesign concept by Fahad Al-Riyami\\line\n"
|
||||
"Used with kind authorization\\line\n"
|
||||
"\\line\n"
|
||||
"Icon by PC Unleashed:\\line\n"
|
||||
|
|
|
@ -80,6 +80,8 @@ char* default_msg_table[MSG_MAX-MSG_000] = {"%s", 0};
|
|||
char* current_msg_table[MSG_MAX-MSG_000] = {"%s", 0};
|
||||
char** msg_table = NULL;
|
||||
|
||||
extern progress_in_use;
|
||||
|
||||
static void mtab_destroy(BOOL reinit)
|
||||
{
|
||||
size_t j;
|
||||
|
@ -428,7 +430,15 @@ static uint64_t last_msg_time[2] = { 0, 0 };
|
|||
static void PrintInfoMessage(char* msg) {
|
||||
SetWindowTextU(hProgress, msg);
|
||||
// Make sure our field gets redrawn
|
||||
SendMessage(hProgress, WM_PAINT, 0, 0);
|
||||
// If the progress bar is not active, it looks like WM_PAINT is
|
||||
// ignored. But InvalidateRect is causing refresh tearing so we
|
||||
// don't want to use that while active.
|
||||
// Refresh still sucks though and marquee no longer works... :(
|
||||
// TODO: Create our own progress bar control with text overlay and inverted text
|
||||
if (!progress_in_use)
|
||||
InvalidateRect(hProgress, NULL, TRUE);
|
||||
else
|
||||
SendMessage(hProgress, WM_PAINT, 0, 0);
|
||||
}
|
||||
static void PrintStatusMessage(char* msg) {
|
||||
SendMessageLU(hStatus, SB_SETTEXTW, SBT_OWNERDRAW | SB_SECTION_LEFT, msg);
|
||||
|
@ -446,6 +456,7 @@ static void CALLBACK OutputMessageTimeout(HWND hWnd, UINT uMsg, UINT_PTR idEvent
|
|||
|
||||
KillTimer(hMainDialog, idEvent);
|
||||
bOutputTimerArmed[i] = FALSE;
|
||||
|
||||
PrintMessage[i](output_msg[i]);
|
||||
last_msg_time[i] = GetTickCount64();
|
||||
}
|
||||
|
|
|
@ -46,13 +46,12 @@ const loc_control_id control_id[] = {
|
|||
LOC_CTRL(IDC_ABOUT),
|
||||
LOC_CTRL(IDC_LABEL),
|
||||
LOC_CTRL(IDC_QUICKFORMAT),
|
||||
LOC_CTRL(IDC_BOOT),
|
||||
LOC_CTRL(IDC_BADBLOCKS),
|
||||
LOC_CTRL(IDC_PROGRESS),
|
||||
LOC_CTRL(IDC_BOOTTYPE),
|
||||
LOC_CTRL(IDC_NBPASSES),
|
||||
LOC_CTRL(IDC_TEST),
|
||||
LOC_CTRL(IDC_SELECT_ISO),
|
||||
LOC_CTRL(IDC_SELECT_IMAGE),
|
||||
LOC_CTRL(IDC_SET_ICON),
|
||||
LOC_CTRL(IDC_RUFUS_MBR),
|
||||
LOC_CTRL(IDC_TARGET_SYSTEM),
|
||||
|
@ -65,7 +64,7 @@ const loc_control_id control_id[] = {
|
|||
LOC_CTRL(IDC_HASH),
|
||||
LOC_CTRL(IDC_SAVE),
|
||||
LOC_CTRL(IDC_SELECTED_IMAGE),
|
||||
LOC_CTRL(IDC_BOOT_OPTION),
|
||||
LOC_CTRL(IDC_IMAGE_OPTION),
|
||||
LOC_CTRL(IDC_ABOUT_LICENSE),
|
||||
LOC_CTRL(IDC_ABOUT_ICON),
|
||||
LOC_CTRL(IDC_ABOUT_UPDATES),
|
||||
|
@ -150,13 +149,13 @@ const loc_control_id control_id[] = {
|
|||
LOC_CTRL(IDS_CHECK_NOW_GRP),
|
||||
LOC_CTRL(IDS_TARGET_SYSTEM_TXT),
|
||||
LOC_CTRL(IDS_SELETED_IMAGE_TXT),
|
||||
LOC_CTRL(IDS_BOOT_OPTION_TXT),
|
||||
LOC_CTRL(IDS_IMAGE_OPTION_TXT),
|
||||
LOC_CTRL(IDS_SELECTED_IMAGE_TXT),
|
||||
LOC_CTRL(IDS_BOOT_TYPE_TXT),
|
||||
LOC_CTRL(IDS_DEVICE_OPTIONS_TXT),
|
||||
LOC_CTRL(IDS_DEVICE_SETTINGS_TXT),
|
||||
LOC_CTRL(IDS_IMAGE_SETTINGS_TXT),
|
||||
LOC_CTRL(IDS_FORMAT_OPTIONS_TXT),
|
||||
LOC_CTRL(IDS_ADVANCED_OPTIONS_TXT),
|
||||
LOC_CTRL(IDS_FORMAT_OPTIONS_TXT2),
|
||||
LOC_CTRL(IDS_STATUS_TXT),
|
||||
LOC_CTRL(MSG_000),
|
||||
LOC_CTRL(MSG_001),
|
||||
|
@ -459,6 +458,16 @@ const loc_control_id control_id[] = {
|
|||
LOC_CTRL(MSG_298),
|
||||
LOC_CTRL(MSG_299),
|
||||
LOC_CTRL(MSG_300),
|
||||
LOC_CTRL(MSG_301),
|
||||
LOC_CTRL(MSG_302),
|
||||
LOC_CTRL(MSG_303),
|
||||
LOC_CTRL(MSG_304),
|
||||
LOC_CTRL(MSG_305),
|
||||
LOC_CTRL(MSG_306),
|
||||
LOC_CTRL(MSG_307),
|
||||
LOC_CTRL(MSG_308),
|
||||
LOC_CTRL(MSG_309),
|
||||
LOC_CTRL(MSG_310),
|
||||
LOC_CTRL(MSG_MAX),
|
||||
LOC_CTRL(IDOK),
|
||||
LOC_CTRL(IDCANCEL),
|
||||
|
|
|
@ -82,13 +82,12 @@
|
|||
#define IDC_ABOUT 1007
|
||||
#define IDC_LABEL 1008
|
||||
#define IDC_QUICKFORMAT 1009
|
||||
#define IDC_BOOT 1010
|
||||
#define IDC_BADBLOCKS 1011
|
||||
#define IDC_PROGRESS 1012
|
||||
#define IDC_BOOTTYPE 1013
|
||||
#define IDC_NBPASSES 1014
|
||||
#define IDC_TEST 1015
|
||||
#define IDC_SELECT_ISO 1016
|
||||
#define IDC_SELECT_IMAGE 1016
|
||||
#define IDC_SET_ICON 1017
|
||||
#define IDC_RUFUS_MBR 1018
|
||||
#define IDC_TARGET_SYSTEM 1019
|
||||
|
@ -101,7 +100,7 @@
|
|||
#define IDC_HASH 1026
|
||||
#define IDC_SAVE 1027
|
||||
#define IDC_SELECTED_IMAGE 1028
|
||||
#define IDC_BOOT_OPTION 1029
|
||||
#define IDC_IMAGE_OPTION 1029
|
||||
#define IDC_ABOUT_LICENSE 1030
|
||||
#define IDC_ABOUT_ICON 1031
|
||||
#define IDC_ABOUT_UPDATES 1032
|
||||
|
@ -186,14 +185,14 @@
|
|||
#define IDS_CHECK_NOW_GRP 2012
|
||||
#define IDS_TARGET_SYSTEM_TXT 2013
|
||||
#define IDS_SELETED_IMAGE_TXT 2014
|
||||
#define IDS_BOOT_OPTION_TXT 2015
|
||||
#define IDS_IMAGE_OPTION_TXT 2015
|
||||
#define IDS_SELECTED_IMAGE_TXT 2016
|
||||
#define IDS_BOOT_TYPE_TXT 2017
|
||||
#define IDS_DEVICE_OPTIONS_TXT 2018
|
||||
#define IDS_FORMAT_OPTIONS_TXT 2019
|
||||
#define IDS_ADVANCED_OPTIONS_TXT 2020
|
||||
#define IDS_FORMAT_OPTIONS_TXT2 2020
|
||||
#define IDS_STATUS_TXT 2021
|
||||
#define IDS_DEVICE_SETTINGS_TXT 2018
|
||||
#define IDS_IMAGE_SETTINGS_TXT 2019
|
||||
#define IDS_FORMAT_OPTIONS_TXT 2020
|
||||
#define IDS_ADVANCED_OPTIONS_TXT 2021
|
||||
#define IDS_STATUS_TXT 2022
|
||||
#define MSG_000 3000
|
||||
#define MSG_001 3001
|
||||
#define MSG_002 3002
|
||||
|
@ -495,7 +494,17 @@
|
|||
#define MSG_298 3298
|
||||
#define MSG_299 3299
|
||||
#define MSG_300 3300
|
||||
#define MSG_MAX 3301
|
||||
#define MSG_301 3301
|
||||
#define MSG_302 3302
|
||||
#define MSG_303 3303
|
||||
#define MSG_304 3304
|
||||
#define MSG_305 3305
|
||||
#define MSG_306 3306
|
||||
#define MSG_307 3307
|
||||
#define MSG_308 3308
|
||||
#define MSG_309 3309
|
||||
#define MSG_310 3310
|
||||
#define MSG_MAX 3311
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
|
|
1341
src/rufus.c
1341
src/rufus.c
File diff suppressed because it is too large
Load Diff
10
src/rufus.h
10
src/rufus.h
|
@ -218,14 +218,14 @@ enum fs_type {
|
|||
enum boot_type {
|
||||
BT_MSDOS = 0,
|
||||
BT_FREEDOS,
|
||||
BT_ISO,
|
||||
BT_IMG,
|
||||
BT_IMAGE,
|
||||
BT_SYSLINUX_V4, // Start of indexes that only display in advanced mode
|
||||
BT_SYSLINUX_V6,
|
||||
BT_REACTOS,
|
||||
BT_GRUB4DOS,
|
||||
BT_GRUB2,
|
||||
BT_UEFI_NTFS,
|
||||
BT_NON_BOOTABLE,
|
||||
BT_MAX
|
||||
};
|
||||
|
||||
|
@ -236,8 +236,6 @@ enum target_type {
|
|||
};
|
||||
// For the partition types we'll use Microsoft's PARTITION_STYLE_### constants
|
||||
#define PARTITION_STYLE_SFD PARTITION_STYLE_RAW
|
||||
#define GETTARGETTYPE(x) (((x)>0)?(((x) >> 16) & 0xFFFF):0)
|
||||
#define GETPARTTYPE(x) (((x)>0)?((x) & 0xFFFF):0);
|
||||
|
||||
enum checksum_type {
|
||||
CHECKSUM_MD5 = 0,
|
||||
|
@ -385,7 +383,7 @@ enum WindowsVersion {
|
|||
*/
|
||||
extern HINSTANCE hMainInstance;
|
||||
extern HWND hMainDialog, hLogDlg, hStatus, hDeviceList, hCapacity;
|
||||
extern HWND hPartitionScheme, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog;
|
||||
extern HWND hPartitionScheme, hTargetSystem, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog;
|
||||
extern HWND hInfo, hProgress, hDiskID, hStatusToolbar;
|
||||
extern float fScale;
|
||||
extern char szFolderPath[MAX_PATH], app_dir[MAX_PATH], temp_dir[MAX_PATH], system_dir[MAX_PATH], sysnative_dir[MAX_PATH];
|
||||
|
@ -401,6 +399,7 @@ extern int64_t iso_blocking_status;
|
|||
extern uint16_t rufus_version[3], embedded_sl_version[2];
|
||||
extern int nWindowsVersion;
|
||||
extern int nWindowsBuildNumber;
|
||||
extern int fs, bt, pt, tt;
|
||||
extern char WindowsVersionStr[128];
|
||||
extern size_t ubuffer_pos;
|
||||
extern char ubuffer[UBUFFER_SIZE];
|
||||
|
@ -541,6 +540,7 @@ typedef struct {
|
|||
} StrArray;
|
||||
extern void StrArrayCreate(StrArray* arr, uint32_t initial_size);
|
||||
extern int32_t StrArrayAdd(StrArray* arr, const char* str, BOOL );
|
||||
extern int32_t StrArrayFind(StrArray* arr, const char* str);
|
||||
extern void StrArrayClear(StrArray* arr);
|
||||
extern void StrArrayDestroy(StrArray* arr);
|
||||
#define IsStrArrayEmpty(arr) (arr.Index == 0)
|
||||
|
|
81
src/rufus.rc
81
src/rufus.rc
|
@ -36,48 +36,49 @@ EXSTYLE WS_EX_ACCEPTFILES
|
|||
CAPTION "Rufus 3.0.1220"
|
||||
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
||||
BEGIN
|
||||
LTEXT "Device",IDS_DEVICE_TXT,9,19,101,8
|
||||
LTEXT "Device Settings ",IDS_DEVICE_SETTINGS_TXT,8,3,53,11,NOT WS_GROUP
|
||||
LTEXT "Device",IDS_DEVICE_TXT,8,19,101,8
|
||||
COMBOBOX IDC_DEVICE,8,30,200,33,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Boot Type",IDS_BOOT_TYPE_TXT,9,45,35,8
|
||||
COMBOBOX IDC_BOOTTYPE,8,55,175,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Boot Option",IDS_BOOT_OPTION_TXT,8,92,201,8
|
||||
COMBOBOX IDC_BOOT_OPTION,7,102,175,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Partition scheme",IDS_PARTITION_TYPE_TXT,9,116,108,8
|
||||
COMBOBOX IDC_PARTITION_TYPE,8,129,109,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Target system type",IDS_TARGET_SYSTEM_TXT,130,116,71,10
|
||||
COMBOBOX IDC_TARGET_SYSTEM,132,129,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "File system",IDS_FILESYSTEM_TXT,9,162,110,10
|
||||
COMBOBOX IDC_FILESYSTEM,8,173,108,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Cluster size",IDS_CLUSTERSIZE_TXT,130,161,71,10
|
||||
COMBOBOX IDC_CLUSTERSIZE,132,173,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "New volume label",IDS_LABEL_TXT,9,188,222,10
|
||||
EDITTEXT IDC_LABEL,8,198,226,12,ES_AUTOHSCROLL
|
||||
PUSHBUTTON "",IDC_ADVANCED,217,146,14,10,BS_ICON
|
||||
CONTROL "Check device for bad blocks",IDC_BADBLOCKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,218,112,10
|
||||
COMBOBOX IDC_NBPASSES,124,216,16,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
CONTROL "Quick format",IDC_QUICKFORMAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,276,121,10
|
||||
PUSHBUTTON "SELECT",IDC_SELECT_ISO,191,51,44,14,BS_ICON
|
||||
CONTROL "Create extended label and icon files",IDC_SET_ICON,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,231,216,10
|
||||
CONTROL "List USB Hard Drives",IDC_ENABLE_FIXED_DISKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,263,216,10
|
||||
CONTROL "Add fixes for old BIOSes (extra partition, align, etc.)",IDC_EXTRA_PARTITION,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,290,216,10
|
||||
CONTROL "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,304,110,10
|
||||
COMBOBOX IDC_DISK_ID,128,305,100,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,341,225,9
|
||||
PUSHBUTTON "About...",IDC_ABOUT,8,359,50,14
|
||||
PUSHBUTTON "Log",IDC_LOG,63,359,21,14
|
||||
PUSHBUTTON "T",IDC_TEST,90,359,12,14,NOT WS_VISIBLE
|
||||
DEFPUSHBUTTON "START",IDC_START,127,359,50,14
|
||||
PUSHBUTTON "CLOSE",IDCANCEL,183,359,50,14
|
||||
PUSHBUTTON "#",IDC_HASH,215,77,21,14,BS_ICON
|
||||
PUSHBUTTON "...",IDC_SAVE,215,28,21,14,BS_ICON
|
||||
LTEXT "Selected Image",IDS_SELECTED_IMAGE_TXT,8,69,204,8
|
||||
COMBOBOX IDC_SELECTED_IMAGE,7,79,199,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Device Settings ",IDS_DEVICE_OPTIONS_TXT,9,3,53,11,NOT WS_GROUP
|
||||
LTEXT "Status ",IDS_STATUS_TXT,11,325,23,9,NOT WS_GROUP
|
||||
LTEXT "Format Options ",IDS_FORMAT_OPTIONS_TXT,9,147,57,9,NOT WS_GROUP
|
||||
LTEXT "Advanced Options ",IDS_ADVANCED_OPTIONS_TXT,7,250,67,9,NOT WS_GROUP
|
||||
LTEXT "Boot Type",IDS_BOOT_TYPE_TXT,8,45,35,8
|
||||
COMBOBOX IDC_BOOTTYPE,8,55,175,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Selected Image",IDS_SELECTED_IMAGE_TXT,8,110,204,8
|
||||
COMBOBOX IDC_SELECTED_IMAGE,8,119,199,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
PUSHBUTTON "#",IDC_HASH,215,118,21,14,BS_ICON
|
||||
LTEXT "Image Option",IDS_IMAGE_OPTION_TXT,8,130,201,8
|
||||
COMBOBOX IDC_IMAGE_OPTION,8,141,175,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Partition scheme",IDS_PARTITION_TYPE_TXT,8,70,108,8
|
||||
COMBOBOX IDC_PARTITION_TYPE,8,81,109,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Target system",IDS_TARGET_SYSTEM_TXT,130,70,71,10
|
||||
COMBOBOX IDC_TARGET_SYSTEM,132,81,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Format Options ",IDS_FORMAT_OPTIONS_TXT,8,156,57,9,NOT WS_GROUP
|
||||
LTEXT "File system",IDS_FILESYSTEM_TXT,8,194,110,10
|
||||
COMBOBOX IDC_FILESYSTEM,8,208,108,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Cluster size",IDS_CLUSTERSIZE_TXT,130,193,71,10
|
||||
COMBOBOX IDC_CLUSTERSIZE,132,208,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Volume label",IDS_LABEL_TXT,8,171,222,10
|
||||
EDITTEXT IDC_LABEL,8,181,226,12,ES_AUTOHSCROLL
|
||||
PUSHBUTTON "",IDC_ADVANCED,217,155,14,10,BS_ICON
|
||||
CONTROL "Check device for bad blocks",IDC_BADBLOCKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,227,112,10
|
||||
COMBOBOX IDC_NBPASSES,124,225,16,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
CONTROL "Quick format",IDC_QUICKFORMAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,285,121,10
|
||||
PUSHBUTTON "SELECT",IDC_SELECT_IMAGE,191,51,44,14
|
||||
CONTROL "Create extended label and icon files",IDC_SET_ICON,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,240,216,10
|
||||
LTEXT "Advanced Options ",IDS_ADVANCED_OPTIONS_TXT,8,259,67,9,NOT WS_GROUP
|
||||
CONTROL "List USB Hard Drives",IDC_ENABLE_FIXED_DISKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,272,216,10
|
||||
CONTROL "Add fixes for old BIOSes (extra partition, align, etc.)",IDC_EXTRA_PARTITION,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,299,216,10
|
||||
CONTROL "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,313,110,10
|
||||
COMBOBOX IDC_DISK_ID,124,314,100,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Status ",IDS_STATUS_TXT,8,327,23,9,NOT WS_GROUP
|
||||
CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,342,225,9
|
||||
PUSHBUTTON "About...",IDC_ABOUT,8,362,50,14
|
||||
PUSHBUTTON "Log",IDC_LOG,63,362,21,14
|
||||
PUSHBUTTON "T",IDC_TEST,90,362,12,14,NOT WS_VISIBLE
|
||||
DEFPUSHBUTTON "START",IDC_START,127,362,50,14
|
||||
PUSHBUTTON "CLOSE",IDCANCEL,183,362,50,14
|
||||
LTEXT "Image Settings ",IDS_IMAGE_SETTINGS_TXT,8,96,57,9,NOT WS_GROUP
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 0, 0, 319, 237
|
||||
|
|
12
src/smart.c
12
src/smart.c
|
@ -312,7 +312,7 @@ static int UsbCypressAtaPassthrough(HANDLE hPhysical, ATA_PASSTHROUGH_CMD* Comma
|
|||
}
|
||||
|
||||
/* The various bridges we will try, in order */
|
||||
AtaPassThroughType pt[] = {
|
||||
AtaPassThroughType ata_pt[] = {
|
||||
{ SatAtaPassthrough, "SAT" },
|
||||
{ UsbJmicronAtaPassthrough, "JMicron" },
|
||||
{ UsbProlificAtaPassthrough, "Prolific" },
|
||||
|
@ -335,10 +335,10 @@ BOOL Identify(HANDLE hPhysical)
|
|||
if (idd == NULL)
|
||||
return FALSE;
|
||||
|
||||
for (i=0; i<ARRAYSIZE(pt); i++) {
|
||||
r = pt[i].fn(hPhysical, &Command, idd, sizeof(IDENTIFY_DEVICE_DATA), SPT_TIMEOUT_VALUE);
|
||||
for (i=0; i<ARRAYSIZE(ata_pt); i++) {
|
||||
r = ata_pt[i].fn(hPhysical, &Command, idd, sizeof(IDENTIFY_DEVICE_DATA), SPT_TIMEOUT_VALUE);
|
||||
if (r == SPT_SUCCESS) {
|
||||
uprintf("Success using %s\n", pt[i].type);
|
||||
uprintf("Success using %s\n", ata_pt[i].type);
|
||||
if (idd->CommandSetSupport.SmartCommands) {
|
||||
DumpBufferHex(idd, sizeof(IDENTIFY_DEVICE_DATA));
|
||||
uprintf("SMART support detected!\n");
|
||||
|
@ -347,9 +347,9 @@ BOOL Identify(HANDLE hPhysical)
|
|||
}
|
||||
break;
|
||||
}
|
||||
uprintf("No joy with: %s (%s)\n", pt[i].type, SptStrerr(r));
|
||||
uprintf("No joy with: %s (%s)\n", ata_pt[i].type, SptStrerr(r));
|
||||
}
|
||||
if (i >= ARRAYSIZE(pt))
|
||||
if (i >= ARRAYSIZE(ata_pt))
|
||||
uprintf("NO ATA FOR YOU!\n");
|
||||
|
||||
_mm_free(idd);
|
||||
|
|
22
src/stdfn.c
22
src/stdfn.c
|
@ -370,6 +370,18 @@ int32_t StrArrayAdd(StrArray* arr, const char* str, BOOL duplicate)
|
|||
return arr->Index++;
|
||||
}
|
||||
|
||||
int32_t StrArrayFind(StrArray* arr, const char* str)
|
||||
{
|
||||
size_t i;
|
||||
if ((str == NULL) || (arr == NULL) || (arr->String == NULL))
|
||||
return -1;
|
||||
for (i = 0; i<arr->Index; i++) {
|
||||
if (strcmp(arr->String[i], str) == 0)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void StrArrayClear(StrArray* arr)
|
||||
{
|
||||
size_t i;
|
||||
|
@ -628,19 +640,23 @@ static BOOL CALLBACK EnumFontFamExProc(const LOGFONTA *lpelfe,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL IsFontAvailable(const char* font_name) {
|
||||
BOOL IsFontAvailable(const char* font_name)
|
||||
{
|
||||
BOOL r;
|
||||
LOGFONTA lf = { 0 };
|
||||
HDC hDC = GetDC(hMainDialog);
|
||||
|
||||
if (font_name == NULL) {
|
||||
ReleaseDC(hMainDialog, hDC);
|
||||
safe_release_dc(hMainDialog, hDC);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
lf.lfCharSet = DEFAULT_CHARSET;
|
||||
safe_strcpy(lf.lfFaceName, LF_FACESIZE, font_name);
|
||||
|
||||
return EnumFontFamiliesExA(hDC, &lf, EnumFontFamExProc, 0, 0);
|
||||
r = EnumFontFamiliesExA(hDC, &lf, EnumFontFamExProc, 0, 0);
|
||||
safe_release_dc(hMainDialog, hDC);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
19
src/stdlg.c
19
src/stdlg.c
|
@ -409,16 +409,15 @@ void CreateStatusBar(void)
|
|||
height = rect.bottom;
|
||||
|
||||
// Set the font we'll use to display the '#' sign in the toolbar button
|
||||
hFont = CreateFontA(-MulDiv(10, GetDeviceCaps(GetDC(hMainDialog), LOGPIXELSY), 72),
|
||||
hDC = GetDC(hMainDialog);
|
||||
hFont = CreateFontA(-MulDiv(10, GetDeviceCaps(hDC, LOGPIXELSY), 72),
|
||||
0, 0, 0, FW_MEDIUM, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
|
||||
0, 0, PROOF_QUALITY, 0, "Segoe UI");
|
||||
|
||||
// Find the width of our hash sign
|
||||
hDC = GetDC(hMainDialog);
|
||||
SelectObject(hDC, hFont);
|
||||
GetTextExtentPoint32W(hDC, L"#", 1, &sz);
|
||||
if (hDC != NULL)
|
||||
ReleaseDC(hMainDialog, hDC);
|
||||
safe_release_dc(hMainDialog, hDC);
|
||||
|
||||
// Create 3 status areas
|
||||
GetClientRect(hMainDialog, &rect);
|
||||
|
@ -879,8 +878,7 @@ INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARA
|
|||
dh = rect.bottom - rect.top;
|
||||
DrawTextU(hDC, szMessageText, -1, &rect, DT_CALCRECT | DT_WORDBREAK);
|
||||
dh = rect.bottom - rect.top - dh;
|
||||
if (hDC != NULL)
|
||||
ReleaseDC(hCtrl, hDC);
|
||||
safe_release_dc(hCtrl, hDC);
|
||||
ResizeMoveCtrl(hDlg, hCtrl, 0, 0, 0, dh, 1.0f);
|
||||
for (i = 0; i < nDialogItems; i++)
|
||||
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SELECTION_CHOICE1 + i), 0, dh, 0, 0, 1.0f);
|
||||
|
@ -1012,8 +1010,7 @@ INT_PTR CALLBACK ListCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa
|
|||
dh = rect.bottom - rect.top;
|
||||
DrawTextU(hDC, szMessageText, -1, &rect, DT_CALCRECT | DT_WORDBREAK);
|
||||
dh = rect.bottom - rect.top - dh;
|
||||
if (hDC != NULL)
|
||||
ReleaseDC(hCtrl, hDC);
|
||||
safe_release_dc(hCtrl, hDC);
|
||||
ResizeMoveCtrl(hDlg, hCtrl, 0, 0, 0, dh, 1.0f);
|
||||
for (i = 0; i < nDialogItems; i++)
|
||||
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_LIST_ITEM1 + i), 0, dh, 0, 0, 1.0f);
|
||||
|
@ -1237,8 +1234,7 @@ LONG GetEntryWidth(HWND hDropDown, const char *entry)
|
|||
if (hFont != NULL)
|
||||
SelectObject(hDC, hDefFont);
|
||||
|
||||
if (hDC != NULL)
|
||||
ReleaseDC(hDropDown, hDC);
|
||||
safe_release_dc(hDropDown, hDC);
|
||||
return size.cx;
|
||||
}
|
||||
|
||||
|
@ -1669,8 +1665,7 @@ SIZE GetTextSize(HWND hCtrl)
|
|||
GetTextExtentPoint32W(hDC, wstr, len, &sz);
|
||||
out:
|
||||
safe_free(wstr);
|
||||
if (hDC != NULL)
|
||||
ReleaseDC(hCtrl, hDC);
|
||||
safe_release_dc(hCtrl, hDC);
|
||||
return sz;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
*
|
||||
* Copyright 2003 Lars Munch Christensen - All Rights Reserved
|
||||
* Copyright 1998-2008 H. Peter Anvin - All Rights Reserved
|
||||
* Copyright 2012-2016 Pete Batard
|
||||
* Copyright 2012-2018 Pete Batard
|
||||
*
|
||||
* Based on the Linux installer program for SYSLINUX by H. Peter Anvin
|
||||
*
|
||||
|
@ -106,16 +106,15 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int fs_type)
|
|||
const char* mboot_c32 = "mboot.c32";
|
||||
char path[MAX_PATH], tmp[64];
|
||||
const char *errmsg;
|
||||
struct libfat_filesystem *fs;
|
||||
struct libfat_filesystem *lf_fs;
|
||||
libfat_sector_t s, *secp;
|
||||
libfat_sector_t *sectors = NULL;
|
||||
int ldlinux_sectors;
|
||||
uint32_t ldlinux_cluster;
|
||||
int i, nsectors, sl_fs_stype;
|
||||
int bt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType));
|
||||
BOOL use_v5 = (bt == BT_SYSLINUX_V6) || ((bt == BT_ISO) && (SL_MAJOR(img_report.sl_version) >= 5));
|
||||
BOOL use_v5 = (bt == BT_SYSLINUX_V6) || ((bt == BT_IMAGE) && (SL_MAJOR(img_report.sl_version) >= 5));
|
||||
|
||||
PrintInfoDebug(0, MSG_234, (bt == BT_ISO)?img_report.sl_version_str:embedded_sl_version_str[use_v5?1:0]);
|
||||
PrintInfoDebug(0, MSG_234, (bt == BT_IMAGE)?img_report.sl_version_str:embedded_sl_version_str[use_v5?1:0]);
|
||||
|
||||
/* 4K sector size workaround */
|
||||
SECTOR_SHIFT = 0;
|
||||
|
@ -219,7 +218,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int fs_type)
|
|||
}
|
||||
|
||||
uprintf("Successfully wrote '%s'", &path[3]);
|
||||
if (bt != BT_ISO)
|
||||
if (bt != BT_IMAGE)
|
||||
UpdateProgress(OP_DOS, -1.0f);
|
||||
|
||||
/* Now flush the media */
|
||||
|
@ -266,21 +265,21 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int fs_type)
|
|||
case FS_FAT16:
|
||||
case FS_FAT32:
|
||||
case FS_EXFAT:
|
||||
fs = libfat_open(libfat_readfile, (intptr_t) d_handle);
|
||||
if (fs == NULL) {
|
||||
lf_fs = libfat_open(libfat_readfile, (intptr_t) d_handle);
|
||||
if (lf_fs == NULL) {
|
||||
uprintf("Syslinux FAT access error");
|
||||
goto out;
|
||||
}
|
||||
ldlinux_cluster = libfat_searchdir(fs, 0, "LDLINUX SYS", NULL);
|
||||
ldlinux_cluster = libfat_searchdir(lf_fs, 0, "LDLINUX SYS", NULL);
|
||||
secp = sectors;
|
||||
nsectors = 0;
|
||||
s = libfat_clustertosector(fs, ldlinux_cluster);
|
||||
s = libfat_clustertosector(lf_fs, ldlinux_cluster);
|
||||
while (s && nsectors < ldlinux_sectors) {
|
||||
*secp++ = s;
|
||||
nsectors++;
|
||||
s = libfat_nextsector(fs, s);
|
||||
s = libfat_nextsector(lf_fs, s);
|
||||
}
|
||||
libfat_close(fs);
|
||||
libfat_close(lf_fs);
|
||||
break;
|
||||
default:
|
||||
uprintf("Unsupported Syslinux filesystem");
|
||||
|
@ -380,7 +379,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int fs_type)
|
|||
fclose(fd);
|
||||
}
|
||||
|
||||
if (bt != BT_ISO)
|
||||
if (bt != BT_IMAGE)
|
||||
UpdateProgress(OP_DOS, -1.0f);
|
||||
|
||||
r = TRUE;
|
||||
|
|
Loading…
Reference in New Issue