mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[ui] add advanced mode
* Adds "bare" Syslinux, Rufus MBR and disabling of fake USB detection options
This commit is contained in:
		
							parent
							
								
									cbff178717
								
							
						
					
					
						commit
						bf2cb0bd88
					
				
					 12 changed files with 263 additions and 117 deletions
				
			
		
							
								
								
									
										
											BIN
										
									
								
								res/down.ico
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								res/down.ico
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.1 KiB | 
|  | @ -7,7 +7,7 @@ the user for boot selection, when a second bootable device (typically bootable | ||||||
| fixed HDD) is reported by the BIOS at 0x81. | fixed HDD) is reported by the BIOS at 0x81. | ||||||
| 
 | 
 | ||||||
| This aims at mimicking the Microsoft Windows optical installation media feature, | This aims at mimicking the Microsoft Windows optical installation media feature, | ||||||
| which may be necessary on for WinPE 2.x or earlier based installations. | which may be necessary on for WinPE based installations. | ||||||
| 
 | 
 | ||||||
| This MBR will also masquerade a bootable USB drive booted as 0x80 by the BIOS to | This MBR will also masquerade a bootable USB drive booted as 0x80 by the BIOS to | ||||||
| a different ID according to the one found in its partition table entry. Eg. if | a different ID according to the one found in its partition table entry. Eg. if | ||||||
|  |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								res/up.ico
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								res/up.ico
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.1 KiB | 
|  | @ -191,7 +191,9 @@ | ||||||
|     <Manifest Include="..\common_controls_and_elevation.manifest" /> |     <Manifest Include="..\common_controls_and_elevation.manifest" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|  |     <None Include="..\..\res\down.ico" /> | ||||||
|     <None Include="..\..\res\rufus.ico" /> |     <None Include="..\..\res\rufus.ico" /> | ||||||
|  |     <None Include="..\..\res\up.ico" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ResourceCompile Include="..\rufus.rc" /> |     <ResourceCompile Include="..\rufus.rc" /> | ||||||
|  |  | ||||||
|  | @ -100,6 +100,12 @@ | ||||||
|     <None Include="..\..\res\rufus.ico"> |     <None Include="..\..\res\rufus.ico"> | ||||||
|       <Filter>Resource Files</Filter> |       <Filter>Resource Files</Filter> | ||||||
|     </None> |     </None> | ||||||
|  |     <None Include="..\..\res\up.ico"> | ||||||
|  |       <Filter>Resource Files</Filter> | ||||||
|  |     </None> | ||||||
|  |     <None Include="..\..\res\down.ico"> | ||||||
|  |       <Filter>Resource Files</Filter> | ||||||
|  |     </None> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <Manifest Include="..\common_controls_and_elevation.manifest"> |     <Manifest Include="..\common_controls_and_elevation.manifest"> | ||||||
|  |  | ||||||
|  | @ -477,11 +477,13 @@ static unsigned int test_rw(HANDLE hDrive, blk_t last_block, size_t block_size, | ||||||
| 			} | 			} | ||||||
| 			if (currently_testing + tryout > last_block) | 			if (currently_testing + tryout > last_block) | ||||||
| 				tryout = last_block - currently_testing; | 				tryout = last_block - currently_testing; | ||||||
| 			/* Add the block number at a fixed (random) offset during each pass to
 | 			if (detect_fakes) { | ||||||
| 			   allow for the detection of 'fake' media (eg. 2GB USB masquerading as 16GB) */ | 				/* Add the block number at a fixed (random) offset during each pass to
 | ||||||
| 			for (i=0; i<(int)blocks_at_once; i++) { | 				   allow for the detection of 'fake' media (eg. 2GB USB masquerading as 16GB) */ | ||||||
| 				blk_id = (blk_t*)(intptr_t)(buffer + id_offset+ i*block_size); | 				for (i=0; i<(int)blocks_at_once; i++) { | ||||||
| 				*blk_id = (blk_t)(currently_testing + i); | 					blk_id = (blk_t*)(intptr_t)(buffer + id_offset+ i*block_size); | ||||||
|  | 					*blk_id = (blk_t)(currently_testing + i); | ||||||
|  | 				} | ||||||
| 			} | 			} | ||||||
| 			got = do_write(hDrive, buffer, tryout, block_size, currently_testing); | 			got = do_write(hDrive, buffer, tryout, block_size, currently_testing); | ||||||
| 			if (v_flag > 1) | 			if (v_flag > 1) | ||||||
|  | @ -523,9 +525,11 @@ static unsigned int test_rw(HANDLE hDrive, blk_t last_block, size_t block_size, | ||||||
| 			} | 			} | ||||||
| 			if (currently_testing + tryout > last_block) | 			if (currently_testing + tryout > last_block) | ||||||
| 				tryout = last_block - currently_testing; | 				tryout = last_block - currently_testing; | ||||||
| 			for (i=0; i<(int)blocks_at_once; i++) { | 			if (detect_fakes) { | ||||||
| 				blk_id = (blk_t*)(intptr_t)(buffer + id_offset+ i*block_size); | 				for (i=0; i<(int)blocks_at_once; i++) { | ||||||
| 				*blk_id = (blk_t)(currently_testing + i); | 					blk_id = (blk_t*)(intptr_t)(buffer + id_offset+ i*block_size); | ||||||
|  | 					*blk_id = (blk_t)(currently_testing + i); | ||||||
|  | 				} | ||||||
| 			} | 			} | ||||||
| 			got = do_read(hDrive, read_buffer, tryout, block_size, | 			got = do_read(hDrive, read_buffer, tryout, block_size, | ||||||
| 				       currently_testing); | 				       currently_testing); | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								src/format.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								src/format.c
									
										
									
									
									
								
							|  | @ -374,7 +374,6 @@ static BOOL AnalyzePBR(HANDLE hLogicalVolume) | ||||||
| 	fake_fd._ptr = (char*)hLogicalVolume; | 	fake_fd._ptr = (char*)hLogicalVolume; | ||||||
| 	fake_fd._bufsiz = SelectedDrive.Geometry.BytesPerSector; | 	fake_fd._bufsiz = SelectedDrive.Geometry.BytesPerSector; | ||||||
| 
 | 
 | ||||||
| 	// TODO: Add/Eliminate FAT12?
 |  | ||||||
| 	if (!is_br(&fake_fd)) { | 	if (!is_br(&fake_fd)) { | ||||||
| 		uprintf("Volume does not have an x86 partition boot record\n"); | 		uprintf("Volume does not have an x86 partition boot record\n"); | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
|  | @ -416,6 +415,7 @@ BOOL WriteRufusMBR(FILE *fp) | ||||||
| 	unsigned char aucRef[] = {0x55, 0xAA}; | 	unsigned char aucRef[] = {0x55, 0xAA}; | ||||||
| 	unsigned char* rufus_mbr; | 	unsigned char* rufus_mbr; | ||||||
| 
 | 
 | ||||||
|  | 	// TODO: will we need to edit the disk ID according to UI sel in the MBR as well?
 | ||||||
| 	res = FindResource(hMainInstance, MAKEINTRESOURCE(IDR_BR_MBR_BIN), RT_RCDATA); | 	res = FindResource(hMainInstance, MAKEINTRESOURCE(IDR_BR_MBR_BIN), RT_RCDATA); | ||||||
| 	if (res == NULL) { | 	if (res == NULL) { | ||||||
| 		uprintf("Unable to locate mbr.bin resource: %s\n", WindowsErrorString()); | 		uprintf("Unable to locate mbr.bin resource: %s\n", WindowsErrorString()); | ||||||
|  | @ -482,8 +482,8 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive) | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
| 	if (IsChecked(IDC_DOS)) { | 	if (IsChecked(IDC_DOS)) { | ||||||
| 		// Set first partition bootable - masquerade as 0x81 for non /minint WinPE 
 | 		// Set first partition bootable - masquerade as per the DiskID selected
 | ||||||
| 		buf[0x1be] = ((!IS_WINPE(iso_report.winpe)) || ((IS_WINPE(iso_report.winpe) && iso_report.uses_minint)))?0x80:0x81; | 		buf[0x1be] = (IsChecked(IDC_RUFUS_MBR))?(BYTE)ComboBox_GetItemData(hDiskID, ComboBox_GetCurSel(hDiskID)):0x80; | ||||||
| 		uprintf("Set bootable USB partition as 0x%02X\n", buf[0x1be]); | 		uprintf("Set bootable USB partition as 0x%02X\n", buf[0x1be]); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -497,7 +497,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive) | ||||||
| 	fake_fd._bufsiz = SelectedDrive.Geometry.BytesPerSector; | 	fake_fd._bufsiz = SelectedDrive.Geometry.BytesPerSector; | ||||||
| 	fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); | 	fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); | ||||||
| 	dt = (int)ComboBox_GetItemData(hDOSType, ComboBox_GetCurSel(hDOSType)); | 	dt = (int)ComboBox_GetItemData(hDOSType, ComboBox_GetCurSel(hDOSType)); | ||||||
| 	if ((dt == DT_ISO) && ((fs == FS_FAT16) || (fs == FS_FAT32))) { | 	if ( (dt == DT_SYSLINUX) || ((dt == DT_ISO) && ((fs == FS_FAT16) || (fs == FS_FAT32))) ) { | ||||||
| 		r = write_syslinux_mbr(&fake_fd); | 		r = write_syslinux_mbr(&fake_fd); | ||||||
| 	} else { | 	} else { | ||||||
| 		if ((IS_WINPE(iso_report.winpe) && !iso_report.uses_minint) || (IsChecked(IDC_RUFUS_MBR))) { | 		if ((IS_WINPE(iso_report.winpe) && !iso_report.uses_minint) || (IsChecked(IDC_RUFUS_MBR))) { | ||||||
|  | @ -591,14 +591,16 @@ static BOOL SetupWinPE(char drive_letter) | ||||||
| 	const char* patch_str_rep[] = { "\\i386\\txtsetup.sif", "\\i386\\system32\\" }; | 	const char* patch_str_rep[] = { "\\i386\\txtsetup.sif", "\\i386\\system32\\" }; | ||||||
| 	const char *win_nt_bt_org = "$win_nt$.~bt", *win_nt_bt_rep = "i386"; | 	const char *win_nt_bt_org = "$win_nt$.~bt", *win_nt_bt_rep = "i386"; | ||||||
| 	const char *rdisk_zero = "rdisk(0)"; | 	const char *rdisk_zero = "rdisk(0)"; | ||||||
| 	// TODO: allow other values than harddisk 1, as per user choice?
 | 	char setupsrcdev[64]; | ||||||
| 	char* setupsrcdev = "SetupSourceDevice = \"\\device\\harddisk1\\partition1\""; |  | ||||||
| 	HANDLE handle = INVALID_HANDLE_VALUE; | 	HANDLE handle = INVALID_HANDLE_VALUE; | ||||||
| 	DWORD i, j, size, rw_size, index = 0; | 	DWORD i, j, size, rw_size, index = 0; | ||||||
| 	BOOL r = FALSE; | 	BOOL r = FALSE; | ||||||
| 	char* buf = NULL; | 	char* buf = NULL; | ||||||
| 
 | 
 | ||||||
| 	index = ((iso_report.winpe&WINPE_I386) == WINPE_I386)?0:1; | 	index = ((iso_report.winpe&WINPE_I386) == WINPE_I386)?0:1; | ||||||
|  | 	// Allow other values than harddisk 1, as per user choice for disk ID
 | ||||||
|  | 	safe_sprintf(setupsrcdev, sizeof(setupsrcdev), | ||||||
|  | 		"SetupSourceDevice = \"\\device\\harddisk%d\\partition1\"", ComboBox_GetCurSel(hDiskID)); | ||||||
| 	// Copy of ntdetect.com in root
 | 	// Copy of ntdetect.com in root
 | ||||||
| 	safe_sprintf(src, sizeof(src), "%c:\\%s\\ntdetect.com", drive_letter, basedir[index]); | 	safe_sprintf(src, sizeof(src), "%c:\\%s\\ntdetect.com", drive_letter, basedir[index]); | ||||||
| 	safe_sprintf(dst, sizeof(dst), "%c:\\ntdetect.com", drive_letter); | 	safe_sprintf(dst, sizeof(dst), "%c:\\ntdetect.com", drive_letter); | ||||||
|  | @ -657,7 +659,7 @@ static BOOL SetupWinPE(char drive_letter) | ||||||
| 	uprintf("Patching file %s\n", dst); | 	uprintf("Patching file %s\n", dst); | ||||||
| 	// Remove CRC check for 32 bit part of setupldr.bin from Win2k3
 | 	// Remove CRC check for 32 bit part of setupldr.bin from Win2k3
 | ||||||
| 	if ((size > 0x2061) && (buf[0x2060] == 0x74) && (buf[0x2061] == 0x03)) { | 	if ((size > 0x2061) && (buf[0x2060] == 0x74) && (buf[0x2061] == 0x03)) { | ||||||
| 		// TODO: amend this is not all Win2k3 setupldr.bin use the same header
 | 		// TODO: amend this if not all Win2k3 setupldr.bin's use the same header
 | ||||||
| 		buf[0x2060] = 0xeb; | 		buf[0x2060] = 0xeb; | ||||||
| 		buf[0x2061] = 0x1a; | 		buf[0x2061] = 0x1a; | ||||||
| 		uprintf("  0x00002060: 0x74 0x03 -> 0xEB 0x1A (disable Win2k3 CRC check)\n"); | 		uprintf("  0x00002060: 0x74 0x03 -> 0xEB 0x1A (disable Win2k3 CRC check)\n"); | ||||||
|  | @ -675,11 +677,11 @@ static BOOL SetupWinPE(char drive_letter) | ||||||
| 	if (!iso_report.uses_minint) { | 	if (!iso_report.uses_minint) { | ||||||
| 		// Additional setupldr.bin/bootmgr patching
 | 		// Additional setupldr.bin/bootmgr patching
 | ||||||
| 		for (i=0; i<size-32; i++) { | 		for (i=0; i<size-32; i++) { | ||||||
| 			// rdisk(0) -> rdisk(1) disk masquerading
 | 			// rdisk(0) -> rdisk(#) disk masquerading
 | ||||||
| 			// TODO: only the first one seems to be needed
 | 			// TODO: only the first one seems to be needed
 | ||||||
| 			if (safe_strnicmp(&buf[i], rdisk_zero, strlen(rdisk_zero)-1) == 0) { | 			if (safe_strnicmp(&buf[i], rdisk_zero, strlen(rdisk_zero)-1) == 0) { | ||||||
| 				buf[i+6] = '1'; | 				buf[i+6] = 0x20 + ComboBox_GetCurSel(hDiskID); | ||||||
| 				uprintf("  0x%08X: '%s' -> 'rdisk(1)'\n", i, rdisk_zero); | 				uprintf("  0x%08X: '%s' -> 'rdisk(%c)'\n", i, rdisk_zero, buf[i+6]); | ||||||
| 			} | 			} | ||||||
| 			// $WIN_NT$_~BT -> i386
 | 			// $WIN_NT$_~BT -> i386
 | ||||||
| 			if (safe_strnicmp(&buf[i], win_nt_bt_org, strlen(win_nt_bt_org)-1) == 0) { | 			if (safe_strnicmp(&buf[i], win_nt_bt_org, strlen(win_nt_bt_org)-1) == 0) { | ||||||
|  | @ -888,7 +890,7 @@ DWORD WINAPI FormatThread(LPVOID param) | ||||||
| 			} | 			} | ||||||
| 			// We must close and unlock the volume to write files to it
 | 			// We must close and unlock the volume to write files to it
 | ||||||
| 			safe_unlockclose(hLogicalVolume); | 			safe_unlockclose(hLogicalVolume); | ||||||
| 		} else if ((dt == DT_ISO) && ((fs == FS_FAT16) || (fs == FS_FAT32))) { | 		} else if ( (dt == DT_SYSLINUX) || ((dt == DT_ISO) && ((fs == FS_FAT16) || (fs == FS_FAT32))) ) { | ||||||
| 			PrintStatus(0, TRUE, "Installing Syslinux..."); | 			PrintStatus(0, TRUE, "Installing Syslinux..."); | ||||||
| 			if (!InstallSyslinux(num, drive_name)) { | 			if (!InstallSyslinux(num, drive_name)) { | ||||||
| 				FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE; | 				FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE; | ||||||
|  |  | ||||||
|  | @ -9,6 +9,8 @@ | ||||||
| #define IDD_LICENSE                     105 | #define IDD_LICENSE                     105 | ||||||
| #define IDD_ISO_EXTRACT                 106 | #define IDD_ISO_EXTRACT                 106 | ||||||
| #define IDS_VERSION                     107 | #define IDS_VERSION                     107 | ||||||
|  | #define IDI_UP                          108 | ||||||
|  | #define IDI_DOWN                        109 | ||||||
| #define IDR_BR_MBR_BIN                  200 | #define IDR_BR_MBR_BIN                  200 | ||||||
| #define IDR_FD_COMMAND_COM              300 | #define IDR_FD_COMMAND_COM              300 | ||||||
| #define IDR_FD_KERNEL_SYS               301 | #define IDR_FD_KERNEL_SYS               301 | ||||||
|  | @ -58,9 +60,11 @@ | ||||||
| #define IDC_SELECT_ISO                  1016 | #define IDC_SELECT_ISO                  1016 | ||||||
| #define IDC_SET_ICON                    1017 | #define IDC_SET_ICON                    1017 | ||||||
| #define IDC_RUFUS_MBR                   1018 | #define IDC_RUFUS_MBR                   1018 | ||||||
| #define IDC_ISO_PROGRESS                1020 | #define IDC_ISO_PROGRESS                1019 | ||||||
| #define IDC_ISO_FILENAME                1021 | #define IDC_ISO_FILENAME                1020 | ||||||
| #define IDC_ISO_ABORT                   1022 | #define IDC_ISO_ABORT                   1021 | ||||||
|  | #define IDC_DISK_ID                     1022 | ||||||
|  | #define IDC_EXTRA_PARTITION             1023 | ||||||
| #define IDC_ABOUT_LICENSE               1030 | #define IDC_ABOUT_LICENSE               1030 | ||||||
| #define IDC_ABOUT_ICON                  1031 | #define IDC_ABOUT_ICON                  1031 | ||||||
| #define IDC_RUFUS_BOLD                  1032 | #define IDC_RUFUS_BOLD                  1032 | ||||||
|  | @ -71,15 +75,17 @@ | ||||||
| #define IDC_NOTIFICATION_ICON           1040 | #define IDC_NOTIFICATION_ICON           1040 | ||||||
| #define IDC_NOTIFICATION_TEXT           1041 | #define IDC_NOTIFICATION_TEXT           1041 | ||||||
| #define IDC_NOTIFICATION_LINE           1042 | #define IDC_NOTIFICATION_LINE           1042 | ||||||
|  | #define IDC_ADVANCED                    1043 | ||||||
|  | #define IDC_ADVANCED_GROUP              1044 | ||||||
| 
 | 
 | ||||||
| // Next default values for new objects
 | // Next default values for new objects
 | ||||||
| // 
 | // 
 | ||||||
| #ifdef APSTUDIO_INVOKED | #ifdef APSTUDIO_INVOKED | ||||||
| #ifndef APSTUDIO_READONLY_SYMBOLS | #ifndef APSTUDIO_READONLY_SYMBOLS | ||||||
| #define _APS_NO_MFC                     1 | #define _APS_NO_MFC                     1 | ||||||
| #define _APS_NEXT_RESOURCE_VALUE        108 | #define _APS_NEXT_RESOURCE_VALUE        110 | ||||||
| #define _APS_NEXT_COMMAND_VALUE         40001 | #define _APS_NEXT_COMMAND_VALUE         40001 | ||||||
| #define _APS_NEXT_CONTROL_VALUE         1043 | #define _APS_NEXT_CONTROL_VALUE         1045 | ||||||
| #define _APS_NEXT_SYMED_VALUE           101 | #define _APS_NEXT_SYMED_VALUE           101 | ||||||
| #endif | #endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
							
								
								
									
										238
									
								
								src/rufus.c
									
										
									
									
									
								
							
							
						
						
									
										238
									
								
								src/rufus.c
									
										
									
									
									
								
							|  | @ -52,6 +52,33 @@ | ||||||
| #ifndef PBST_PAUSED | #ifndef PBST_PAUSED | ||||||
| #define PBST_PAUSED 3 | #define PBST_PAUSED 3 | ||||||
| #endif | #endif | ||||||
|  | #ifndef BUTTON_IMAGELIST_ALIGN_CENTER | ||||||
|  | #define BUTTON_IMAGELIST_ALIGN_CENTER 4 | ||||||
|  | #endif | ||||||
|  | #ifndef BCM_SETIMAGELIST | ||||||
|  | #define BCM_SETIMAGELIST 0x1602 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | // MinGW fails to link those
 | ||||||
|  | typedef HIMAGELIST (WINAPI *ImageList_Create_t)( | ||||||
|  | 	int cx, | ||||||
|  | 	int cy, | ||||||
|  | 	UINT flags, | ||||||
|  | 	int cInitial, | ||||||
|  | 	int cGrow | ||||||
|  | ); | ||||||
|  | ImageList_Create_t pImageList_Create = NULL; | ||||||
|  | typedef int (WINAPI *ImageList_ReplaceIcon_t)( | ||||||
|  | 	HIMAGELIST himl, | ||||||
|  | 	int i, | ||||||
|  | 	HICON hicon | ||||||
|  | ); | ||||||
|  | ImageList_ReplaceIcon_t pImageList_ReplaceIcon = NULL; | ||||||
|  | struct { | ||||||
|  | 	HIMAGELIST himl; | ||||||
|  | 	RECT margin; | ||||||
|  | 	UINT uAlign; | ||||||
|  | } bi_iso = {0}, bi_up = {0}, bi_down = {0};	// BUTTON_IMAGELIST
 | ||||||
| 
 | 
 | ||||||
| static const char* FileSystemLabel[FS_MAX] = { "FAT", "FAT32", "NTFS", "exFAT" }; | static const char* FileSystemLabel[FS_MAX] = { "FAT", "FAT32", "NTFS", "exFAT" }; | ||||||
| // Don't ask me - just following the MS standard here
 | // Don't ask me - just following the MS standard here
 | ||||||
|  | @ -61,7 +88,7 @@ static const char* ClusterSizeLabel[] = { "512 bytes", "1024 bytes","2048 bytes" | ||||||
| static BOOL existing_key = FALSE;	// For LGP set/restore
 | static BOOL existing_key = FALSE;	// For LGP set/restore
 | ||||||
| static BOOL iso_size_check = TRUE; | static BOOL iso_size_check = TRUE; | ||||||
| static int selection_default; | static int selection_default; | ||||||
| BOOL enable_fixed_disks = FALSE; | BOOL enable_fixed_disks = FALSE, advanced_mode = TRUE; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Globals |  * Globals | ||||||
|  | @ -73,15 +100,15 @@ char* iso_path = NULL; | ||||||
| float fScale = 1.0f; | float fScale = 1.0f; | ||||||
| int default_fs; | int default_fs; | ||||||
| HWND hDeviceList, hCapacity, hFileSystem, hClusterSize, hLabel, hDOSType, hNBPasses; | HWND hDeviceList, hCapacity, hFileSystem, hClusterSize, hLabel, hDOSType, hNBPasses; | ||||||
| HWND hISOProgressDlg = NULL, hISOProgressBar, hISOFileName; | HWND hISOProgressDlg = NULL, hISOProgressBar, hISOFileName, hDiskID; | ||||||
| BOOL use_own_vesamenu = FALSE; | BOOL use_own_vesamenu = FALSE, detect_fakes = TRUE; | ||||||
| int rufus_version[4]; | int rufus_version[4]; | ||||||
| extern char szStatusMessage[256]; | extern char szStatusMessage[256]; | ||||||
| 
 | 
 | ||||||
| static HANDLE format_thid = NULL; | static HANDLE format_thid = NULL; | ||||||
| static HWND hDeviceTooltip = NULL, hFSTooltip = NULL, hProgress = NULL; | static HWND hDeviceTooltip = NULL, hFSTooltip = NULL, hProgress = NULL; | ||||||
| static HWND hDOS = NULL, hSelectISO = NULL, hISOToolTip = NULL, hPassesToolTip = NULL; | static HWND hDOS = NULL, hSelectISO = NULL, hISOToolTip = NULL, hPassesToolTip = NULL; | ||||||
| static HICON hIconDisc; | static HICON hIconDisc, hIconDown, hIconUp; | ||||||
| static StrArray DriveID, DriveLabel; | static StrArray DriveID, DriveLabel; | ||||||
| static char szTimer[12] = "00:00:00"; | static char szTimer[12] = "00:00:00"; | ||||||
| static unsigned int timer; | static unsigned int timer; | ||||||
|  | @ -132,7 +159,6 @@ static BOOL DefineClusterSizes(void) | ||||||
| 	default_fs = FS_UNKNOWN; | 	default_fs = FS_UNKNOWN; | ||||||
| 	memset(&SelectedDrive.ClusterSize, 0, sizeof(SelectedDrive.ClusterSize)); | 	memset(&SelectedDrive.ClusterSize, 0, sizeof(SelectedDrive.ClusterSize)); | ||||||
| 	if (SelectedDrive.DiskSize < 8*MB) { | 	if (SelectedDrive.DiskSize < 8*MB) { | ||||||
| 		// TODO: muck with FAT12 and Small FAT16 like Microsoft does to support small drives?
 |  | ||||||
| 		uprintf("This application does not support volumes smaller than 8 MB\n"); | 		uprintf("This application does not support volumes smaller than 8 MB\n"); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
|  | @ -439,6 +465,24 @@ static void SetFSFromISO(void) | ||||||
| 		ComboBox_GetCurSel(hFileSystem)); | 		ComboBox_GetCurSel(hFileSystem)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void SetMBRProps(void) | ||||||
|  | { | ||||||
|  | 	int fs, dt; | ||||||
|  | 	BOOL needs_masquerading = (iso_report.has_bootmgr) || (IS_WINPE(iso_report.winpe) && (!iso_report.uses_minint)); | ||||||
|  | 
 | ||||||
|  | 	fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); | ||||||
|  | 	dt = (int)ComboBox_GetItemData(hDOSType, ComboBox_GetCurSel(hDOSType)); | ||||||
|  | 
 | ||||||
|  | 	if ((iso_path == NULL) || (dt != DT_ISO) || (fs != FS_NTFS)) { | ||||||
|  | 		CheckDlgButton(hMainDialog, IDC_RUFUS_MBR, BST_UNCHECKED); | ||||||
|  | 		IGNORE_RETVAL(ComboBox_SetCurSel(hDiskID, 0)); | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	CheckDlgButton(hMainDialog, IDC_RUFUS_MBR, needs_masquerading?BST_CHECKED:BST_UNCHECKED); | ||||||
|  | 	IGNORE_RETVAL(ComboBox_SetCurSel(hDiskID, needs_masquerading?1:0)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Populate the UI properties |  * Populate the UI properties | ||||||
|  */ |  */ | ||||||
|  | @ -461,8 +505,8 @@ static BOOL PopulateProperties(int ComboIndex) | ||||||
| 	hFSTooltip = NULL; | 	hFSTooltip = NULL; | ||||||
| 	memset(&SelectedDrive, 0, sizeof(SelectedDrive)); | 	memset(&SelectedDrive, 0, sizeof(SelectedDrive)); | ||||||
| 
 | 
 | ||||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_DOS), FALSE); | 	EnableWindow(hDOS, FALSE); | ||||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_DOSTYPE), FALSE); | 	EnableWindow(hDOSType, FALSE); | ||||||
| 
 | 
 | ||||||
| 	if (ComboIndex < 0) { | 	if (ComboIndex < 0) { | ||||||
| 		return TRUE; | 		return TRUE; | ||||||
|  | @ -473,8 +517,8 @@ static BOOL PopulateProperties(int ComboIndex) | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 	SetFSFromISO(); | 	SetFSFromISO(); | ||||||
| 	fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); | 	fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); | ||||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_DOS), (fs == FS_FAT16) || (fs == FS_FAT32) || (fs == FS_NTFS)); | 	EnableWindow(hDOS, (fs == FS_FAT16) || (fs == FS_FAT32) || (fs == FS_NTFS)); | ||||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_DOSTYPE), (fs == FS_FAT16) || (fs == FS_FAT32) || (fs == FS_NTFS)); | 	EnableWindow(hDOSType, (fs == FS_FAT16) || (fs == FS_FAT32) || (fs == FS_NTFS)); | ||||||
| 
 | 
 | ||||||
| 	HumanReadableSize = (double)SelectedDrive.DiskSize; | 	HumanReadableSize = (double)SelectedDrive.DiskSize; | ||||||
| 	for (i=0; i<ARRAYSIZE(suffix); i++) { | 	for (i=0; i<ARRAYSIZE(suffix); i++) { | ||||||
|  | @ -959,19 +1003,25 @@ static void EnableControls(BOOL bEnable) | ||||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_QUICKFORMAT), bEnable); | 	EnableWindow(GetDlgItem(hMainDialog, IDC_QUICKFORMAT), bEnable); | ||||||
| 	if (bEnable) { | 	if (bEnable) { | ||||||
| 		fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); | 		fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); | ||||||
| 		EnableWindow(GetDlgItem(hMainDialog, IDC_DOS), (fs == FS_FAT16) || (fs == FS_FAT32) || (fs == FS_NTFS)); | 		EnableWindow(hDOS, (fs == FS_FAT16) || (fs == FS_FAT32) || (fs == FS_NTFS)); | ||||||
| 		EnableWindow(GetDlgItem(hMainDialog, IDC_DOSTYPE), (fs == FS_FAT16) || (fs == FS_FAT32) || (fs == FS_NTFS)); | 		EnableWindow(hDOSType, (fs == FS_FAT16) || (fs == FS_FAT32) || (fs == FS_NTFS)); | ||||||
|  | 		EnableWindow(hDiskID, (fs == FS_FAT16) || (fs == FS_FAT32) || (fs == FS_NTFS)); | ||||||
|  | 		EnableWindow(GetDlgItem(hMainDialog, IDC_RUFUS_MBR), (fs == FS_FAT16) || (fs == FS_FAT32) || (fs == FS_NTFS)); | ||||||
|  | //		EnableWindow(GetDlgItem(hMainDialog, IDC_EXTRA_PARTITION), (fs == FS_FAT16) || (fs == FS_FAT32) || (fs == FS_NTFS));
 | ||||||
| 	} else { | 	} else { | ||||||
| 		EnableWindow(GetDlgItem(hMainDialog, IDC_DOS), FALSE); | 		EnableWindow(hDOS, FALSE); | ||||||
| 		EnableWindow(GetDlgItem(hMainDialog, IDC_DOSTYPE), FALSE); | 		EnableWindow(hDOSType, FALSE); | ||||||
|  | 		EnableWindow(hDiskID, FALSE); | ||||||
|  | 		EnableWindow(GetDlgItem(hMainDialog, IDC_RUFUS_MBR), FALSE); | ||||||
|  | //		EnableWindow(GetDlgItem(hMainDialog, IDC_EXTRA_PARTITION), FALSE);
 | ||||||
| 	} | 	} | ||||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_BADBLOCKS), bEnable); | 	EnableWindow(GetDlgItem(hMainDialog, IDC_BADBLOCKS), bEnable); | ||||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_ABOUT), bEnable); | 	EnableWindow(GetDlgItem(hMainDialog, IDC_ABOUT), bEnable); | ||||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_START), bEnable); | 	EnableWindow(GetDlgItem(hMainDialog, IDC_START), bEnable); | ||||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_SELECT_ISO), bEnable); | 	EnableWindow(hSelectISO, bEnable); | ||||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_NBPASSES), bEnable); | 	EnableWindow(hNBPasses, bEnable); | ||||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_SET_ICON), bEnable); | 	EnableWindow(GetDlgItem(hMainDialog, IDC_SET_ICON), bEnable); | ||||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_RUFUS_MBR), bEnable); | 	EnableWindow(GetDlgItem(hMainDialog, IDC_ADVANCED), bEnable); | ||||||
| 	SetDlgItemTextA(hMainDialog, IDCANCEL, bEnable?"Close":"Cancel"); | 	SetDlgItemTextA(hMainDialog, IDCANCEL, bEnable?"Close":"Cancel"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1077,10 +1127,8 @@ DWORD WINAPI ISOScanThread(LPVOID param) | ||||||
| 			"based on 'bootmgr/WinPE' or 'isolinux'.\n" | 			"based on 'bootmgr/WinPE' or 'isolinux'.\n" | ||||||
| 			"This ISO image doesn't appear to use either...", "Unsupported ISO", MB_OK|MB_ICONINFORMATION); | 			"This ISO image doesn't appear to use either...", "Unsupported ISO", MB_OK|MB_ICONINFORMATION); | ||||||
| 		safe_free(iso_path); | 		safe_free(iso_path); | ||||||
|  | 		SetMBRProps(); | ||||||
| 	} else { | 	} else { | ||||||
| 		EnableWindow(GetDlgItem(hMainDialog, IDC_RUFUS_MBR), (iso_report.has_bootmgr) || (IS_WINPE(iso_report.winpe))); |  | ||||||
| 		CheckDlgButton(hMainDialog, IDC_RUFUS_MBR, |  | ||||||
| 			(((iso_report.winpe&WINPE_I386)==WINPE_I386)&&(!iso_report.uses_minint))?BST_CHECKED:BST_UNCHECKED); |  | ||||||
| 		if (iso_report.has_old_vesamenu) { | 		if (iso_report.has_old_vesamenu) { | ||||||
| 			fd = fopen(vesamenu_filename, "rb"); | 			fd = fopen(vesamenu_filename, "rb"); | ||||||
| 			if (fd != NULL) { | 			if (fd != NULL) { | ||||||
|  | @ -1109,6 +1157,7 @@ DWORD WINAPI ISOScanThread(LPVOID param) | ||||||
| 		// Enable DOS, set DOS Type to ISO (last item) and set FS accordingly
 | 		// Enable DOS, set DOS Type to ISO (last item) and set FS accordingly
 | ||||||
| 		CheckDlgButton(hMainDialog, IDC_DOS, BST_CHECKED); | 		CheckDlgButton(hMainDialog, IDC_DOS, BST_CHECKED); | ||||||
| 		SetFSFromISO(); | 		SetFSFromISO(); | ||||||
|  | 		SetMBRProps(); | ||||||
| 		for (i=(int)safe_strlen(iso_path); (i>0)&&(iso_path[i]!='\\'); i--); | 		for (i=(int)safe_strlen(iso_path); (i>0)&&(iso_path[i]!='\\'); i--); | ||||||
| 		PrintStatus(0, TRUE, "Using ISO: %s\n", &iso_path[i+1]); | 		PrintStatus(0, TRUE, "Using ISO: %s\n", &iso_path[i+1]); | ||||||
| 		// Some Linux distros, such as Arch Linux, require the USB drive to have
 | 		// Some Linux distros, such as Arch Linux, require the USB drive to have
 | ||||||
|  | @ -1127,28 +1176,60 @@ out: | ||||||
| 	ExitThread(0); | 	ExitThread(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | void MoveControl(int nID, float vertical_shift) | ||||||
|  | { | ||||||
|  | 	RECT rect; | ||||||
|  | 	POINT point; | ||||||
|  | 	HWND hControl; | ||||||
|  | 
 | ||||||
|  | 	hControl = GetDlgItem(hMainDialog, nID); | ||||||
|  | 	GetWindowRect(hControl, &rect); | ||||||
|  | 	point.x = rect.left; | ||||||
|  | 	point.y = rect.top; | ||||||
|  | 	ScreenToClient(hMainDialog, &point); | ||||||
|  | 	GetClientRect(hControl, &rect); | ||||||
|  | 	MoveWindow(hControl, point.x, point.y + (int)(fScale*(advanced_mode?vertical_shift:-vertical_shift)), | ||||||
|  | 		(rect.right - rect.left), (rect.bottom - rect.top), TRUE); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Toggle "advanced" mode
 | ||||||
|  | void ToggleAdvanced(void) | ||||||
|  | { | ||||||
|  | 	float dialog_shift = 60.0f; | ||||||
|  | 	RECT rect; | ||||||
|  | 	POINT point; | ||||||
|  | 	int toggle; | ||||||
|  | 
 | ||||||
|  | 	advanced_mode = !advanced_mode; | ||||||
|  | 
 | ||||||
|  | 	// Increase or decrease the Window size
 | ||||||
|  | 	GetWindowRect(hMainDialog, &rect); | ||||||
|  | 	point.x = (rect.right - rect.left); | ||||||
|  | 	point.y = (rect.bottom - rect.top); | ||||||
|  | 	MoveWindow(hMainDialog, rect.left, rect.top, point.x, | ||||||
|  | 		point.y + (int)(fScale*(advanced_mode?dialog_shift:-dialog_shift)), TRUE); | ||||||
|  | 
 | ||||||
|  | 	// Move the status bar up or down
 | ||||||
|  | 	MoveControl(IDC_STATUS, dialog_shift); | ||||||
|  | 	MoveControl(IDC_START, dialog_shift); | ||||||
|  | 	MoveControl(IDC_PROGRESS, dialog_shift); | ||||||
|  | 	MoveControl(IDC_ABOUT, dialog_shift); | ||||||
|  | 	MoveControl(IDCANCEL, dialog_shift); | ||||||
|  | 
 | ||||||
|  | 	// Hide or show the various advanced options
 | ||||||
|  | 	toggle = advanced_mode?SW_SHOW:SW_HIDE; | ||||||
|  | 	ShowWindow(GetDlgItem(hMainDialog, IDC_EXTRA_PARTITION), toggle); | ||||||
|  | 	ShowWindow(GetDlgItem(hMainDialog, IDC_RUFUS_MBR), toggle); | ||||||
|  | 	ShowWindow(GetDlgItem(hMainDialog, IDC_DISK_ID), toggle); | ||||||
|  | 	ShowWindow(GetDlgItem(hMainDialog, IDC_ADVANCED_GROUP), toggle); | ||||||
|  | 
 | ||||||
|  | 	// Toggle the up/down icon
 | ||||||
|  | 	SendMessage(GetDlgItem(hMainDialog, IDC_ADVANCED), BCM_SETIMAGELIST, 0, (LPARAM)(advanced_mode?&bi_up:&bi_down)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void InitDialog(HWND hDlg) | void InitDialog(HWND hDlg) | ||||||
| { | { | ||||||
| 	// MinGW fails to link those
 |  | ||||||
| 	typedef HIMAGELIST (WINAPI *ImageList_Create_t)( |  | ||||||
| 		int cx, |  | ||||||
| 		int cy, |  | ||||||
| 		UINT flags, |  | ||||||
| 		int cInitial, |  | ||||||
| 		int cGrow |  | ||||||
| 	); |  | ||||||
| 	ImageList_Create_t pImageList_Create = NULL; |  | ||||||
| 	typedef int (WINAPI *ImageList_ReplaceIcon_t)( |  | ||||||
| 		HIMAGELIST himl, |  | ||||||
| 		int i, |  | ||||||
| 		HICON hicon |  | ||||||
| 	); |  | ||||||
| 	ImageList_ReplaceIcon_t pImageList_ReplaceIcon = NULL; |  | ||||||
| 	struct { |  | ||||||
| 		HIMAGELIST himl; |  | ||||||
| 		RECT margin; |  | ||||||
| 		UINT uAlign; |  | ||||||
| 	} bi = {0};	// BUTTON_IMAGELIST
 |  | ||||||
| 	HINSTANCE hDllInst; | 	HINSTANCE hDllInst; | ||||||
| 	HDC hDC; | 	HDC hDC; | ||||||
| 	int i, i16; | 	int i, i16; | ||||||
|  | @ -1171,6 +1252,7 @@ void InitDialog(HWND hDlg) | ||||||
| 	hDOSType = GetDlgItem(hDlg, IDC_DOSTYPE); | 	hDOSType = GetDlgItem(hDlg, IDC_DOSTYPE); | ||||||
| 	hSelectISO = GetDlgItem(hDlg, IDC_SELECT_ISO); | 	hSelectISO = GetDlgItem(hDlg, IDC_SELECT_ISO); | ||||||
| 	hNBPasses = GetDlgItem(hDlg, IDC_NBPASSES); | 	hNBPasses = GetDlgItem(hDlg, IDC_NBPASSES); | ||||||
|  | 	hDiskID = GetDlgItem(hDlg, IDC_DISK_ID); | ||||||
| 
 | 
 | ||||||
| 	// High DPI scaling
 | 	// High DPI scaling
 | ||||||
| 	i16 = GetSystemMetrics(SM_CXSMICON); | 	i16 = GetSystemMetrics(SM_CXSMICON); | ||||||
|  | @ -1209,10 +1291,17 @@ void InitDialog(HWND hDlg) | ||||||
| 	// Fill up the DOS type dropdown
 | 	// Fill up the DOS type dropdown
 | ||||||
| 	IGNORE_RETVAL(ComboBox_SetItemData(hDOSType, ComboBox_AddStringU(hDOSType, "MS-DOS"), DT_WINME)); | 	IGNORE_RETVAL(ComboBox_SetItemData(hDOSType, ComboBox_AddStringU(hDOSType, "MS-DOS"), DT_WINME)); | ||||||
| 	IGNORE_RETVAL(ComboBox_SetCurSel(hDOSType, DT_WINME)); | 	IGNORE_RETVAL(ComboBox_SetCurSel(hDOSType, DT_WINME)); | ||||||
|  | 	// Fill up the MBR disk IDs ("9 IDs should be enough for anybody")
 | ||||||
|  | 	for (i=0x80; i<=0x88; i++) { | ||||||
|  | 		sprintf(tmp, "0x%02x", i); | ||||||
|  | 		IGNORE_RETVAL(ComboBox_SetItemData(hDiskID, ComboBox_AddStringU(hDiskID, tmp), i)); | ||||||
|  | 	} | ||||||
|  | 	IGNORE_RETVAL(ComboBox_SetCurSel(hDiskID, 0)); | ||||||
|  | 
 | ||||||
| 	// Create the string array
 | 	// Create the string array
 | ||||||
| 	StrArrayCreate(&DriveID, MAX_DRIVES); | 	StrArrayCreate(&DriveID, MAX_DRIVES); | ||||||
| 	StrArrayCreate(&DriveLabel, MAX_DRIVES); | 	StrArrayCreate(&DriveLabel, MAX_DRIVES); | ||||||
| 	// Set the Quick format, Create bootable and Set icon checkboxes
 | 	// Set various checkboxes
 | ||||||
| 	CheckDlgButton(hDlg, IDC_QUICKFORMAT, BST_CHECKED); | 	CheckDlgButton(hDlg, IDC_QUICKFORMAT, BST_CHECKED); | ||||||
| 	CheckDlgButton(hDlg, IDC_DOS, BST_CHECKED); | 	CheckDlgButton(hDlg, IDC_DOS, BST_CHECKED); | ||||||
| 	CheckDlgButton(hDlg, IDC_SET_ICON, BST_CHECKED); | 	CheckDlgButton(hDlg, IDC_SET_ICON, BST_CHECKED); | ||||||
|  | @ -1220,20 +1309,38 @@ void InitDialog(HWND hDlg) | ||||||
| 	// Load system icons (NB: Use the excellent http://www.nirsoft.net/utils/iconsext.html to find icon IDs)
 | 	// Load system icons (NB: Use the excellent http://www.nirsoft.net/utils/iconsext.html to find icon IDs)
 | ||||||
| 	hDllInst = LoadLibraryA("shell32.dll"); | 	hDllInst = LoadLibraryA("shell32.dll"); | ||||||
| 	hIconDisc = (HICON)LoadImage(hDllInst, MAKEINTRESOURCE(12), IMAGE_ICON, i16, i16, LR_DEFAULTCOLOR|LR_SHARED); | 	hIconDisc = (HICON)LoadImage(hDllInst, MAKEINTRESOURCE(12), IMAGE_ICON, i16, i16, LR_DEFAULTCOLOR|LR_SHARED); | ||||||
|  | 	if (nWindowsVersion >= WINDOWS_VISTA) { | ||||||
|  | 		hIconDown = (HICON)LoadImage(hDllInst, MAKEINTRESOURCE(16750), IMAGE_ICON, i16, i16, LR_DEFAULTCOLOR|LR_SHARED); | ||||||
|  | 		hIconUp = (HICON)LoadImage(hDllInst, MAKEINTRESOURCE(16749), IMAGE_ICON, i16, i16, LR_DEFAULTCOLOR|LR_SHARED); | ||||||
|  | 	} else { | ||||||
|  | 		hIconDown = (HICON)LoadImage(hMainInstance, MAKEINTRESOURCE(IDI_DOWN), IMAGE_ICON, 16, 16, 0); | ||||||
|  | 		hIconUp = (HICON)LoadImage(hMainInstance, MAKEINTRESOURCE(IDI_UP), IMAGE_ICON, 16, 16, 0); | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	// Set a disc icon on the select ISO button
 | 	// Set the icons on the the buttons
 | ||||||
| 	pImageList_Create = (ImageList_Create_t) GetProcAddress(GetDLLHandle("Comctl32.dll"), "ImageList_Create"); | 	pImageList_Create = (ImageList_Create_t) GetProcAddress(GetDLLHandle("Comctl32.dll"), "ImageList_Create"); | ||||||
| 	pImageList_ReplaceIcon = (ImageList_ReplaceIcon_t) GetProcAddress(GetDLLHandle("Comctl32.dll"), "ImageList_ReplaceIcon"); | 	pImageList_ReplaceIcon = (ImageList_ReplaceIcon_t) GetProcAddress(GetDLLHandle("Comctl32.dll"), "ImageList_ReplaceIcon"); | ||||||
| 
 | 
 | ||||||
| 	bi.himl = pImageList_Create(i16, i16, ILC_COLOR32 | ILC_MASK, 1, 0); | 	bi_iso.himl = pImageList_Create(i16, i16, ILC_COLOR32 | ILC_MASK, 1, 0); | ||||||
| 	pImageList_ReplaceIcon(bi.himl, -1, hIconDisc); | 	pImageList_ReplaceIcon(bi_iso.himl, -1, hIconDisc); | ||||||
| 	SetRect(&bi.margin, 0, 1, 0, 0); | 	SetRect(&bi_iso.margin, 0, 1, 0, 0); | ||||||
| 	bi.uAlign = 4;	// BUTTON_IMAGELIST_ALIGN_CENTER
 | 	bi_iso.uAlign = BUTTON_IMAGELIST_ALIGN_CENTER; | ||||||
| 	SendMessage(GetDlgItem(hDlg, IDC_SELECT_ISO), 0x1602, 0, (LPARAM)&bi);	// BCM_SETIMAGELIST 
 | 	bi_down.himl = pImageList_Create(i16, i16, ILC_COLOR32 | ILC_MASK, 1, 0); | ||||||
|  | 	pImageList_ReplaceIcon(bi_down.himl, -1, hIconDown); | ||||||
|  | 	SetRect(&bi_down.margin, 0, 0, 0, 0); | ||||||
|  | 	bi_down.uAlign = BUTTON_IMAGELIST_ALIGN_CENTER; | ||||||
|  | 	bi_up.himl = pImageList_Create(i16, i16, ILC_COLOR32 | ILC_MASK, 1, 0); | ||||||
|  | 	pImageList_ReplaceIcon(bi_up.himl, -1, hIconUp); | ||||||
|  | 	SetRect(&bi_up.margin, 0, 0, 0, 0); | ||||||
|  | 	bi_up.uAlign = BUTTON_IMAGELIST_ALIGN_CENTER; | ||||||
| 
 | 
 | ||||||
|  | 	SendMessage(hSelectISO, BCM_SETIMAGELIST, 0, (LPARAM)&bi_iso); | ||||||
|  | 	SendMessage(GetDlgItem(hDlg, IDC_ADVANCED), BCM_SETIMAGELIST, 0, (LPARAM)&bi_down); | ||||||
| 	hISOToolTip = CreateTooltip(hSelectISO, "Click to select...", -1); | 	hISOToolTip = CreateTooltip(hSelectISO, "Click to select...", -1); | ||||||
| 	CreateTooltip(GetDlgItem(hDlg, IDC_SET_ICON), "Create an autorun.inf on the target drive, to set the icon. " | 	CreateTooltip(GetDlgItem(hDlg, IDC_SET_ICON), "Create an autorun.inf on the target drive, to set the icon. " | ||||||
| 		"Also allow the display of non-English labels.", 10000); | 		"Also allow the display of non-English labels.", 10000); | ||||||
|  | 
 | ||||||
|  | 	ToggleAdvanced();	// We start in advanced mode => go to basic mode
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1322,6 +1429,11 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | ||||||
| 		case IDC_TEST: | 		case IDC_TEST: | ||||||
| 			break; | 			break; | ||||||
| #endif | #endif | ||||||
|  | 		case IDC_ADVANCED: | ||||||
|  | 			ToggleAdvanced(); | ||||||
|  | 			SendMessage(hMainDialog, WM_COMMAND, (CBN_SELCHANGE<<16) | IDC_FILESYSTEM, | ||||||
|  | 				ComboBox_GetCurSel(hFileSystem)); | ||||||
|  | 			break; | ||||||
| 		case IDC_DEVICE: | 		case IDC_DEVICE: | ||||||
| 			if (HIWORD(wParam) != CBN_SELCHANGE) | 			if (HIWORD(wParam) != CBN_SELCHANGE) | ||||||
| 				break; | 				break; | ||||||
|  | @ -1353,7 +1465,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | ||||||
| 				break; | 				break; | ||||||
| 			fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); | 			fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); | ||||||
| 			SetClusterSizes(fs); | 			SetClusterSizes(fs); | ||||||
| 			if ((fs == FS_EXFAT) || (fs <0)) { | 			if ((fs == FS_EXFAT) || (fs < 0)) { | ||||||
| 				if (IsWindowEnabled(hDOS)) { | 				if (IsWindowEnabled(hDOS)) { | ||||||
| 					// unlikely to be supported by BIOSes => don't bother
 | 					// unlikely to be supported by BIOSes => don't bother
 | ||||||
| 					IGNORE_RETVAL(ComboBox_SetCurSel(hDOSType, 0)); | 					IGNORE_RETVAL(ComboBox_SetCurSel(hDOSType, 0)); | ||||||
|  | @ -1363,6 +1475,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | ||||||
| 					EnableWindow(hDOSType, FALSE); | 					EnableWindow(hDOSType, FALSE); | ||||||
| 					EnableWindow(hSelectISO, FALSE); | 					EnableWindow(hSelectISO, FALSE); | ||||||
| 				} | 				} | ||||||
|  | 				SetMBRProps(); | ||||||
| 				break; | 				break; | ||||||
| 			} | 			} | ||||||
| 			IGNORE_RETVAL(ComboBox_ResetContent(hDOSType)); | 			IGNORE_RETVAL(ComboBox_ResetContent(hDOSType)); | ||||||
|  | @ -1371,12 +1484,12 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | ||||||
| 				IGNORE_RETVAL(ComboBox_SetItemData(hDOSType, ComboBox_AddStringU(hDOSType, "FreeDOS"), DT_FREEDOS)); | 				IGNORE_RETVAL(ComboBox_SetItemData(hDOSType, ComboBox_AddStringU(hDOSType, "FreeDOS"), DT_FREEDOS)); | ||||||
| 			} | 			} | ||||||
| 			IGNORE_RETVAL(ComboBox_SetItemData(hDOSType, ComboBox_AddStringU(hDOSType, "ISO Image"), DT_ISO)); | 			IGNORE_RETVAL(ComboBox_SetItemData(hDOSType, ComboBox_AddStringU(hDOSType, "ISO Image"), DT_ISO)); | ||||||
| 			if (selection_default == DT_ISO) { | 			// If needed (advanced mode) also append a Syslinux option
 | ||||||
| 				if (iso_path == NULL) | 			if ( ((fs == FS_FAT16) || (fs == FS_FAT32)) && (advanced_mode) ) | ||||||
| 					selection_default = DT_FREEDOS; | 				IGNORE_RETVAL(ComboBox_SetItemData(hDOSType, ComboBox_AddStringU(hDOSType, "SysLinux"), DT_SYSLINUX)); | ||||||
| 				else  | 			if ( ((!advanced_mode) && (selection_default == DT_SYSLINUX)) ) { | ||||||
| 					EnableWindow(GetDlgItem(hMainDialog, IDC_RUFUS_MBR), | 				selection_default = DT_FREEDOS; | ||||||
| 					(iso_report.has_bootmgr) || (IS_WINPE(iso_report.winpe))); | 				CheckDlgButton(hDlg, IDC_DISK_ID, BST_UNCHECKED); | ||||||
| 			} | 			} | ||||||
| 			for (i=0; i<ComboBox_GetCount(hDOSType); i++) { | 			for (i=0; i<ComboBox_GetCount(hDOSType); i++) { | ||||||
| 				if (ComboBox_GetItemData(hDOSType, i) == selection_default) { | 				if (ComboBox_GetItemData(hDOSType, i) == selection_default) { | ||||||
|  | @ -1392,12 +1505,13 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | ||||||
| 				EnableWindow(hSelectISO, TRUE); | 				EnableWindow(hSelectISO, TRUE); | ||||||
| 				CheckDlgButton(hDlg, IDC_DOS, uDOSChecked); | 				CheckDlgButton(hDlg, IDC_DOS, uDOSChecked); | ||||||
| 			} | 			} | ||||||
|  | 			SetMBRProps(); | ||||||
| 			break; | 			break; | ||||||
| 		case IDC_DOSTYPE: | 		case IDC_DOSTYPE: | ||||||
| 			if (HIWORD(wParam) != CBN_SELCHANGE) | 			if (HIWORD(wParam) != CBN_SELCHANGE) | ||||||
| 				break; | 				break; | ||||||
|  | 			selection_default = ComboBox_GetItemData(hDOSType, ComboBox_GetCurSel(hDOSType)); | ||||||
| 			if (ComboBox_GetItemData(hDOSType, ComboBox_GetCurSel(hDOSType)) == DT_ISO) { | 			if (ComboBox_GetItemData(hDOSType, ComboBox_GetCurSel(hDOSType)) == DT_ISO) { | ||||||
| 				EnableWindow(GetDlgItem(hMainDialog, IDC_RUFUS_MBR), (iso_report.has_bootmgr) || (IS_WINPE(iso_report.winpe))); |  | ||||||
| 				if ((iso_path == NULL) || (iso_report.label[0] == 0)) { | 				if ((iso_path == NULL) || (iso_report.label[0] == 0)) { | ||||||
| 					// Set focus to the Select ISO button
 | 					// Set focus to the Select ISO button
 | ||||||
| 					SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)FALSE, 0); | 					SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)FALSE, 0); | ||||||
|  | @ -1406,11 +1520,12 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | ||||||
| 					SetWindowTextU(hLabel, iso_report.label); | 					SetWindowTextU(hLabel, iso_report.label); | ||||||
| 				} | 				} | ||||||
| 			} else { | 			} else { | ||||||
| 				EnableWindow(GetDlgItem(hMainDialog, IDC_RUFUS_MBR), TRUE); |  | ||||||
| 				// Set focus on the start button
 | 				// Set focus on the start button
 | ||||||
| 				SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)FALSE, 0); | 				SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)FALSE, 0); | ||||||
| 				SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hMainDialog, IDC_START), TRUE); | 				SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hMainDialog, IDC_START), TRUE); | ||||||
| 				SetWindowTextU(hLabel, SelectedDrive.proposed_label); | 				SetWindowTextU(hLabel, SelectedDrive.proposed_label); | ||||||
|  | 				// Reset disk ID to 0x80 if Rufus MBR is used
 | ||||||
|  | 				IGNORE_RETVAL(ComboBox_SetCurSel(hDiskID, 0)); | ||||||
| 			} | 			} | ||||||
| 			return (INT_PTR)TRUE; | 			return (INT_PTR)TRUE; | ||||||
| 		case IDC_SELECT_ISO: | 		case IDC_SELECT_ISO: | ||||||
|  | @ -1558,7 +1673,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine | ||||||
| 	HANDLE mutex = NULL; | 	HANDLE mutex = NULL; | ||||||
| 	HWND hDlg = NULL; | 	HWND hDlg = NULL; | ||||||
| 	MSG msg; | 	MSG msg; | ||||||
| 	BOOL mbr_shown = FALSE; |  | ||||||
| 
 | 
 | ||||||
| 	uprintf("*** RUFUS INIT ***\n"); | 	uprintf("*** RUFUS INIT ***\n"); | ||||||
| 
 | 
 | ||||||
|  | @ -1578,6 +1692,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine | ||||||
| 	// Initialize COM for folder selection
 | 	// Initialize COM for folder selection
 | ||||||
| 	CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); | 	CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); | ||||||
| 
 | 
 | ||||||
|  | 	// Set the Windows version
 | ||||||
|  | 	DetectWindowsVersion(); | ||||||
|  | 
 | ||||||
| 	// We use local group policies rather than direct registry manipulation
 | 	// We use local group policies rather than direct registry manipulation
 | ||||||
| 	// 0x9e disables removable and fixed drive notifications
 | 	// 0x9e disables removable and fixed drive notifications
 | ||||||
| 	SetLGP(FALSE, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", "NoDriveTypeAutorun", 0x9e); | 	SetLGP(FALSE, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", "NoDriveTypeAutorun", 0x9e); | ||||||
|  | @ -1613,11 +1730,10 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine | ||||||
| 				existing_key = FALSE; | 				existing_key = FALSE; | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
| 			// Alt M => make Rufus MBR choice visible
 | 			// Alt K => Toggle fake drive detection during bad blocks check (enabled by default)
 | ||||||
| 			if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'M')) { | 			if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'K')) { | ||||||
| 				mbr_shown = !mbr_shown; | 				detect_fakes = !detect_fakes; | ||||||
| 				ShowWindow(GetDlgItem(hDlg, IDC_RUFUS_MBR), mbr_shown?SW_SHOW:SW_HIDE); | 				PrintStatus(0, FALSE, "Fake drive detection %s", detect_fakes?"enabled":"disabled"); | ||||||
| 				existing_key = FALSE; |  | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
| 			TranslateMessage(&msg); | 			TranslateMessage(&msg); | ||||||
|  |  | ||||||
							
								
								
									
										19
									
								
								src/rufus.h
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								src/rufus.h
									
										
									
									
									
								
							|  | @ -125,6 +125,7 @@ enum dos_type { | ||||||
| 	DT_WINME = 0, | 	DT_WINME = 0, | ||||||
| 	DT_FREEDOS, | 	DT_FREEDOS, | ||||||
| 	DT_ISO, | 	DT_ISO, | ||||||
|  | 	DT_SYSLINUX, | ||||||
| 	DT_MAX | 	DT_MAX | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -170,27 +171,41 @@ typedef enum TASKBAR_PROGRESS_FLAGS | ||||||
| 	TASKBAR_PAUSED = 0x8 | 	TASKBAR_PAUSED = 0x8 | ||||||
| } TASKBAR_PROGRESS_FLAGS; | } TASKBAR_PROGRESS_FLAGS; | ||||||
| 
 | 
 | ||||||
|  | /* Windows versions */ | ||||||
|  | enum WindowsVersion { | ||||||
|  | 	WINDOWS_UNDEFINED, | ||||||
|  | 	WINDOWS_UNSUPPORTED, | ||||||
|  | 	WINDOWS_2K, | ||||||
|  | 	WINDOWS_XP, | ||||||
|  | 	WINDOWS_2003_XP64, | ||||||
|  | 	WINDOWS_VISTA, | ||||||
|  | 	WINDOWS_7, | ||||||
|  | 	WINDOWS_8 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Globals |  * Globals | ||||||
|  */ |  */ | ||||||
| extern HINSTANCE hMainInstance; | extern HINSTANCE hMainInstance; | ||||||
| extern HWND hMainDialog, hStatus, hDeviceList, hCapacity; | extern HWND hMainDialog, hStatus, hDeviceList, hCapacity; | ||||||
| extern HWND hFileSystem, hClusterSize, hLabel, hDOSType, hNBPasses; | extern HWND hFileSystem, hClusterSize, hLabel, hDOSType, hNBPasses; | ||||||
| extern HWND hISOProgressDlg, hISOProgressBar, hISOFileName; | extern HWND hISOProgressDlg, hISOProgressBar, hISOFileName, hDiskID; | ||||||
| extern float fScale; | extern float fScale; | ||||||
| extern char szFolderPath[MAX_PATH]; | extern char szFolderPath[MAX_PATH]; | ||||||
| extern char* iso_path; | extern char* iso_path; | ||||||
| extern DWORD FormatStatus; | extern DWORD FormatStatus; | ||||||
| extern RUFUS_DRIVE_INFO SelectedDrive; | extern RUFUS_DRIVE_INFO SelectedDrive; | ||||||
| extern const int nb_steps[FS_MAX]; | extern const int nb_steps[FS_MAX]; | ||||||
| extern BOOL bWithFreeDOS, use_own_vesamenu; | extern BOOL use_own_vesamenu, detect_fakes; | ||||||
| extern RUFUS_ISO_REPORT iso_report; | extern RUFUS_ISO_REPORT iso_report; | ||||||
| extern int64_t iso_blocking_status; | extern int64_t iso_blocking_status; | ||||||
| extern int rufus_version[4]; | extern int rufus_version[4]; | ||||||
|  | extern enum WindowsVersion nWindowsVersion; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Shared prototypes |  * Shared prototypes | ||||||
|  */ |  */ | ||||||
|  | extern void DetectWindowsVersion(void); | ||||||
| extern const char *WindowsErrorString(void); | extern const char *WindowsErrorString(void); | ||||||
| extern void DumpBufferHex(void *buf, size_t size); | extern void DumpBufferHex(void *buf, size_t size); | ||||||
| extern void PrintStatus(unsigned int duration, BOOL debug, const char *format, ...); | extern void PrintStatus(unsigned int duration, BOOL debug, const char *format, ...); | ||||||
|  |  | ||||||
							
								
								
									
										41
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										41
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -27,14 +27,14 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL | ||||||
| // Dialog | // Dialog | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| IDD_DIALOG DIALOGEX 12, 12, 206, 289 | IDD_DIALOG DIALOGEX 12, 12, 206, 316 | ||||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| EXSTYLE WS_EX_APPWINDOW | EXSTYLE WS_EX_APPWINDOW | ||||||
| CAPTION "Rufus v1.2.0.169" | CAPTION "Rufus v1.2.0.170" | ||||||
| FONT 8, "MS Shell Dlg", 400, 0, 0x1 | FONT 8, "MS Shell Dlg", 400, 0, 0x1 | ||||||
| BEGIN | BEGIN | ||||||
|     DEFPUSHBUTTON   "Start",IDC_START,94,248,50,14 |     DEFPUSHBUTTON   "Start",IDC_START,94,278,50,14 | ||||||
|     PUSHBUTTON      "Close",IDCANCEL,148,248,50,14 |     PUSHBUTTON      "Close",IDCANCEL,148,278,50,14 | ||||||
|     COMBOBOX        IDC_DEVICE,8,17,190,33,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |     COMBOBOX        IDC_DEVICE,8,17,190,33,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|     CONTROL         "Device",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,9,6,22,8 |     CONTROL         "Device",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,9,6,22,8 | ||||||
|     COMBOBOX        IDC_FILESYSTEM,8,75,190,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |     COMBOBOX        IDC_FILESYSTEM,8,75,190,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|  | @ -43,21 +43,26 @@ BEGIN | ||||||
|     LTEXT           "Capacity",IDC_STATIC,9,35,29,8 |     LTEXT           "Capacity",IDC_STATIC,9,35,29,8 | ||||||
|     COMBOBOX        IDC_CLUSTERSIZE,8,104,190,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |     COMBOBOX        IDC_CLUSTERSIZE,8,104,190,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|     LTEXT           "Cluster size",IDC_STATIC,9,93,105,10 |     LTEXT           "Cluster size",IDC_STATIC,9,93,105,10 | ||||||
|     PUSHBUTTON      "About...",IDC_ABOUT,8,248,50,14 |     PUSHBUTTON      "About...",IDC_ABOUT,8,278,50,14 | ||||||
|     GROUPBOX        "Format Options",IDC_STATIC,7,149,189,64 |     GROUPBOX        "Format Options       ",IDC_STATIC,7,149,192,66 | ||||||
|     EDITTEXT        IDC_LABEL,7,131,190,13,ES_AUTOHSCROLL |     EDITTEXT        IDC_LABEL,7,131,190,13,ES_AUTOHSCROLL | ||||||
|     CONTROL         "Check device for bad blocks:",IDC_BADBLOCKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,161,101,10 |     CONTROL         "Check device for bad blocks:",IDC_BADBLOCKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,161,101,10 | ||||||
|     CONTROL         "Quick Format",IDC_QUICKFORMAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,173,58,10 |     CONTROL         "Quick Format",IDC_QUICKFORMAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,173,55,10 | ||||||
|     CONTROL         "Create a bootable disk using:",IDC_DOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,185,104,10 |     CONTROL         "Create a bootable disk using:",IDC_DOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,185,104,10 | ||||||
|     CONTROL         "Create extended label and icon files",IDC_SET_ICON, |     CONTROL         "Create extended label and icon files",IDC_SET_ICON, | ||||||
|                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,197,131,10 |                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,198,131,10 | ||||||
|     LTEXT           "New volume label",IDC_STATIC,9,121,105,10 |     LTEXT           "New volume label",IDC_STATIC,9,121,105,10 | ||||||
|     CONTROL         "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,7,221,189,9 |     CONTROL         "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,259,189,9 | ||||||
|     COMBOBOX        IDC_NBPASSES,119,159,49,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |     COMBOBOX        IDC_NBPASSES,119,159,49,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|     COMBOBOX        IDC_DOSTYPE,119,183,49,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |     COMBOBOX        IDC_DOSTYPE,119,183,49,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|     PUSHBUTTON      "...",IDC_SELECT_ISO,171,182,22,14,BS_ICON |     PUSHBUTTON      "...",IDC_SELECT_ISO,171,182,22,14,BS_ICON | ||||||
|     PUSHBUTTON      "Test",IDC_TEST,62,248,20,14,NOT WS_VISIBLE |     PUSHBUTTON      "Test",IDC_TEST,62,278,20,14,NOT WS_VISIBLE | ||||||
|     CONTROL         "Rufus MBR",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,71,173,44,10 |     CONTROL         "Use Rufus MBR with Drive ID:",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,13,222,106,10 | ||||||
|  |     PUSHBUTTON      "",IDC_ADVANCED,63,148,14,10,BS_TOP | BS_FLAT | ||||||
|  |     GROUPBOX        "Advanced Options",IDC_ADVANCED_GROUP,7,210,192,42,NOT WS_VISIBLE | ||||||
|  |     COMBOBOX        IDC_DISK_ID,119,220,32,30,CBS_DROPDOWNLIST | NOT WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ||||||
|  |     CONTROL         "Apply fixes for older BIOSes (extra partition, etc.)",IDC_EXTRA_PARTITION, | ||||||
|  |                     "Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,13,235,177,10 | ||||||
| END | END | ||||||
| 
 | 
 | ||||||
| IDD_ABOUTBOX DIALOGEX 0, 0, 287, 195 | IDD_ABOUTBOX DIALOGEX 0, 0, 287, 195 | ||||||
|  | @ -71,7 +76,7 @@ BEGIN | ||||||
|     DEFPUSHBUTTON   "OK",IDOK,231,175,50,14,WS_GROUP |     DEFPUSHBUTTON   "OK",IDOK,231,175,50,14,WS_GROUP | ||||||
|     CONTROL         "<a href=""http://rufus.akeo.ie"">http://rufus.akeo.ie</a>",IDC_ABOUT_RUFUS_URL, |     CONTROL         "<a href=""http://rufus.akeo.ie"">http://rufus.akeo.ie</a>",IDC_ABOUT_RUFUS_URL, | ||||||
|                     "SysLink",WS_TABSTOP,46,47,114,9 |                     "SysLink",WS_TABSTOP,46,47,114,9 | ||||||
|     LTEXT           "Version 1.2.0 (Build 169)",IDC_STATIC,46,19,78,8 |     LTEXT           "Version 1.2.0 (Build 170)",IDC_STATIC,46,19,78,8 | ||||||
|     PUSHBUTTON      "License...",IDC_ABOUT_LICENSE,46,175,50,14,WS_GROUP |     PUSHBUTTON      "License...",IDC_ABOUT_LICENSE,46,175,50,14,WS_GROUP | ||||||
|     EDITTEXT        IDC_ABOUT_COPYRIGHTS,46,107,235,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL |     EDITTEXT        IDC_ABOUT_COPYRIGHTS,46,107,235,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL | ||||||
|     LTEXT           "Report bugs or request enhancements at:",IDC_STATIC,46,66,187,8 |     LTEXT           "Report bugs or request enhancements at:",IDC_STATIC,46,66,187,8 | ||||||
|  | @ -187,7 +192,7 @@ GUIDELINES DESIGNINFO | ||||||
| BEGIN | BEGIN | ||||||
|     IDD_DIALOG, DIALOG |     IDD_DIALOG, DIALOG | ||||||
|     BEGIN |     BEGIN | ||||||
|         BOTTOMMARGIN, 288 |         BOTTOMMARGIN, 315 | ||||||
|     END |     END | ||||||
| 
 | 
 | ||||||
|     IDD_ABOUTBOX, DIALOG |     IDD_ABOUTBOX, DIALOG | ||||||
|  | @ -216,8 +221,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 1,2,0,169 |  FILEVERSION 1,2,0,170 | ||||||
|  PRODUCTVERSION 1,2,0,169 |  PRODUCTVERSION 1,2,0,170 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -234,13 +239,13 @@ BEGIN | ||||||
|         BEGIN |         BEGIN | ||||||
|             VALUE "CompanyName", "akeo.ie" |             VALUE "CompanyName", "akeo.ie" | ||||||
|             VALUE "FileDescription", "Rufus" |             VALUE "FileDescription", "Rufus" | ||||||
|             VALUE "FileVersion", "1.2.0.169" |             VALUE "FileVersion", "1.2.0.170" | ||||||
|             VALUE "InternalName", "Rufus" |             VALUE "InternalName", "Rufus" | ||||||
|             VALUE "LegalCopyright", "© 2011 Pete Batard (GPL v3)" |             VALUE "LegalCopyright", "© 2011 Pete Batard (GPL v3)" | ||||||
|             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" |             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" | ||||||
|             VALUE "OriginalFilename", "rufus.exe" |             VALUE "OriginalFilename", "rufus.exe" | ||||||
|             VALUE "ProductName", "Rufus" |             VALUE "ProductName", "Rufus" | ||||||
|             VALUE "ProductVersion", "1.2.0.169" |             VALUE "ProductVersion", "1.2.0.170" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  | @ -258,6 +263,8 @@ END | ||||||
| // Icon with lowest ID value placed first to ensure application icon | // Icon with lowest ID value placed first to ensure application icon | ||||||
| // remains consistent on all systems. | // remains consistent on all systems. | ||||||
| IDI_ICON                ICON                    "../res/rufus.ico" | IDI_ICON                ICON                    "../res/rufus.ico" | ||||||
|  | IDI_UP                  ICON                    "../res/up.ico" | ||||||
|  | IDI_DOWN                ICON                    "../res/down.ico" | ||||||
| #endif    // English resources | #endif    // English resources | ||||||
| ///////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////// | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								src/stdlg.c
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								src/stdlg.c
									
										
									
									
									
								
							|  | @ -38,18 +38,6 @@ | ||||||
| #include "resource.h" | #include "resource.h" | ||||||
| #include "license.h" | #include "license.h" | ||||||
| 
 | 
 | ||||||
| /* Windows versions */ |  | ||||||
| enum WindowsVersion { |  | ||||||
| 	WINDOWS_UNDEFINED, |  | ||||||
| 	WINDOWS_UNSUPPORTED, |  | ||||||
| 	WINDOWS_2K, |  | ||||||
| 	WINDOWS_XP, |  | ||||||
| 	WINDOWS_2003_XP64, |  | ||||||
| 	WINDOWS_VISTA, |  | ||||||
| 	WINDOWS_7, |  | ||||||
| 	WINDOWS_8 |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* The following is only available on Vista and later */ | /* The following is only available on Vista and later */ | ||||||
| #if (_WIN32_WINNT >= 0x0600) | #if (_WIN32_WINNT >= 0x0600) | ||||||
| static HRESULT (WINAPI *pSHCreateItemFromParsingName)(PCWSTR, IBindCtx*, REFIID, void **) = NULL; | static HRESULT (WINAPI *pSHCreateItemFromParsingName)(PCWSTR, IBindCtx*, REFIID, void **) = NULL; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue