mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[core] add support for bare ReactOS boot record installation
* A new "ReactOS" is now available under "Create a bootable disk" when running in advanced mode. * Using this option will install the ReactOS bootblocks (MBR & FAT PBR) _only_. You can then copy freeldr.sys and freeldr.ini to make the drive bootable. * Also move Rufus MBR installation to ms-sys, and remove mbr.bin resource. * Also add Rufus MBR detection, remove duplicate records and display MBR type on drive detection * Also move PBR and MBR analysis calls to drive.c and add a drive.h header * Also make extraction of embedded loc file more robust
This commit is contained in:
		
							parent
							
								
									a0dfb06715
								
							
						
					
					
						commit
						573ea45640
					
				
					 27 changed files with 633 additions and 160 deletions
				
			
		|  | @ -198,6 +198,7 @@ | |||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClInclude Include="..\badblocks.h" /> | ||||
|     <ClInclude Include="..\drive.h" /> | ||||
|     <ClInclude Include="..\format.h" /> | ||||
|     <ClInclude Include="..\hdd_vs_ufd.h" /> | ||||
|     <ClInclude Include="..\libcdio\cdio\cdio.h" /> | ||||
|  |  | |||
|  | @ -119,6 +119,9 @@ | |||
|     <ClInclude Include="..\hdd_vs_ufd.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\drive.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <None Include="..\..\res\rufus.ico"> | ||||
|  |  | |||
							
								
								
									
										83
									
								
								src/drive.c
									
										
									
									
									
								
							
							
						
						
									
										83
									
								
								src/drive.c
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | |||
| /*
 | ||||
|  * Rufus: The Reliable USB Formatting Utility | ||||
|  * Drive access function calls | ||||
|  * Copyright © 2011-2013 Pete Batard <pete@akeo.ie> | ||||
|  * Copyright © 2011-2014 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 | ||||
|  | @ -28,8 +28,13 @@ | |||
| 
 | ||||
| #include "msapi_utf8.h" | ||||
| #include "rufus.h" | ||||
| #include "drive.h" | ||||
| #include "resource.h" | ||||
| #include "sys_types.h" | ||||
| #include "br.h" | ||||
| #include "fat16.h" | ||||
| #include "fat32.h" | ||||
| #include "ntfs.h" | ||||
| #include "localization.h" | ||||
| 
 | ||||
| /*
 | ||||
|  | @ -467,6 +472,81 @@ BOOL IsMediaPresent(DWORD DriveIndex) | |||
| 	return r; | ||||
| } | ||||
| 
 | ||||
| // TODO: use an (fn,str) table and simplify this whole thing
 | ||||
| BOOL AnalyzeMBR(HANDLE hPhysicalDrive) | ||||
| { | ||||
| 	FILE fake_fd = { 0 }; | ||||
| 
 | ||||
| 	fake_fd._ptr = (char*)hPhysicalDrive; | ||||
| 	fake_fd._bufsiz = SelectedDrive.Geometry.BytesPerSector; | ||||
| 
 | ||||
| 	if (!is_br(&fake_fd)) { | ||||
| 		uprintf("Drive does not have an x86 master boot record\n"); | ||||
| 		return FALSE; | ||||
| 	} | ||||
| 	if (is_dos_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a DOS/NT/95A master boot record\n"); | ||||
| 	} else if (is_dos_f2_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a DOS/NT/95A master boot record " | ||||
| 			"with the undocumented F2 instruction\n"); | ||||
| 	} else if (is_95b_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a Windows 95B/98/98SE/ME master boot record\n"); | ||||
| 	} else if (is_2000_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a Windows 2000/XP/2003 master boot record\n"); | ||||
| 	} else if (is_vista_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a Windows Vista master boot record\n"); | ||||
| 	} else if (is_win7_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a Windows 7 master boot record\n"); | ||||
| 	} else if (is_rufus_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a Rufus master boot record\n"); | ||||
| 	} else if (is_syslinux_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a Syslinux master boot record\n"); | ||||
| 	} else if (is_reactos_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a ReactOS master boot record\n"); | ||||
| 	} else if (is_zero_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a zeroed non-bootable master boot record\n"); | ||||
| 	} else { | ||||
| 		uprintf("Drive has an unknown master boot record\n"); | ||||
| 	} | ||||
| 	return TRUE; | ||||
| } | ||||
| 
 | ||||
| // TODO: use an (fn,str) table and simplify this whole thing
 | ||||
| BOOL AnalyzePBR(HANDLE hLogicalVolume) | ||||
| { | ||||
| 	FILE fake_fd = { 0 }; | ||||
| 
 | ||||
| 	fake_fd._ptr = (char*)hLogicalVolume; | ||||
| 	fake_fd._bufsiz = SelectedDrive.Geometry.BytesPerSector; | ||||
| 
 | ||||
| 	if (!is_br(&fake_fd)) { | ||||
| 		uprintf("Volume does not have an x86 partition boot record\n"); | ||||
| 		return FALSE; | ||||
| 	} | ||||
| 	if (is_fat_16_br(&fake_fd) || is_fat_32_br(&fake_fd)) { | ||||
| 		if (entire_fat_16_br_matches(&fake_fd)) { | ||||
| 			uprintf("Drive has a FAT16 DOS partition boot record\n"); | ||||
| 		} else if (entire_fat_16_fd_br_matches(&fake_fd)) { | ||||
| 			uprintf("Drive has a FAT16 FreeDOS partition boot record\n"); | ||||
| 		} else if (entire_fat_16_ros_br_matches(&fake_fd)) { | ||||
| 			uprintf("Drive has a FAT16 ReactOS partition boot record\n"); | ||||
| 		} else if (entire_fat_32_br_matches(&fake_fd)) { | ||||
| 			uprintf("Drive has a FAT32 DOS partition boot record\n"); | ||||
| 		} else if (entire_fat_32_nt_br_matches(&fake_fd)) { | ||||
| 			uprintf("Drive has a FAT32 NT partition boot record\n"); | ||||
| 		} else if (entire_fat_32_fd_br_matches(&fake_fd)) { | ||||
| 			uprintf("Drive has a FAT32 FreeDOS partition boot record\n"); | ||||
| 		} else if (entire_fat_32_ros_br_matches(&fake_fd)) { | ||||
| 			uprintf("Drive has a FAT32 ReactOS partition boot record\n"); | ||||
| 		} else { | ||||
| 			uprintf("Drive has an unknown FAT16 or FAT32 partition boot record\n"); | ||||
| 		} | ||||
| 	} else { | ||||
| 		uprintf("Drive has an unknown partition boot record\n"); | ||||
| 	} | ||||
| 	return TRUE; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Fill the drive properties (size, FS, etc) | ||||
|  */ | ||||
|  | @ -527,6 +607,7 @@ BOOL GetDrivePartitionData(DWORD DriveIndex, char* FileSystemName, DWORD FileSys | |||
| 		uprintf("Partition type: MBR, NB Partitions: %d\n", nb_partitions); | ||||
| 		SelectedDrive.has_mbr_uefi_marker = (DriveLayout->Mbr.Signature == MBR_UEFI_MARKER); | ||||
| 		uprintf("Disk ID: 0x%08X %s\n", DriveLayout->Mbr.Signature, SelectedDrive.has_mbr_uefi_marker?"(UEFI target)":""); | ||||
| 		AnalyzeMBR(hPhysical); | ||||
| 		for (i=0; i<DriveLayout->PartitionCount; i++) { | ||||
| 			if (DriveLayout->PartitionEntry[i].Mbr.PartitionType != PARTITION_ENTRY_UNUSED) { | ||||
| 				uprintf("Partition %d:\n", DriveLayout->PartitionEntry[i].PartitionNumber); | ||||
|  |  | |||
							
								
								
									
										44
									
								
								src/drive.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/drive.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | |||
| /*
 | ||||
|  * Rufus: The Reliable USB Formatting Utility | ||||
|  * Drive access function calls | ||||
|  * Copyright © 2011-2014 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 | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
|  */ | ||||
| 
 | ||||
| #include <windows.h> | ||||
| #include <stdint.h> | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| char* GetPhysicalName(DWORD DriveIndex); | ||||
| HANDLE GetPhysicalHandle(DWORD DriveIndex, BOOL bWriteAccess, BOOL bLockDrive); | ||||
| char* GetLogicalName(DWORD DriveIndex, BOOL bKeepTrailingBackslash, BOOL bSilent); | ||||
| BOOL WaitForLogical(DWORD DriveIndex); | ||||
| HANDLE GetLogicalHandle(DWORD DriveIndex, BOOL bWriteAccess, BOOL bLockDrive); | ||||
| BOOL GetDriveLetter(DWORD DriveIndex, char* drive_letter); | ||||
| UINT GetDriveTypeFromIndex(DWORD DriveIndex); | ||||
| char GetUnusedDriveLetter(void); | ||||
| BOOL GetDriveLabel(DWORD DriveIndex, char* letter, char** label); | ||||
| uint64_t GetDriveSize(DWORD DriveIndex); | ||||
| BOOL IsMediaPresent(DWORD DriveIndex); | ||||
| BOOL AnalyzeMBR(HANDLE hPhysicalDrive); | ||||
| BOOL AnalyzePBR(HANDLE hLogicalVolume); | ||||
| BOOL GetDrivePartitionData(DWORD DriveIndex, char* FileSystemName, DWORD FileSystemNameSize); | ||||
| BOOL UnmountVolume(HANDLE hDrive); | ||||
| BOOL MountVolume(char* drive_name, char *drive_guid); | ||||
| BOOL RemountVolume(char* drive_name); | ||||
| BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL mbr_uefi_marker); | ||||
| BOOL DeletePartitions(HANDLE hDrive); | ||||
| const char* GetPartitionType(BYTE Type); | ||||
							
								
								
									
										134
									
								
								src/format.c
									
										
									
									
									
								
							
							
						
						
									
										134
									
								
								src/format.c
									
										
									
									
									
								
							|  | @ -2,7 +2,7 @@ | |||
|  * Rufus: The Reliable USB Formatting Utility | ||||
|  * Formatting function calls | ||||
|  * Copyright © 2007-2009 Tom Thornhill/Ridgecrop | ||||
|  * Copyright © 2011-2013 Pete Batard <pete@akeo.ie> | ||||
|  * Copyright © 2011-2014 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 | ||||
|  | @ -41,6 +41,7 @@ | |||
| #include "ntfs.h" | ||||
| #include "partition_info.h" | ||||
| #include "file.h" | ||||
| #include "drive.h" | ||||
| #include "format.h" | ||||
| #include "badblocks.h" | ||||
| #include "localization.h" | ||||
|  | @ -767,69 +768,6 @@ out: | |||
| 	return r; | ||||
| } | ||||
| 
 | ||||
| static BOOL AnalyzeMBR(HANDLE hPhysicalDrive) | ||||
| { | ||||
| 	FILE fake_fd = { 0 }; | ||||
| 
 | ||||
| 	fake_fd._ptr = (char*)hPhysicalDrive; | ||||
| 	fake_fd._bufsiz = SelectedDrive.Geometry.BytesPerSector; | ||||
| 
 | ||||
| 	if (!is_br(&fake_fd)) { | ||||
| 		uprintf("Drive does not have an x86 master boot record\n"); | ||||
| 		return FALSE; | ||||
| 	} | ||||
| 	if (is_dos_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a DOS/NT/95A master boot record\n"); | ||||
| 	} else if (is_dos_f2_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a DOS/NT/95A master boot record " | ||||
| 			"with the undocumented F2 instruction\n"); | ||||
| 	} else if (is_95b_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a Windows 95B/98/98SE/ME master boot record\n"); | ||||
| 	} else if (is_2000_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a Windows 2000/XP/2003 master boot record\n"); | ||||
| 	} else if (is_vista_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a Windows Vista master boot record\n"); | ||||
| 	} else if (is_win7_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a Windows 7 master boot record\n"); | ||||
| 	} else if (is_zero_mbr(&fake_fd)) { | ||||
| 		uprintf("Drive has a zeroed non-bootable master boot record\n"); | ||||
| 	} else { | ||||
| 		uprintf("Drive has an unknown master boot record\n"); | ||||
| 	} | ||||
| 	return TRUE; | ||||
| } | ||||
| 
 | ||||
| static BOOL AnalyzePBR(HANDLE hLogicalVolume) | ||||
| { | ||||
| 	FILE fake_fd = { 0 }; | ||||
| 
 | ||||
| 	fake_fd._ptr = (char*)hLogicalVolume; | ||||
| 	fake_fd._bufsiz = SelectedDrive.Geometry.BytesPerSector; | ||||
| 
 | ||||
| 	if (!is_br(&fake_fd)) { | ||||
| 		uprintf("Volume does not have an x86 partition boot record\n"); | ||||
| 		return FALSE; | ||||
| 	} | ||||
| 	if (is_fat_16_br(&fake_fd) || is_fat_32_br(&fake_fd)) { | ||||
| 		if (entire_fat_16_br_matches(&fake_fd)) { | ||||
| 			uprintf("Drive has a FAT16 DOS partition boot record\n"); | ||||
| 		} else if (entire_fat_16_fd_br_matches(&fake_fd)) { | ||||
| 			uprintf("Drive has a FAT16 FreeDOS partition boot record\n"); | ||||
| 		} else if (entire_fat_32_br_matches(&fake_fd)) { | ||||
| 			uprintf("Drive has a FAT32 DOS partition boot record\n"); | ||||
| 		} else if (entire_fat_32_nt_br_matches(&fake_fd)) { | ||||
| 			uprintf("Drive has a FAT32 NT partition boot record\n"); | ||||
| 		} else if (entire_fat_32_fd_br_matches(&fake_fd)) { | ||||
| 			uprintf("Drive has a FAT32 FreeDOS partition boot record\n"); | ||||
| 		} else { | ||||
| 			uprintf("Drive has an unknown FAT16 or FAT32 partition boot record\n"); | ||||
| 		} | ||||
| 	} else { | ||||
| 		uprintf("Drive has an unknown partition boot record\n"); | ||||
| 	} | ||||
| 	return TRUE; | ||||
| } | ||||
| 
 | ||||
| static BOOL ClearMBRGPT(HANDLE hPhysicalDrive, LONGLONG DiskSize, DWORD SectorSize, BOOL add1MB) | ||||
| { | ||||
| 	BOOL r = FALSE; | ||||
|  | @ -865,23 +803,6 @@ out: | |||
| 	return r; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Our own MBR, not in ms-sys | ||||
|  */ | ||||
| BOOL WriteRufusMBR(FILE *fp) | ||||
| { | ||||
| 	DWORD size; | ||||
| 	unsigned char aucRef[] = {0x55, 0xAA}; | ||||
| 	unsigned char* rufus_mbr; | ||||
| 
 | ||||
| 	// TODO: Will we need to edit the disk ID according to UI selection in the MBR as well?
 | ||||
| 	rufus_mbr = GetResource(hMainInstance, MAKEINTRESOURCEA(IDR_BR_MBR_BIN), _RT_RCDATA, "mbr.bin", &size, FALSE); | ||||
| 
 | ||||
| 	return | ||||
| 		write_data(fp, 0x0, rufus_mbr, 0x1b8) && | ||||
| 		write_data(fp, 0x1fe, aucRef, sizeof(aucRef)); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Process the Master Boot Record | ||||
|  */ | ||||
|  | @ -894,6 +815,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive) | |||
| 	size_t SecSize = SelectedDrive.Geometry.BytesPerSector; | ||||
| 	size_t nSecs = (0x200 + SecSize -1) / SecSize; | ||||
| 	FILE fake_fd = { 0 }; | ||||
| 	const char* using_msg = "Using %s MBR\n"; | ||||
| 
 | ||||
| 	if (!AnalyzeMBR(hPhysicalDrive)) return FALSE; | ||||
| 
 | ||||
|  | @ -947,13 +869,17 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive) | |||
| 	fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); | ||||
| 	dt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)); | ||||
| 	if ( (dt == DT_SYSLINUX_V4) || (dt == DT_SYSLINUX_V5) || ((dt == DT_ISO) && ((fs == FS_FAT16) || (fs == FS_FAT32))) ) { | ||||
| 		uprintf(using_msg, "Syslinux"); | ||||
| 		r = write_syslinux_mbr(&fake_fd); | ||||
| 	} else if (dt == DT_REACTOS) { | ||||
| 		uprintf(using_msg, "ReactOS"); | ||||
| 		r = write_reactos_mbr(&fake_fd); | ||||
| 	} else { | ||||
| 		if ((IS_WINPE(iso_report.winpe) && !iso_report.uses_minint) || (IsChecked(IDC_RUFUS_MBR))) { | ||||
| 			uprintf("Using " APPLICATION_NAME " bootable USB selection MBR\n"); | ||||
| 			r = WriteRufusMBR(&fake_fd); | ||||
| 			uprintf(using_msg, APPLICATION_NAME); | ||||
| 			r = write_rufus_mbr(&fake_fd); | ||||
| 		} else { | ||||
| 			uprintf("Using Windows 7 MBR\n"); | ||||
| 			uprintf(using_msg, "Windows 7"); | ||||
| 			r = write_win7_mbr(&fake_fd); | ||||
| 		} | ||||
| 	} | ||||
|  | @ -969,24 +895,35 @@ out: | |||
| /*
 | ||||
|  * Process the Partition Boot Record | ||||
|  */ | ||||
| static __inline const char* dt_to_name(int dt) { | ||||
| 	switch (dt) { | ||||
| 	case DT_FREEDOS: return "FreeDOS"; | ||||
| 	case DT_REACTOS: return "ReactOS"; | ||||
| 	default: return "Standard"; | ||||
| 	} | ||||
| } | ||||
| static BOOL WritePBR(HANDLE hLogicalVolume) | ||||
| { | ||||
| 	int i; | ||||
| 	FILE fake_fd = { 0 }; | ||||
| 	BOOL bFreeDOS = (ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)) == DT_FREEDOS); | ||||
| 	int dt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)); | ||||
| 	const char* using_msg = "Using %s %s partition boot record\n"; | ||||
| 
 | ||||
| 	fake_fd._ptr = (char*)hLogicalVolume; | ||||
| 	fake_fd._bufsiz = SelectedDrive.Geometry.BytesPerSector; | ||||
| 
 | ||||
| 	switch (ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem))) { | ||||
| 	case FS_FAT16: | ||||
| 		uprintf(using_msg, dt_to_name(dt), "FAT16"); | ||||
| 		if (!is_fat_16_fs(&fake_fd)) { | ||||
| 			uprintf("New volume does not have a FAT16 boot sector\n"); | ||||
| 			uprintf("New volume does not have a FAT16 boot sector - aborting\n"); | ||||
| 			break; | ||||
| 		} | ||||
| 		uprintf("Confirmed new volume has a FAT16 boot sector\n"); | ||||
| 		if (bFreeDOS) { | ||||
| 		if (dt == DT_FREEDOS) { | ||||
| 			if (!write_fat_16_fd_br(&fake_fd, 0)) break; | ||||
| 		} else if (dt == DT_REACTOS) { | ||||
| 			if (!write_fat_16_ros_br(&fake_fd, 0)) break; | ||||
| 		} else { | ||||
| 			if (!write_fat_16_br(&fake_fd, 0)) break; | ||||
| 		} | ||||
|  | @ -995,16 +932,21 @@ static BOOL WritePBR(HANDLE hLogicalVolume) | |||
| 			break; | ||||
| 		return TRUE; | ||||
| 	case FS_FAT32: | ||||
| 		uprintf(using_msg, dt_to_name(dt), "FAT32"); | ||||
| 		for (i=0; i<2; i++) { | ||||
| 			if (!is_fat_32_fs(&fake_fd)) { | ||||
| 				uprintf("New volume does not have a %s FAT32 boot sector\n", i?"secondary":"primary"); | ||||
| 				uprintf("New volume does not have a %s FAT32 boot sector - aborting\n", i?"secondary":"primary"); | ||||
| 				break; | ||||
| 			} | ||||
| 			uprintf("Confirmed new volume has a %s FAT32 boot sector\n", i?"secondary":"primary"); | ||||
| 			uprintf("Setting %s FAT32 boot sector for DOS boot...\n", i?"secondary":"primary"); | ||||
| 			if (bFreeDOS) { | ||||
| 			uprintf("Setting %s FAT32 boot sector for boot...\n", i?"secondary":"primary"); | ||||
| 			if (dt == DT_FREEDOS) { | ||||
| 				if (!write_fat_32_fd_br(&fake_fd, 0)) break; | ||||
| 			} else if (!write_fat_32_br(&fake_fd, 0)) break; | ||||
| 			} else if (dt == DT_REACTOS) { | ||||
| 				if (!write_fat_32_ros_br(&fake_fd, 0)) break; | ||||
| 			} else { | ||||
| 				if (!write_fat_32_br(&fake_fd, 0)) break; | ||||
| 			} | ||||
| 			// Disk Drive ID needs to be corrected on XP
 | ||||
| 			if (!write_partition_physical_disk_drive_id_fat32(&fake_fd)) | ||||
| 				break; | ||||
|  | @ -1012,8 +954,9 @@ static BOOL WritePBR(HANDLE hLogicalVolume) | |||
| 		} | ||||
| 		return TRUE; | ||||
| 	case FS_NTFS: | ||||
| 		uprintf(using_msg, dt_to_name(dt), "NTFS"); | ||||
| 		if (!is_ntfs_fs(&fake_fd)) { | ||||
| 			uprintf("New volume does not have an NTFS boot sector\n"); | ||||
| 			uprintf("New volume does not have an NTFS boot sector - aborting\n"); | ||||
| 			break; | ||||
| 		} | ||||
| 		uprintf("Confirmed new volume has an NTFS boot sector\n"); | ||||
|  | @ -1023,7 +966,7 @@ static BOOL WritePBR(HANDLE hLogicalVolume) | |||
| 		// But with NTFS, if you don't remount, you don't boot!
 | ||||
| 		return TRUE; | ||||
| 	default: | ||||
| 		uprintf("unsupported FS for FS BR processing\n"); | ||||
| 		uprintf("Unsupported FS for FS BR processing - aborting\n"); | ||||
| 		break; | ||||
| 	} | ||||
| 	FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT; | ||||
|  | @ -1399,7 +1342,7 @@ DWORD WINAPI FormatThread(LPVOID param) | |||
| 
 | ||||
| 	// Thanks to Microsoft, we must fix the MBR AFTER the drive has been formatted
 | ||||
| 	if (pt == PARTITION_STYLE_MBR) { | ||||
| 		PrintStatus(0, TRUE, MSG_228); | ||||
| 		PrintStatus(0, TRUE, MSG_228);	// "Writing master boot record..."
 | ||||
| 		if (!WriteMBR(hPhysicalDrive)) { | ||||
| 			if (!IS_ERROR(FormatStatus)) | ||||
| 				FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT; | ||||
|  | @ -1435,7 +1378,8 @@ DWORD WINAPI FormatThread(LPVOID param) | |||
| 				FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE; | ||||
| 				goto out; | ||||
| 			} | ||||
| 		} else if ((((dt == DT_WINME) || (dt == DT_FREEDOS)) && (!use_large_fat32)) || ((dt == DT_ISO) && (fs == FS_NTFS))) { | ||||
| 		} else if ((((dt == DT_WINME) || (dt == DT_FREEDOS) || (dt == DT_REACTOS)) && | ||||
| 			(!use_large_fat32)) || ((dt == DT_ISO) && (fs == FS_NTFS))) { | ||||
| 			// We still have a lock, which we need to modify the volume boot record 
 | ||||
| 			// => no need to reacquire the lock...
 | ||||
| 			hLogicalVolume = GetLogicalHandle(DriveIndex, TRUE, FALSE); | ||||
|  |  | |||
|  | @ -23,14 +23,18 @@ | |||
|     <ClInclude Include="..\inc\br_fat12_0x0.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat12_0x3e.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat16fd_0x3e.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat16ros_0x0.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat16ros_0x3e.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat16_0x0.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat16_0x3e.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat32fd_0x3f0.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat32fd_0x52.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat32nt_0x0.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat32nt_0x1800.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat32nt_0x3f0.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat32nt_0x52.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat32ros_0x1c00.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat32ros_0x3f0.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat32ros_0x52.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat32_0x0.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat32_0x3f0.h" /> | ||||
|     <ClInclude Include="..\inc\br_fat32_0x52.h" /> | ||||
|  | @ -45,6 +49,8 @@ | |||
|     <ClInclude Include="..\inc\mbr_95b.h" /> | ||||
|     <ClInclude Include="..\inc\mbr_dos.h" /> | ||||
|     <ClInclude Include="..\inc\mbr_dos_f2.h" /> | ||||
|     <ClInclude Include="..\inc\mbr_reactos.h" /> | ||||
|     <ClInclude Include="..\inc\mbr_rufus.h" /> | ||||
|     <ClInclude Include="..\inc\mbr_syslinux.h" /> | ||||
|     <ClInclude Include="..\inc\mbr_vista.h" /> | ||||
|     <ClInclude Include="..\inc\mbr_win7.h" /> | ||||
|  |  | |||
|  | @ -47,9 +47,6 @@ | |||
|     <ClInclude Include="..\inc\br_fat32fd_0x52.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\inc\br_fat32nt_0x0.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\inc\br_fat32nt_0x1800.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|  | @ -107,6 +104,27 @@ | |||
|     <ClInclude Include="..\inc\br_ntfs_0x54.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\inc\mbr_reactos.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\inc\br_fat32ros_0x1c00.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\inc\br_fat32ros_0x3f0.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\inc\br_fat32ros_0x52.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\inc\br_fat16ros_0x3e.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\inc\br_fat16ros_0x0.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\inc\mbr_rufus.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClCompile Include="..\br.c"> | ||||
|  |  | |||
|  | @ -100,6 +100,26 @@ int is_win7_mbr(FILE *fp) | |||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); | ||||
| } /* is_win7_mbr */ | ||||
| 
 | ||||
| int is_rufus_mbr(FILE *fp) | ||||
| { | ||||
|    #include "mbr_rufus.h" | ||||
|    unsigned char aucRef[] = {0x55, 0xAA}; | ||||
| 
 | ||||
|    return | ||||
|       contains_data(fp, 0x0, mbr_rufus_0x0, sizeof(mbr_rufus_0x0)) && | ||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); | ||||
| } /* is_rufus_mbr */ | ||||
| 
 | ||||
| int is_reactos_mbr(FILE *fp) | ||||
| { | ||||
|    #include "mbr_reactos.h" | ||||
|    unsigned char aucRef[] = {0x55, 0xAA}; | ||||
| 
 | ||||
|    return | ||||
|       contains_data(fp, 0x0, mbr_reactos_0x0, sizeof(mbr_reactos_0x0)) && | ||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); | ||||
| } /* is_reactos_mbr */ | ||||
| 
 | ||||
| int is_syslinux_mbr(FILE *fp) | ||||
| { | ||||
|    #include "mbr_syslinux.h" | ||||
|  | @ -170,6 +190,26 @@ int write_win7_mbr(FILE *fp) | |||
|       write_data(fp, 0x1FE, aucRef, sizeof(aucRef)); | ||||
| } /* write_win7_mbr */ | ||||
| 
 | ||||
| int write_rufus_mbr(FILE *fp) | ||||
| { | ||||
|    #include "mbr_rufus.h" | ||||
|    unsigned char aucRef[] = {0x55, 0xAA}; | ||||
| 
 | ||||
|    return | ||||
|       write_data(fp, 0x0, mbr_rufus_0x0, sizeof(mbr_rufus_0x0)) && | ||||
|       write_data(fp, 0x1FE, aucRef, sizeof(aucRef)); | ||||
| } /* write_rufus_mbr */ | ||||
| 
 | ||||
| int write_reactos_mbr(FILE *fp) | ||||
| { | ||||
|    #include "mbr_reactos.h" | ||||
|    unsigned char aucRef[] = {0x55, 0xAA}; | ||||
| 
 | ||||
|    return | ||||
|       write_data(fp, 0x0, mbr_reactos_0x0, sizeof(mbr_reactos_0x0)) && | ||||
|       write_data(fp, 0x1FE, aucRef, sizeof(aucRef)); | ||||
| } /* write_reactos_mbr */ | ||||
| 
 | ||||
| int write_syslinux_mbr(FILE *fp) | ||||
| { | ||||
|    #include "mbr_syslinux.h" | ||||
|  |  | |||
|  | @ -101,3 +101,33 @@ int write_fat_16_fd_br(FILE *fp, int bKeepLabel) | |||
| 	   write_data(fp, 0x2b, label_11_char, sizeof(label_11_char)) && | ||||
| 	   write_data(fp, 0x3e, br_fat16_0x3e, sizeof(br_fat16_0x3e)) );       | ||||
| } /* write_fat_16_fd_br */ | ||||
| 
 | ||||
| int entire_fat_16_ros_br_matches(FILE *fp) | ||||
| { | ||||
|    #include "br_fat16ros_0x0.h" | ||||
|    #include "br_fat16ros_0x3e.h" | ||||
| 
 | ||||
|    return | ||||
|       ( contains_data(fp, 0x0, br_fat16_0x0, sizeof(br_fat16_0x0)) && | ||||
| 	/* BIOS Parameter Block might differ between systems */ | ||||
| 	contains_data(fp, 0x3e, br_fat16_0x3e, sizeof(br_fat16_0x3e)) ); | ||||
| } /* entire_fat_16_ros_br_matches */ | ||||
| 
 | ||||
| int write_fat_16_ros_br(FILE *fp, int bKeepLabel) | ||||
| { | ||||
|    #include "label_11_char.h" | ||||
|    #include "br_fat16ros_0x0.h" | ||||
|    #include "br_fat16ros_0x3e.h" | ||||
| 
 | ||||
|    if(bKeepLabel) | ||||
|       return | ||||
| 	 ( write_data(fp, 0x0, br_fat16_0x0, sizeof(br_fat16_0x0)) && | ||||
| 	   /* BIOS Parameter Block should not be overwritten */ | ||||
| 	   write_data(fp, 0x3e, br_fat16_0x3e, sizeof(br_fat16_0x3e)) ); | ||||
|    else | ||||
|       return | ||||
| 	 ( write_data(fp, 0x0, br_fat16_0x0, sizeof(br_fat16_0x0)) && | ||||
| 	   /* BIOS Parameter Block should not be overwritten */ | ||||
| 	   write_data(fp, 0x2b, label_11_char, sizeof(label_11_char)) && | ||||
| 	   write_data(fp, 0x3e, br_fat16_0x3e, sizeof(br_fat16_0x3e)) );       | ||||
| } /* write_fat_16_ros_br */ | ||||
|  |  | |||
|  | @ -70,7 +70,7 @@ int write_fat_32_br(FILE *fp, int bKeepLabel) | |||
| 	 ( write_data(fp, 0x0, br_fat32_0x0, sizeof(br_fat32_0x0)) && | ||||
| 	   /* BIOS Parameter Block should not be overwritten */ | ||||
| 	   write_data(fp, 0x52, br_fat32_0x52, sizeof(br_fat32_0x52)) && | ||||
| 	   /* Cluster information is not overwritten, however, it would bo OK
 | ||||
| 	   /* Cluster information is not overwritten, however, it would be OK
 | ||||
| 	      to write 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff here. */ | ||||
| 	   write_data(fp, 0x3f0, br_fat32_0x3f0, sizeof(br_fat32_0x3f0)) ); | ||||
|    else | ||||
|  | @ -79,7 +79,7 @@ int write_fat_32_br(FILE *fp, int bKeepLabel) | |||
| 	   /* BIOS Parameter Block should not be overwritten */ | ||||
| 	   write_data(fp, 0x47, label_11_char, sizeof(label_11_char)) && | ||||
| 	   write_data(fp, 0x52, br_fat32_0x52, sizeof(br_fat32_0x52)) && | ||||
| 	   /* Cluster information is not overwritten, however, it would bo OK
 | ||||
| 	   /* Cluster information is not overwritten, however, it would be OK
 | ||||
| 	      to write 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff here. */ | ||||
| 	   write_data(fp, 0x3f0, br_fat32_0x3f0, sizeof(br_fat32_0x3f0)) ); | ||||
| } /* write_fat_32_br */ | ||||
|  | @ -110,7 +110,7 @@ int write_fat_32_fd_br(FILE *fp, int bKeepLabel) | |||
| 	 ( write_data(fp, 0x0, br_fat32_0x0, sizeof(br_fat32_0x0)) && | ||||
| 	   /* BIOS Parameter Block should not be overwritten */ | ||||
| 	   write_data(fp, 0x52, br_fat32_0x52, sizeof(br_fat32_0x52)) && | ||||
| 	   /* Cluster information is not overwritten, however, it would bo OK
 | ||||
| 	   /* Cluster information is not overwritten, however, it would be OK
 | ||||
| 	      to write 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff here. */ | ||||
| 	   write_data(fp, 0x3f0, br_fat32_0x3f0, sizeof(br_fat32_0x3f0)) ); | ||||
|    else | ||||
|  | @ -119,20 +119,20 @@ int write_fat_32_fd_br(FILE *fp, int bKeepLabel) | |||
| 	   /* BIOS Parameter Block should not be overwritten */ | ||||
| 	   write_data(fp, 0x47, label_11_char, sizeof(label_11_char)) && | ||||
| 	   write_data(fp, 0x52, br_fat32_0x52, sizeof(br_fat32_0x52)) && | ||||
| 	   /* Cluster information is not overwritten, however, it would bo OK
 | ||||
| 	   /* Cluster information is not overwritten, however, it would be OK
 | ||||
| 	      to write 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff here. */ | ||||
| 	   write_data(fp, 0x3f0, br_fat32_0x3f0, sizeof(br_fat32_0x3f0)) ); | ||||
| } /* write_fat_32_nt_br */ | ||||
| } /* write_fat_32_fd_br */ | ||||
| 
 | ||||
| int entire_fat_32_nt_br_matches(FILE *fp) | ||||
| { | ||||
|    #include "br_fat32nt_0x0.h" | ||||
|    #include "br_fat32_0x0.h" | ||||
|    #include "br_fat32nt_0x52.h" | ||||
|    #include "br_fat32nt_0x3f0.h" | ||||
|    #include "br_fat32nt_0x1800.h" | ||||
| 
 | ||||
|    return | ||||
|       ( contains_data(fp, 0x0, br_fat32nt_0x0, sizeof(br_fat32nt_0x0)) && | ||||
|       ( contains_data(fp, 0x0, br_fat32_0x0, sizeof(br_fat32_0x0)) && | ||||
| 	/* BIOS Parameter Block might differ between systems */ | ||||
| 	contains_data(fp, 0x52, br_fat32nt_0x52, sizeof(br_fat32nt_0x52)) && | ||||
| 	/* Cluster information might differ between systems */ | ||||
|  | @ -144,30 +144,79 @@ int entire_fat_32_nt_br_matches(FILE *fp) | |||
| int write_fat_32_nt_br(FILE *fp, int bKeepLabel) | ||||
| { | ||||
|    #include "label_11_char.h" | ||||
|    #include "br_fat32nt_0x0.h" | ||||
|    #include "br_fat32_0x0.h" | ||||
|    #include "br_fat32nt_0x52.h" | ||||
|    #include "br_fat32nt_0x3f0.h" | ||||
|    #include "br_fat32nt_0x1800.h" | ||||
| 
 | ||||
|    if(bKeepLabel) | ||||
|       return | ||||
| 	 ( write_data(fp, 0x0, br_fat32nt_0x0, sizeof(br_fat32nt_0x0)) && | ||||
| 	 ( write_data(fp, 0x0, br_fat32_0x0, sizeof(br_fat32_0x0)) && | ||||
| 	   /* BIOS Parameter Block should not be overwritten */ | ||||
| 	   write_data(fp, 0x52, br_fat32nt_0x52, sizeof(br_fat32nt_0x52)) && | ||||
|    /* Cluster information is not overwritten, however, it would bo OK
 | ||||
|    /* Cluster information is not overwritten, however, it would be OK
 | ||||
|       to write 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff here. */ | ||||
| 	   write_data(fp, 0x3f0, br_fat32nt_0x3f0, sizeof(br_fat32nt_0x3f0)) && | ||||
| 	   write_data(fp, 0x1800, br_fat32nt_0x1800, sizeof(br_fat32nt_0x1800)) | ||||
| 	    ); | ||||
|    else | ||||
|       return | ||||
| 	 ( write_data(fp, 0x0, br_fat32nt_0x0, sizeof(br_fat32nt_0x0)) && | ||||
| 	 ( write_data(fp, 0x0, br_fat32_0x0, sizeof(br_fat32_0x0)) && | ||||
| 	   /* BIOS Parameter Block should not be overwritten */ | ||||
| 	   write_data(fp, 0x47, label_11_char, sizeof(label_11_char)) && | ||||
| 	   write_data(fp, 0x52, br_fat32nt_0x52, sizeof(br_fat32nt_0x52)) && | ||||
|    /* Cluster information is not overwritten, however, it would bo OK
 | ||||
|    /* Cluster information is not overwritten, however, it would be OK
 | ||||
|       to write 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff here. */ | ||||
| 	   write_data(fp, 0x3f0, br_fat32nt_0x3f0, sizeof(br_fat32nt_0x3f0)) && | ||||
| 	   write_data(fp, 0x1800, br_fat32nt_0x1800, sizeof(br_fat32nt_0x1800)) | ||||
| 	    ); | ||||
| } /* write_fat_32_nt_br */ | ||||
| 
 | ||||
| int entire_fat_32_ros_br_matches(FILE *fp) | ||||
| { | ||||
|    #include "br_fat32_0x0.h" | ||||
|    #include "br_fat32ros_0x52.h" | ||||
|    #include "br_fat32ros_0x3f0.h" | ||||
|    #include "br_fat32ros_0x1c00.h" | ||||
| 
 | ||||
|    return | ||||
|       ( contains_data(fp, 0x0, br_fat32_0x0, sizeof(br_fat32_0x0)) && | ||||
| 	/* BIOS Parameter Block might differ between systems */ | ||||
| 	contains_data(fp, 0x52, br_fat32ros_0x52, sizeof(br_fat32ros_0x52)) && | ||||
| 	/* Cluster information might differ between systems */ | ||||
| 	contains_data(fp, 0x3f0, br_fat32ros_0x3f0, sizeof(br_fat32ros_0x3f0)) && | ||||
| 	contains_data(fp, 0x1c00, br_fat32ros_0x1c00, sizeof(br_fat32ros_0x1c00)) | ||||
| 	 ); | ||||
| } /* entire_fat_32_ros_br_matches */ | ||||
| 
 | ||||
| /* See http://doxygen.reactos.org/dc/d83/bootsup_8c_source.html#l01596 */ | ||||
| int write_fat_32_ros_br(FILE *fp, int bKeepLabel) | ||||
| { | ||||
|    #include "label_11_char.h" | ||||
|    #include "br_fat32_0x0.h" | ||||
|    #include "br_fat32ros_0x52.h" | ||||
|    #include "br_fat32ros_0x3f0.h" | ||||
|    #include "br_fat32ros_0x1c00.h" | ||||
| 
 | ||||
|    if(bKeepLabel) | ||||
|       return | ||||
| 	 ( write_data(fp, 0x0, br_fat32_0x0, sizeof(br_fat32_0x0)) && | ||||
| 	   /* BIOS Parameter Block should not be overwritten */ | ||||
| 	   write_data(fp, 0x52, br_fat32ros_0x52, sizeof(br_fat32ros_0x52)) && | ||||
|    /* Cluster information is not overwritten, however, it would be OK
 | ||||
|       to write 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff here. */ | ||||
| 	   write_data(fp, 0x3f0, br_fat32ros_0x3f0, sizeof(br_fat32ros_0x3f0)) && | ||||
| 	   write_data(fp, 0x1c00, br_fat32ros_0x1c00, sizeof(br_fat32ros_0x1c00)) | ||||
| 	    ); | ||||
|    else | ||||
|       return | ||||
| 	 ( write_data(fp, 0x0, br_fat32_0x0, sizeof(br_fat32_0x0)) && | ||||
| 	   /* BIOS Parameter Block should not be overwritten */ | ||||
| 	   write_data(fp, 0x47, label_11_char, sizeof(label_11_char)) && | ||||
| 	   write_data(fp, 0x52, br_fat32ros_0x52, sizeof(br_fat32ros_0x52)) && | ||||
|    /* Cluster information is not overwritten, however, it would be OK
 | ||||
|       to write 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff here. */ | ||||
| 	   write_data(fp, 0x3f0, br_fat32ros_0x3f0, sizeof(br_fat32ros_0x3f0)) && | ||||
| 	   write_data(fp, 0x1c00, br_fat32ros_0x1c00, sizeof(br_fat32ros_0x1c00)) | ||||
| 	    ); | ||||
| } /* write_fat_32_ros_br */ | ||||
|  |  | |||
|  | @ -40,6 +40,10 @@ int is_win7_mbr(FILE *fp); | |||
|    FALSE.The file position will change when this function is called! */ | ||||
| int is_rufus_mbr(FILE *fp); | ||||
| 
 | ||||
| /* returns TRUE if the file has a ReactOS master boot record, otherwise
 | ||||
|    FALSE.The file position will change when this function is called! */ | ||||
| int is_reactos_mbr(FILE *fp); | ||||
| 
 | ||||
| /* returns TRUE if the file has a syslinux master boot record, otherwise
 | ||||
|    FALSE.The file position will change when this function is called! */ | ||||
| int is_syslinux_mbr(FILE *fp); | ||||
|  | @ -64,7 +68,7 @@ int write_2000_mbr(FILE *fp); | |||
|    FALSE */ | ||||
| int write_vista_mbr(FILE *fp); | ||||
| 
 | ||||
| /* Writes a 7 master boot record to a file, returns TRUE on success, otherwise
 | ||||
| /* Writes a Windows 7 master boot record to a file, returns TRUE on success, otherwise
 | ||||
|    FALSE */ | ||||
| int write_win7_mbr(FILE *fp); | ||||
| 
 | ||||
|  | @ -72,6 +76,10 @@ int write_win7_mbr(FILE *fp); | |||
|    FALSE */ | ||||
| int write_rufus_mbr(FILE *fp); | ||||
| 
 | ||||
| /* Writes a ReactOS master boot record to a file, returns TRUE on success, otherwise
 | ||||
|    FALSE */ | ||||
| int write_reactos_mbr(FILE *fp); | ||||
| 
 | ||||
| /* Writes a syslinux master boot record to a file, returns TRUE on success, otherwise
 | ||||
|    FALSE */ | ||||
| int write_syslinux_mbr(FILE *fp); | ||||
|  |  | |||
							
								
								
									
										3
									
								
								src/ms-sys/inc/br_fat16ros_0x0.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/ms-sys/inc/br_fat16ros_0x0.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| unsigned char br_fat16_0x0[] = { | ||||
|   0xeb, 0x71, 0x90, 0x46, 0x72, 0x4c, 0x64, 0x72, 0x31, 0x2e, 0x30 | ||||
| }; | ||||
							
								
								
									
										40
									
								
								src/ms-sys/inc/br_fat16ros_0x3e.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/ms-sys/inc/br_fat16ros_0x3e.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| unsigned char br_fat16_0x3e[] = { | ||||
| 	0x46, 0x52, 0x45, 0x45, 0x4c, 0x44, 0x52, 0x20, 0x53, 0x59, 0x53, 0x4c, | ||||
| 	0x6f, 0x61, 0x64, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x21, 0x0d, | ||||
| 	0x0a, 0x00, 0x50, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20, | ||||
| 	0x6b, 0x65, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x62, 0x6f, 0x6f, | ||||
| 	0x74, 0x2e, 0x2e, 0x2e, 0x00, 0x31, 0xc0, 0x8e, 0xd8, 0x8e, 0xd0, 0xbc, | ||||
| 	0xe0, 0x7b, 0x89, 0xe5, 0xa0, 0x24, 0x7c, 0x3c, 0xff, 0x74, 0x02, 0x88, | ||||
| 	0xc2, 0x88, 0x16, 0x24, 0x7c, 0x31, 0xff, 0xb4, 0x08, 0xcd, 0x13, 0x0f, | ||||
| 	0x82, 0xb8, 0x00, 0x66, 0x0f, 0xb6, 0xdd, 0x88, 0xcf, 0xc0, 0xef, 0x06, | ||||
| 	0x80, 0xe1, 0x3f, 0x66, 0x0f, 0xb6, 0xc9, 0x66, 0x0f, 0xb6, 0xc6, 0x66, | ||||
| 	0x40, 0x66, 0x43, 0x66, 0xf7, 0xe1, 0x66, 0xf7, 0xe3, 0x66, 0x89, 0x46, | ||||
| 	0x08, 0x66, 0x0f, 0xb7, 0x86, 0x2e, 0x00, 0x66, 0x03, 0x86, 0x3c, 0x00, | ||||
| 	0x66, 0x0f, 0xb7, 0x8e, 0x36, 0x00, 0x66, 0x60, 0xbb, 0x00, 0x80, 0x8e, | ||||
| 	0xc3, 0x31, 0xff, 0xe8, 0xb9, 0x00, 0x66, 0x61, 0x66, 0x89, 0xc3, 0x66, | ||||
| 	0x0f, 0xb6, 0x86, 0x30, 0x00, 0x66, 0xf7, 0xe1, 0x66, 0x01, 0xd8, 0x66, | ||||
| 	0x89, 0x46, 0x04, 0x66, 0x0f, 0xb7, 0x9e, 0x31, 0x00, 0x66, 0x83, 0xc3, | ||||
| 	0x0f, 0x66, 0xc1, 0xeb, 0x04, 0x66, 0x01, 0xc3, 0x66, 0x89, 0x5e, 0x00, | ||||
| 	0xbb, 0x00, 0x10, 0x8e, 0xc3, 0x31, 0xff, 0x31, 0xc9, 0x41, 0x06, 0xe8, | ||||
| 	0x81, 0x00, 0x07, 0xba, 0x10, 0x00, 0x31, 0xdb, 0x89, 0xdf, 0x26, 0x38, | ||||
| 	0x2d, 0x74, 0x34, 0xbe, 0x3e, 0x7c, 0xb9, 0x0b, 0x00, 0xf3, 0xa6, 0x74, | ||||
| 	0x08, 0x83, 0xc3, 0x20, 0x4a, 0x75, 0xe9, 0xeb, 0xd3, 0x26, 0x66, 0x0f, | ||||
| 	0xb7, 0x47, 0x1a, 0xba, 0x80, 0x0f, 0x8e, 0xc2, 0x31, 0xff, 0xe8, 0x24, | ||||
| 	0x00, 0x83, 0xf8, 0xf8, 0x72, 0xf8, 0x8a, 0x16, 0x24, 0x7c, 0x8a, 0x36, | ||||
| 	0xfd, 0x7d, 0xea, 0x00, 0xf8, 0x00, 0x00, 0xbe, 0x49, 0x7c, 0xe8, 0x7b, | ||||
| 	0x00, 0xbe, 0x58, 0x7c, 0xe8, 0x75, 0x00, 0x31, 0xc0, 0xcd, 0x16, 0xcd, | ||||
| 	0x19, 0x66, 0x60, 0x66, 0x48, 0x66, 0x48, 0x66, 0x0f, 0xb6, 0x8e, 0x2d, | ||||
| 	0x00, 0x66, 0xf7, 0xe1, 0x66, 0x03, 0x46, 0x00, 0xe8, 0x18, 0x00, 0x66, | ||||
| 	0x61, 0x06, 0xbb, 0x02, 0x00, 0xf7, 0xe3, 0xc1, 0xe2, 0x0c, 0x81, 0xc2, | ||||
| 	0x00, 0x80, 0x8e, 0xc2, 0x89, 0xc3, 0x26, 0x8b, 0x07, 0x07, 0xc3, 0x66, | ||||
| 	0x0f, 0xb7, 0xd9, 0x83, 0xfb, 0x40, 0x76, 0x03, 0xbb, 0x40, 0x00, 0x66, | ||||
| 	0x60, 0x66, 0x6a, 0x00, 0x66, 0x50, 0x06, 0x57, 0x53, 0x6a, 0x10, 0x89, | ||||
| 	0xe6, 0x8a, 0x16, 0x24, 0x7c, 0xb4, 0x42, 0xcd, 0x13, 0x72, 0x9c, 0x83, | ||||
| 	0xc4, 0x10, 0xc1, 0xe3, 0x05, 0x8c, 0xc0, 0x01, 0xd8, 0x8e, 0xc0, 0x66, | ||||
| 	0x61, 0x66, 0x01, 0xd8, 0x29, 0xd9, 0x75, 0xc7, 0xc3, 0xb4, 0x0e, 0xbb, | ||||
| 	0x07, 0x00, 0xcd, 0x10, 0xac, 0x08, 0xc0, 0x75, 0xf4, 0xc3, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x55, 0xaa | ||||
| }; | ||||
|  | @ -1,3 +0,0 @@ | |||
| unsigned char br_fat32nt_0x0[] = { | ||||
|   0xeb, 0x58, 0x90, 0x4d, 0x53, 0x57, 0x49, 0x4e, 0x34, 0x2e, 0x31 | ||||
| }; | ||||
							
								
								
									
										45
									
								
								src/ms-sys/inc/br_fat32ros_0x1c00.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/ms-sys/inc/br_fat32ros_0x1c00.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | |||
| unsigned char br_fat32ros_0x1c00[] = { | ||||
| 	0x66, 0x8b, 0x86, 0x2c, 0x00, 0x66, 0x3d, 0xf8, 0xff, 0xff, 0x0f, 0x72, | ||||
| 	0x03, 0xe9, 0x6c, 0x01, 0xbb, 0x00, 0x20, 0x8e, 0xc3, 0xe8, 0x26, 0x01, | ||||
| 	0x31, 0xdb, 0x8a, 0x9e, 0x0d, 0x00, 0xc1, 0xe3, 0x04, 0xb8, 0x00, 0x20, | ||||
| 	0x8e, 0xc0, 0x31, 0xff, 0xbe, 0xa3, 0x7f, 0xb9, 0x0b, 0x00, 0xf3, 0xa6, | ||||
| 	0x74, 0x2b, 0x4b, 0x75, 0x03, 0xe9, 0x44, 0x01, 0x8c, 0xc0, 0x83, 0xc0, | ||||
| 	0x02, 0x8e, 0xc0, 0x31, 0xff, 0xbe, 0xa3, 0x7f, 0xb9, 0x0b, 0x00, 0xf3, | ||||
| 	0xa6, 0x74, 0x12, 0x4b, 0x75, 0xea, 0x66, 0x8b, 0x86, 0x2c, 0x00, 0xe8, | ||||
| 	0x6c, 0x00, 0x66, 0x89, 0x86, 0x2c, 0x00, 0xeb, 0xa3, 0xbe, 0xae, 0x7f, | ||||
| 	0xe8, 0x42, 0xff, 0x31, 0xff, 0x31, 0xd2, 0x26, 0x8b, 0x45, 0x14, 0x66, | ||||
| 	0xc1, 0xe0, 0x10, 0x26, 0x8b, 0x45, 0x1a, 0x66, 0x83, 0xf8, 0x02, 0x73, | ||||
| 	0x03, 0xe9, 0x17, 0xff, 0x66, 0x3d, 0xf8, 0xff, 0xff, 0x0f, 0x72, 0x03, | ||||
| 	0xe9, 0x0c, 0xff, 0xbb, 0x80, 0x0f, 0x8e, 0xc3, 0x66, 0x3d, 0xf8, 0xff, | ||||
| 	0xff, 0x0f, 0x73, 0x21, 0x66, 0x50, 0x31, 0xdb, 0x06, 0xe8, 0xa2, 0x00, | ||||
| 	0x07, 0x31, 0xdb, 0x8a, 0x9e, 0x0d, 0x00, 0xc1, 0xe3, 0x05, 0x8c, 0xc0, | ||||
| 	0x01, 0xd8, 0x8e, 0xc0, 0x66, 0x58, 0x06, 0xe8, 0x10, 0x00, 0x07, 0xeb, | ||||
| 	0xd7, 0x8a, 0x96, 0x40, 0x00, 0x8a, 0x36, 0xfd, 0x7d, 0xea, 0x00, 0xf8, | ||||
| 	0x00, 0x00, 0x66, 0xc1, 0xe0, 0x02, 0x66, 0x89, 0xc1, 0x66, 0x31, 0xd2, | ||||
| 	0x66, 0x0f, 0xb7, 0x9e, 0x0b, 0x00, 0x66, 0x53, 0x66, 0xf7, 0xf3, 0x66, | ||||
| 	0x0f, 0xb7, 0x9e, 0x0e, 0x00, 0x66, 0x01, 0xd8, 0x66, 0x8b, 0x9e, 0x1c, | ||||
| 	0x00, 0x66, 0x01, 0xd8, 0x66, 0x5b, 0x66, 0x4b, 0x66, 0x21, 0xd9, 0x66, | ||||
| 	0x0f, 0xb7, 0x9e, 0x28, 0x00, 0x83, 0xe3, 0x0f, 0x74, 0x18, 0x3a, 0x9e, | ||||
| 	0x10, 0x00, 0x72, 0x03, 0xe9, 0x90, 0xfe, 0x66, 0x50, 0x66, 0x8b, 0x86, | ||||
| 	0x24, 0x00, 0x66, 0xf7, 0xe3, 0x66, 0x5a, 0x66, 0x01, 0xd0, 0x66, 0x51, | ||||
| 	0xbb, 0x00, 0x90, 0x8e, 0xc3, 0x66, 0x3b, 0x06, 0x3a, 0x7f, 0x74, 0x0c, | ||||
| 	0x66, 0xa3, 0x3a, 0x7f, 0x31, 0xdb, 0xb9, 0x01, 0x00, 0xe8, 0xaf, 0xfd, | ||||
| 	0x66, 0x59, 0x26, 0x67, 0x66, 0x8b, 0x01, 0x66, 0x25, 0xff, 0xff, 0xff, | ||||
| 	0x0f, 0xc3, 0xff, 0xff, 0xff, 0xff, 0x66, 0x48, 0x66, 0x48, 0x66, 0x31, | ||||
| 	0xd2, 0x66, 0x0f, 0xb6, 0x9e, 0x0d, 0x00, 0x66, 0xf7, 0xe3, 0x66, 0x50, | ||||
| 	0x66, 0x31, 0xd2, 0x66, 0x0f, 0xb6, 0x86, 0x10, 0x00, 0x66, 0xf7, 0xa6, | ||||
| 	0x24, 0x00, 0x66, 0x0f, 0xb7, 0x9e, 0x0e, 0x00, 0x66, 0x01, 0xd8, 0x66, | ||||
| 	0x03, 0x86, 0x1c, 0x00, 0x66, 0x5b, 0x66, 0x01, 0xd8, 0x31, 0xdb, 0x0f, | ||||
| 	0xb6, 0x8e, 0x0d, 0x00, 0xe8, 0x60, 0xfd, 0xc3, 0xbe, 0x8b, 0x7f, 0xe8, | ||||
| 	0x23, 0xfe, 0xbe, 0xd9, 0x7d, 0xe8, 0x1d, 0xfe, 0xe9, 0x0e, 0xfe, 0x66, | ||||
| 	0x72, 0x65, 0x65, 0x6c, 0x64, 0x72, 0x2e, 0x73, 0x79, 0x73, 0x20, 0x6e, | ||||
| 	0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x0d, 0x0a, 0x00, 0x46, | ||||
| 	0x52, 0x45, 0x45, 0x4c, 0x44, 0x52, 0x20, 0x53, 0x59, 0x53, 0x4c, 0x6f, | ||||
| 	0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x46, 0x72, 0x65, 0x65, 0x4c, 0x6f, | ||||
| 	0x61, 0x64, 0x65, 0x72, 0x2e, 0x2e, 0x2e, 0x0d, 0x0a, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa | ||||
| }; | ||||
							
								
								
									
										4
									
								
								src/ms-sys/inc/br_fat32ros_0x3f0.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/ms-sys/inc/br_fat32ros_0x3f0.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| unsigned char br_fat32ros_0x3f0[] = { | ||||
|   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
|   0x00, 0x00, 0x55, 0xaa | ||||
| }; | ||||
							
								
								
									
										79
									
								
								src/ms-sys/inc/br_fat32ros_0x52.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								src/ms-sys/inc/br_fat32ros_0x52.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,79 @@ | |||
| unsigned char br_fat32ros_0x52[] = { | ||||
| 	0x46, 0x41, 0x54, 0x33, 0x32, 0x20, 0x20, 0x20, 0x31, 0xc0, 0x8e, 0xd8, | ||||
| 	0x8e, 0xc0, 0x8e, 0xd0, 0xbd, 0x00, 0x7c, 0xbc, 0x00, 0x7c, 0x80, 0xbe, | ||||
| 	0x40, 0x00, 0xff, 0x75, 0x04, 0x88, 0x96, 0x40, 0x00, 0x83, 0xbe, 0x16, | ||||
| 	0x00, 0x00, 0x75, 0x0f, 0x66, 0x83, 0xbe, 0x11, 0x00, 0x00, 0x75, 0x07, | ||||
| 	0x83, 0xbe, 0x2a, 0x00, 0x00, 0x76, 0x03, 0xe9, 0x07, 0x01, 0xb8, 0x00, | ||||
| 	0x08, 0x8a, 0x96, 0x40, 0x00, 0xcd, 0x13, 0x73, 0x05, 0xb9, 0xff, 0xff, | ||||
| 	0x88, 0xce, 0x88, 0xeb, 0x88, 0xcf, 0xc0, 0xef, 0x06, 0x80, 0xe1, 0x3f, | ||||
| 	0x66, 0x0f, 0xb6, 0xc6, 0x66, 0x0f, 0xb7, 0xdb, 0x66, 0x0f, 0xb6, 0xc9, | ||||
| 	0x66, 0x40, 0x66, 0x43, 0x66, 0xf7, 0xe1, 0x66, 0xf7, 0xe3, 0x66, 0xa3, | ||||
| 	0xb4, 0x7d, 0x66, 0xb8, 0x0e, 0x00, 0x00, 0x00, 0x66, 0x03, 0x86, 0x1c, | ||||
| 	0x00, 0xb9, 0x01, 0x00, 0x31, 0xdb, 0x8e, 0xc3, 0xbb, 0x00, 0x7e, 0xe8, | ||||
| 	0x03, 0x00, 0xe9, 0x25, 0x01, 0x06, 0x66, 0x3b, 0x06, 0xb4, 0x7d, 0x73, | ||||
| 	0x1c, 0x66, 0x60, 0xb4, 0x41, 0xbb, 0xaa, 0x55, 0x8a, 0x96, 0x40, 0x00, | ||||
| 	0xcd, 0x13, 0x72, 0x57, 0x81, 0xfb, 0x55, 0xaa, 0x75, 0x51, 0xf6, 0xc1, | ||||
| 	0x01, 0x74, 0x4c, 0x66, 0x61, 0x66, 0x60, 0x83, 0xf9, 0x40, 0x76, 0x03, | ||||
| 	0xb9, 0x40, 0x00, 0x89, 0x0e, 0x45, 0x7d, 0x6a, 0x00, 0x6a, 0x00, 0x66, | ||||
| 	0x50, 0x06, 0x53, 0x51, 0x6a, 0x10, 0x89, 0xe6, 0x8a, 0x96, 0x40, 0x00, | ||||
| 	0xb4, 0x42, 0xcd, 0x13, 0x72, 0x67, 0x83, 0xc4, 0x10, 0x66, 0x61, 0x53, | ||||
| 	0x66, 0x8b, 0x1e, 0x45, 0x7d, 0x66, 0x01, 0xd8, 0x66, 0xc1, 0xe3, 0x05, | ||||
| 	0x8c, 0xc2, 0x01, 0xda, 0x8e, 0xc2, 0x5b, 0x2b, 0x0e, 0x45, 0x7d, 0x75, | ||||
| 	0xbc, 0x07, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x66, 0x61, 0x66, 0x60, 0x66, | ||||
| 	0x31, 0xd2, 0x66, 0x0f, 0xb7, 0x8e, 0x18, 0x00, 0x66, 0xf7, 0xf1, 0xfe, | ||||
| 	0xc2, 0x88, 0xd1, 0x66, 0x89, 0xc2, 0x66, 0xc1, 0xea, 0x10, 0xf7, 0xb6, | ||||
| 	0x1a, 0x00, 0x88, 0xd6, 0x8a, 0x96, 0x40, 0x00, 0x88, 0xc5, 0xd0, 0xcc, | ||||
| 	0xd0, 0xcc, 0x08, 0xe1, 0xb8, 0x01, 0x02, 0xcd, 0x13, 0x72, 0x0e, 0x66, | ||||
| 	0x61, 0x66, 0x40, 0x8c, 0xc2, 0x83, 0xc2, 0x20, 0x8e, 0xc2, 0xe2, 0xc1, | ||||
| 	0xc3, 0xbe, 0xb8, 0x7d, 0xe8, 0x14, 0x00, 0xeb, 0x06, 0xbe, 0xc5, 0x7d, | ||||
| 	0xe8, 0x0c, 0x00, 0xbe, 0xd9, 0x7d, 0xe8, 0x06, 0x00, 0x31, 0xc0, 0xcd, | ||||
| 	0x16, 0xcd, 0x19, 0xac, 0x08, 0xc0, 0x74, 0x09, 0xb4, 0x0e, 0xbb, 0x07, | ||||
| 	0x00, 0xcd, 0x10, 0xeb, 0xf2, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x44, 0x69, | ||||
| 	0x73, 0x6b, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0d, 0x0a, 0x00, 0x46, | ||||
| 	0x69, 0x6c, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x65, | ||||
| 	0x72, 0x72, 0x6f, 0x72, 0x0d, 0x0a, 0x00, 0x50, 0x72, 0x65, 0x73, 0x73, | ||||
| 	0x20, 0x61, 0x6e, 0x79, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x74, 0x6f, 0x20, | ||||
| 	0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x0d, 0x0a, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa, 0x52, 0x52, | ||||
| 	0x61, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x00, 0x72, 0x72, 0x41, 0x61 | ||||
| }; | ||||
|  | @ -29,4 +29,13 @@ int entire_fat_16_fd_br_matches(FILE *fp); | |||
|    otherwise FALSE */ | ||||
| int write_fat_16_fd_br(FILE *fp, int bKeepLabel); | ||||
| 
 | ||||
| /* returns TRUE if the file has an exact match of the FAT16 boot record this
 | ||||
|    program would create for ReactOS, otherwise FALSE. | ||||
|    The file position will change when this function is called! */ | ||||
| int entire_fat_16_ros_br_matches(FILE *fp); | ||||
| 
 | ||||
| /* Writes a FAT16 ReactOS boot record to a file, returns TRUE on success,
 | ||||
|    otherwise FALSE */ | ||||
| int write_fat_16_ros_br(FILE *fp, int bKeepLabel); | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
|  | @ -38,4 +38,13 @@ int entire_fat_32_nt_br_matches(FILE *fp); | |||
|    FALSE */ | ||||
| int write_fat_32_nt_br(FILE *fp, int bKeepLabel); | ||||
| 
 | ||||
| /* returns TRUE if the file has an exact match of the FAT32 boot record this
 | ||||
|    program would create for ReactOS, otherwise FALSE. | ||||
|    The file position will change when this function is called! */ | ||||
| int entire_fat_32_ros_br_matches(FILE *fp); | ||||
| 
 | ||||
| /* Writes a FAT32 ReactOS boot record to a file, returns TRUE on success, otherwise
 | ||||
|    FALSE */ | ||||
| int write_fat_32_ros_br(FILE *fp, int bKeepLabel); | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
							
								
								
									
										26
									
								
								src/ms-sys/inc/mbr_reactos.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/ms-sys/inc/mbr_reactos.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| /* First 267 bytes of MBR from ReactOS */ | ||||
| unsigned char mbr_reactos_0x0[] = { | ||||
| 	0xfa, 0xfc, 0x31, 0xc0, 0x8e, 0xd0, 0x8e, 0xd8, 0xbd, 0x00, 0x7c, 0x8d, | ||||
| 	0x66, 0xe0, 0xfb, 0xb8, 0xe0, 0x1f, 0x8e, 0xc0, 0x89, 0xee, 0x89, 0xef, | ||||
| 	0xb9, 0x00, 0x01, 0xf3, 0xa5, 0xea, 0x22, 0x7c, 0xe0, 0x1f, 0x8e, 0xd8, | ||||
| 	0x8e, 0xd0, 0x31, 0xc0, 0x8e, 0xc0, 0x8d, 0xbe, 0xbe, 0x01, 0xf6, 0x05, | ||||
| 	0x80, 0x75, 0x6d, 0x83, 0xc7, 0x10, 0x81, 0xff, 0xfe, 0x7d, 0x72, 0xf2, | ||||
| 	0xe8, 0xc4, 0x00, 0x6e, 0x6f, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, | ||||
| 	0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, | ||||
| 	0x6f, 0x75, 0x6e, 0x64, 0x00, 0xeb, 0xfe, 0xe8, 0xa5, 0x00, 0x72, 0x65, | ||||
| 	0x61, 0x64, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x77, 0x68, 0x69, | ||||
| 	0x6c, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, | ||||
| 	0x72, 0x69, 0x76, 0x65, 0x00, 0xeb, 0xda, 0xe8, 0x81, 0x00, 0x70, 0x61, | ||||
| 	0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x69, 0x67, 0x6e, | ||||
| 	0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x35, 0x35, 0x41, | ||||
| 	0x41, 0x00, 0xeb, 0xb9, 0xe8, 0x10, 0x00, 0x72, 0xb6, 0x26, 0x81, 0x3e, | ||||
| 	0xfe, 0x7d, 0x55, 0xaa, 0x75, 0xd1, 0xea, 0x00, 0x7c, 0x00, 0x00, 0xbb, | ||||
| 	0xaa, 0x55, 0xb4, 0x41, 0xcd, 0x13, 0x72, 0x32, 0x81, 0xfb, 0x55, 0xaa, | ||||
| 	0x75, 0x2c, 0xf6, 0xc1, 0x01, 0x74, 0x27, 0xeb, 0x10, 0x10, 0x00, 0x04, | ||||
| 	0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
| 	0x00, 0x8b, 0x45, 0x08, 0xa3, 0xd1, 0x7c, 0x8b, 0x45, 0x0a, 0xa3, 0xd3, | ||||
| 	0x7c, 0xb8, 0x00, 0x42, 0xbe, 0xc9, 0x7c, 0xcd, 0x13, 0xc3, 0xb8, 0x04, | ||||
| 	0x02, 0xbb, 0x00, 0x7c, 0x8b, 0x4d, 0x02, 0x8a, 0x75, 0x01, 0xcd, 0x13, | ||||
| 	0xc3, 0x31, 0xdb, 0xb4, 0x0e, 0xcd, 0x10, 0x5e, 0xac, 0x56, 0x3c, 0x00, | ||||
| 	0x75, 0xf3, 0xc3 | ||||
| }; | ||||
							
								
								
									
										44
									
								
								src/ms-sys/inc/mbr_rufus.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/ms-sys/inc/mbr_rufus.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | |||
| /*
 | ||||
|  * First 440 bytes of Rufus MBR | ||||
|  * https://github.com/pbatard/rufus/tree/master/res/mbr
 | ||||
|  * Copyright © 2012-2014 Pete Batard <pete@akeo.ie> | ||||
|  */ | ||||
| unsigned char mbr_rufus_0x0[] = { | ||||
| 	0x41, 0x4b, 0x45, 0x4f, 0xfc, 0x31, 0xc0, 0xfa, 0x8e, 0xd0, 0xbc, 0x00, | ||||
| 	0x7c, 0xfb, 0x89, 0xe6, 0x89, 0xe7, 0x1e, 0x06, 0x8e, 0xd8, 0xbb, 0x13, | ||||
| 	0x04, 0x8b, 0x07, 0x48, 0x89, 0x07, 0xc1, 0xe0, 0x06, 0x2d, 0xc0, 0x07, | ||||
| 	0x8e, 0xc0, 0xb9, 0x00, 0x02, 0xf3, 0xa4, 0x50, 0x68, 0x30, 0x7c, 0xcb, | ||||
| 	0x8e, 0xd8, 0x66, 0x31, 0xdb, 0x8e, 0xc3, 0x41, 0xba, 0x81, 0x00, 0xe8, | ||||
| 	0x89, 0x00, 0x72, 0x6d, 0xbb, 0xbe, 0x7d, 0xb9, 0x04, 0x00, 0x26, 0x80, | ||||
| 	0x3f, 0x00, 0x7c, 0x09, 0x75, 0x05, 0x83, 0xc3, 0x10, 0xe2, 0xf3, 0xeb, | ||||
| 	0x58, 0xbe, 0x94, 0x7d, 0xe8, 0xda, 0x00, 0xe8, 0xca, 0x00, 0xba, 0x5a, | ||||
| 	0x7d, 0xbe, 0x6e, 0x7d, 0xe8, 0xa0, 0x00, 0xb4, 0x01, 0xcd, 0x16, 0x75, | ||||
| 	0x3d, 0xb4, 0x02, 0xcd, 0x16, 0x24, 0x04, 0x75, 0x38, 0x80, 0x3e, 0x93, | ||||
| 	0x7d, 0x00, 0x7f, 0x0b, 0xbe, 0xb4, 0x7d, 0xe8, 0xb3, 0x00, 0xc6, 0x06, | ||||
| 	0x93, 0x7d, 0x12, 0x80, 0x3e, 0x92, 0x7d, 0x00, 0x75, 0xd9, 0xe8, 0x89, | ||||
| 	0x00, 0xc6, 0x06, 0xbe, 0x7d, 0x81, 0x68, 0x80, 0x00, 0xba, 0x72, 0x7d, | ||||
| 	0xbe, 0x7e, 0x7d, 0xe8, 0x65, 0x00, 0x5a, 0x07, 0x1f, 0xea, 0x00, 0x7c, | ||||
| 	0x00, 0x00, 0xe8, 0x6d, 0x00, 0xe8, 0x78, 0x00, 0xbb, 0xbe, 0x7d, 0x8b, | ||||
| 	0x17, 0x52, 0xb2, 0x80, 0x8b, 0x4f, 0x02, 0x66, 0x8b, 0x5f, 0x08, 0xe8, | ||||
| 	0x05, 0x00, 0x73, 0xd5, 0x07, 0x1f, 0xcb, 0x60, 0xb4, 0x41, 0xbb, 0xaa, | ||||
| 	0x55, 0xcd, 0x13, 0x72, 0x2c, 0x81, 0xfb, 0x55, 0xaa, 0x75, 0x26, 0xf7, | ||||
| 	0xc1, 0x01, 0x00, 0x74, 0x20, 0x61, 0x1e, 0x66, 0x31, 0xc0, 0x8e, 0xd8, | ||||
| 	0x66, 0x50, 0x66, 0x53, 0x50, 0x68, 0x00, 0x7c, 0x40, 0x50, 0x6a, 0x10, | ||||
| 	0x89, 0xe6, 0xb4, 0x42, 0xcd, 0x13, 0x9f, 0x83, 0xc4, 0x10, 0x9e, 0x1f, | ||||
| 	0xc3, 0x61, 0xbb, 0x00, 0x7c, 0xb8, 0x01, 0x02, 0xcd, 0x13, 0xc3, 0xfa, | ||||
| 	0x8b, 0x1c, 0x26, 0x66, 0x8b, 0x07, 0x66, 0x89, 0x04, 0x26, 0x89, 0x17, | ||||
| 	0x26, 0x8c, 0x4f, 0x02, 0xfb, 0xc3, 0xfa, 0xbb, 0x20, 0x00, 0x66, 0xa1, | ||||
| 	0x6e, 0x7d, 0x26, 0x66, 0x89, 0x07, 0xfb, 0xc3, 0xb4, 0x01, 0xcd, 0x16, | ||||
| 	0x74, 0x06, 0xb4, 0x00, 0xcd, 0x16, 0xe2, 0xf4, 0xc3, 0xac, 0x3c, 0x00, | ||||
| 	0x74, 0x09, 0xb4, 0x0e, 0xbb, 0x07, 0x00, 0xcd, 0x10, 0xeb, 0xf2, 0xc3, | ||||
| 	0x50, 0x2e, 0xa0, 0xbe, 0x7d, 0x80, 0xfa, 0x80, 0x75, 0x04, 0x88, 0xc2, | ||||
| 	0xeb, 0x06, 0x38, 0xc2, 0x75, 0x02, 0xb2, 0x80, 0x58, 0xc3, 0xfa, 0x2e, | ||||
| 	0x80, 0x3e, 0x92, 0x7d, 0x00, 0x74, 0x0a, 0x2e, 0xfe, 0x0e, 0x93, 0x7d, | ||||
| 	0x2e, 0xfe, 0x0e, 0x92, 0x7d, 0xea, 0x20, 0x00, 0x00, 0x00, 0x9c, 0x2e, | ||||
| 	0xfe, 0x06, 0x91, 0x7d, 0x75, 0x03, 0xe8, 0xc7, 0xff, 0x9a, 0x4c, 0x00, | ||||
| 	0x00, 0x00, 0x9c, 0x2e, 0xfe, 0x0e, 0x91, 0x7d, 0x79, 0x03, 0xe8, 0xb7, | ||||
| 	0xff, 0x9d, 0xca, 0x02, 0x00, 0xff, 0x49, 0x12, 0x0d, 0x0a, 0x50, 0x72, | ||||
| 	0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6b, 0x65, 0x79, 0x20, | ||||
| 	0x74, 0x6f, 0x20, 0x62, 0x6f, 0x6f, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, | ||||
| 	0x20, 0x55, 0x53, 0x42, 0x2e, 0x00, 0x00, 0x00 | ||||
| }; | ||||
|  | @ -13,7 +13,6 @@ | |||
| #define IDI_ICON                        110 | ||||
| #define IDI_UP                          111 | ||||
| #define IDI_DOWN                        112 | ||||
| #define IDR_BR_MBR_BIN                  200 | ||||
| #define IDR_FD_COMMAND_COM              300 | ||||
| #define IDR_FD_KERNEL_SYS               301 | ||||
| #define IDR_FD_DISPLAY_EXE              302 | ||||
|  |  | |||
							
								
								
									
										43
									
								
								src/rufus.c
									
										
									
									
									
								
							
							
						
						
									
										43
									
								
								src/rufus.c
									
										
									
									
									
								
							|  | @ -40,6 +40,7 @@ | |||
| #include "msapi_utf8.h" | ||||
| #include "resource.h" | ||||
| #include "rufus.h" | ||||
| #include "drive.h" | ||||
| #include "registry.h" | ||||
| #include "localization.h" | ||||
| 
 | ||||
|  | @ -444,7 +445,7 @@ static void SetFSFromISO(void) | |||
| 	} | ||||
| 
 | ||||
| 	// Syslinux and EFI have precedence over bootmgr (unless the user selected BIOS as target type)
 | ||||
| 	if ((iso_report.has_isolinux) || ( (IS_EFI(iso_report)) && (bt == BT_UEFI))) { | ||||
| 	if ((iso_report.has_isolinux) || (IS_REACTOS(iso_report)) || ( (IS_EFI(iso_report)) && (bt == BT_UEFI))) { | ||||
| 		if (fs_mask & (1<<FS_FAT32)) { | ||||
| 			selected_fs = FS_FAT32; | ||||
| 		} else if (fs_mask & (1<<FS_FAT16)) { | ||||
|  | @ -1784,10 +1785,10 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | |||
| 			if (fs < 0) { | ||||
| 				EnableBootOptions(TRUE); | ||||
| 				SetMBRProps(); | ||||
| 				// Remove the SysLinux options if they exists
 | ||||
| 				if (ComboBox_GetItemData(hBootType, ComboBox_GetCount(hBootType)-1) == DT_SYSLINUX_V5) { | ||||
| 					IGNORE_RETVAL(ComboBox_DeleteString(hBootType,  ComboBox_GetCount(hBootType)-1)); | ||||
| 					IGNORE_RETVAL(ComboBox_DeleteString(hBootType,  ComboBox_GetCount(hBootType)-1)); | ||||
| 				// Remove the SysLinux and ReactOS options if they exists
 | ||||
| 				if (ComboBox_GetItemData(hBootType, ComboBox_GetCount(hBootType)-1) == (DT_MAX-1)) { | ||||
| 					for (i=DT_SYSLINUX_V4; i<DT_MAX; i++) | ||||
| 						IGNORE_RETVAL(ComboBox_DeleteString(hBootType,  ComboBox_GetCount(hBootType)-1)); | ||||
| 					IGNORE_RETVAL(ComboBox_SetCurSel(hBootType, 1)); | ||||
| 				} | ||||
| 				break; | ||||
|  | @ -1817,8 +1818,9 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | |||
| 			if ( (bt == BT_BIOS) && (((fs == FS_FAT16) || (fs == FS_FAT32)) && (advanced_mode)) ) { | ||||
| 				IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "Syslinux 4"), DT_SYSLINUX_V4)); | ||||
| 				IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "Syslinux 5"), DT_SYSLINUX_V5)); | ||||
| 				IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "ReactOS"), DT_REACTOS)); | ||||
| 			} | ||||
| 			if ( ((!advanced_mode) && ((selection_default == DT_SYSLINUX_V4) || (selection_default == DT_SYSLINUX_V5))) ) { | ||||
| 			if ((!advanced_mode) && (selection_default >= DT_SYSLINUX_V4)) { | ||||
| 				selection_default = DT_FREEDOS; | ||||
| 				CheckDlgButton(hDlg, IDC_DISK_ID, BST_UNCHECKED); | ||||
| 			} | ||||
|  | @ -1842,7 +1844,11 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | |||
| 			if (HIWORD(wParam) != CBN_SELCHANGE) | ||||
| 				break; | ||||
| 			selection_default = (int) ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)); | ||||
| 			if (ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)) == DT_ISO) { | ||||
| 			// The Rufus MBR can't apply for Syslinux or ReactOS
 | ||||
| 			// TODO: we should also disable this for isolinux based ISOs
 | ||||
| 			EnableWindow(GetDlgItem(hMainDialog, IDC_RUFUS_MBR), selection_default < DT_SYSLINUX_V4); | ||||
| 			EnableWindow(hDiskID, selection_default < DT_SYSLINUX_V4); | ||||
| 			if (selection_default == DT_ISO) { | ||||
| 				if ((iso_path == NULL) || (iso_report.label[0] == 0)) { | ||||
| 					// Set focus to the Select ISO button
 | ||||
| 					SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)FALSE, 0); | ||||
|  | @ -2064,11 +2070,12 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine | |||
| #endif | ||||
| { | ||||
| 	const char* old_wait_option = "/W"; | ||||
| 	const char* rufus_loc = "rufus.loc"; | ||||
| 	int i, opt, option_index = 0, argc = 0, si = 0, lcid = GetUserDefaultUILanguage(); | ||||
| 	BOOL attached_console = FALSE, external_loc_file = FALSE, lgp_set = FALSE; | ||||
| 	BYTE* loc_data; | ||||
| 	DWORD loc_size, Size; | ||||
| 	char tmp_path[MAX_PATH], loc_file[MAX_PATH] = "", *tmp, *locale_name = NULL; | ||||
| 	char tmp_path[MAX_PATH] = "", loc_file[MAX_PATH] = "", *tmp, *locale_name = NULL; | ||||
| 	char** argv = NULL; | ||||
| 	wchar_t **wenv, **wargv; | ||||
| 	PF_DECL(__wgetmainargs); | ||||
|  | @ -2154,24 +2161,28 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine | |||
| 	// Init localization
 | ||||
| 	init_localization(); | ||||
| 	// Seek for a loc file in the current directory
 | ||||
| 	if (GetFileAttributesU("rufus.loc") == INVALID_FILE_ATTRIBUTES) { | ||||
| 	if (GetFileAttributesU(rufus_loc) == INVALID_FILE_ATTRIBUTES) { | ||||
| 		uprintf("loc file not found in current directory - embedded one will be used"); | ||||
| 
 | ||||
| 		loc_data = (BYTE*)GetResource(hMainInstance, MAKEINTRESOURCEA(IDR_LC_RUFUS_LOC), _RT_RCDATA, "embedded.loc", &loc_size, FALSE); | ||||
| 		GetTempPathU(sizeof(tmp_path), tmp_path); | ||||
| 		GetTempFileNameU(tmp_path, APPLICATION_NAME, 0, loc_file); | ||||
| 		if ( (GetTempPathU(sizeof(tmp_path), tmp_path) == 0) | ||||
| 		  || (GetTempFileNameU(tmp_path, APPLICATION_NAME, 0, loc_file) == 0) | ||||
| 		  || (loc_file[0] == 0) ) { | ||||
| 			// Last ditch effort to get a loc file - just extract it to the current directory
 | ||||
| 			safe_strcpy(loc_file, sizeof(loc_file), rufus_loc); | ||||
| 		} | ||||
| 
 | ||||
| 		hFile = CreateFileU(loc_file, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, | ||||
| 			NULL, CREATE_ALWAYS, 0, 0); | ||||
| 		if ((hFile == INVALID_HANDLE_VALUE)|| (!WriteFile(hFile, loc_data, loc_size, &Size, 0)) || (loc_size != Size)) { | ||||
| 			safe_closehandle(hFile); | ||||
| 		if ((hFile == INVALID_HANDLE_VALUE) || (!WriteFile(hFile, loc_data, loc_size, &Size, 0)) || (loc_size != Size)) { | ||||
| 			uprintf("localization: unable to extract '%s': %s.\n", loc_file, WindowsErrorString()); | ||||
| 		} else { | ||||
| 			safe_closehandle(hFile); | ||||
| 			uprintf("localization: extracted data to '%s'\n", loc_file); | ||||
| 			goto out; | ||||
| 		} | ||||
| 		uprintf("localization: extracted data to '%s'\n", loc_file); | ||||
| 		safe_closehandle(hFile); | ||||
| 	} else { | ||||
| 		safe_sprintf(loc_file, sizeof(loc_file), "%s\\rufus.loc", app_dir); | ||||
| 		safe_sprintf(loc_file, sizeof(loc_file), "%s\\%s", app_dir, rufus_loc); | ||||
| 		external_loc_file = TRUE; | ||||
| 		uprintf("using external loc file '%s'", loc_file); | ||||
| 	} | ||||
|  |  | |||
							
								
								
									
										21
									
								
								src/rufus.h
									
										
									
									
									
								
							
							
						
						
									
										21
									
								
								src/rufus.h
									
										
									
									
									
								
							|  | @ -169,8 +169,9 @@ enum dos_type { | |||
| 	DT_WINME = 0, | ||||
| 	DT_FREEDOS, | ||||
| 	DT_ISO, | ||||
| 	DT_SYSLINUX_V4, | ||||
| 	DT_SYSLINUX_V4,		// Start of indexes that only display in advanced mode
 | ||||
| 	DT_SYSLINUX_V5, | ||||
| 	DT_REACTOS, | ||||
| 	DT_MAX | ||||
| }; | ||||
| 
 | ||||
|  | @ -318,24 +319,6 @@ extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan); | |||
| extern BOOL ExtractISOFile(const char* iso, const char* iso_file, const char* dest_file); | ||||
| extern BOOL InstallSyslinux(DWORD drive_index, char drive_letter); | ||||
| DWORD WINAPI FormatThread(void* param); | ||||
| extern char* GetPhysicalName(DWORD DriveIndex); | ||||
| extern HANDLE GetPhysicalHandle(DWORD DriveIndex, BOOL bWriteAccess, BOOL bLockDrive); | ||||
| extern BOOL WaitForLogical(DWORD DriveIndex); | ||||
| extern char* GetLogicalName(DWORD DriveIndex, BOOL bKeepTrailingBackslash, BOOL bSilent); | ||||
| extern HANDLE GetLogicalHandle(DWORD DriveIndex, BOOL bWriteAccess, BOOL bLockDrive); | ||||
| extern BOOL GetDriveLetter(DWORD DriveIndex, char* drive_letter); | ||||
| extern UINT GetDriveTypeFromIndex(DWORD DriveIndex); | ||||
| extern uint64_t GetDriveSize(DWORD DriveIndex); | ||||
| extern char GetUnusedDriveLetter(void); | ||||
| extern BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL mbr_uefi_marker); | ||||
| extern BOOL DeletePartitions(HANDLE hDrive); | ||||
| extern const char* GetPartitionType(BYTE Type); | ||||
| extern BOOL GetDrivePartitionData(DWORD DriveIndex, char* FileSystemName, DWORD FileSystemNameSize); | ||||
| extern BOOL GetDriveLabel(DWORD DriveIndex, char* letter, char** label); | ||||
| extern BOOL IsMediaPresent(DWORD DriveIndex); | ||||
| extern BOOL MountVolume(char* drive_name, char *drive_guid); | ||||
| extern BOOL UnmountVolume(HANDLE hDrive); | ||||
| extern BOOL RemountVolume(char* drive_name); | ||||
| extern BOOL CreateProgress(void); | ||||
| extern BOOL SetAutorun(const char* path); | ||||
| extern char* FileDialog(BOOL save, char* path, char* filename, char* ext, char* ext_desc); | ||||
|  |  | |||
							
								
								
									
										12
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | |||
| IDD_DIALOG DIALOGEX 12, 12, 206, 329 | ||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||
| EXSTYLE WS_EX_APPWINDOW | ||||
| CAPTION "Rufus v1.4.2.370" | ||||
| CAPTION "Rufus v1.4.2.371" | ||||
| FONT 8, "MS Shell Dlg", 400, 0, 0x1 | ||||
| BEGIN | ||||
|     DEFPUSHBUTTON   "Start",IDC_START,94,291,50,14 | ||||
|  | @ -200,7 +200,6 @@ BEGIN | |||
|     "IDR_SL_LDLINUX_V5_BSS   RCDATA                  ""../res/syslinux/ldlinux_v5.bss""\r\n" | ||||
|     "IDR_SL_LDLINUX_V5_SYS   RCDATA                  ""../res/syslinux/ldlinux_v5.sys""\r\n" | ||||
|     "IDR_SL_MBOOT_C32        RCDATA                  ""../res/syslinux/mboot.c32""\r\n" | ||||
|     "IDR_BR_MBR_BIN          RCDATA                  ""../res/mbr/mbr.bin""\r\n" | ||||
|     "IDR_FD_COMMAND_COM      RCDATA                  ""../res/freedos/COMMAND.COM""\r\n" | ||||
|     "IDR_FD_KERNEL_SYS       RCDATA                  ""../res/freedos/KERNEL.SYS""\r\n" | ||||
|     "IDR_FD_DISPLAY_EXE      RCDATA                  ""../res/freedos/DISPLAY.EXE""\r\n" | ||||
|  | @ -289,8 +288,8 @@ END | |||
| // | ||||
| 
 | ||||
| VS_VERSION_INFO VERSIONINFO | ||||
|  FILEVERSION 1,4,2,370 | ||||
|  PRODUCTVERSION 1,4,2,370 | ||||
|  FILEVERSION 1,4,2,371 | ||||
|  PRODUCTVERSION 1,4,2,371 | ||||
|  FILEFLAGSMASK 0x3fL | ||||
| #ifdef _DEBUG | ||||
|  FILEFLAGS 0x1L | ||||
|  | @ -307,13 +306,13 @@ BEGIN | |||
|         BEGIN | ||||
|             VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" | ||||
|             VALUE "FileDescription", "Rufus" | ||||
|             VALUE "FileVersion", "1.4.2.370" | ||||
|             VALUE "FileVersion", "1.4.2.371" | ||||
|             VALUE "InternalName", "Rufus" | ||||
|             VALUE "LegalCopyright", "© 2011-2014 Pete Batard (GPL v3)" | ||||
|             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" | ||||
|             VALUE "OriginalFilename", "rufus.exe" | ||||
|             VALUE "ProductName", "Rufus" | ||||
|             VALUE "ProductVersion", "1.4.2.370" | ||||
|             VALUE "ProductVersion", "1.4.2.371" | ||||
|         END | ||||
|     END | ||||
|     BLOCK "VarFileInfo" | ||||
|  | @ -354,7 +353,6 @@ IDR_SL_LDLINUX_V4_SYS   RCDATA                  "../res/syslinux/ldlinux_v4.sys" | |||
| IDR_SL_LDLINUX_V5_BSS   RCDATA                  "../res/syslinux/ldlinux_v5.bss" | ||||
| IDR_SL_LDLINUX_V5_SYS   RCDATA                  "../res/syslinux/ldlinux_v5.sys" | ||||
| IDR_SL_MBOOT_C32        RCDATA                  "../res/syslinux/mboot.c32" | ||||
| IDR_BR_MBR_BIN          RCDATA                  "../res/mbr/mbr.bin" | ||||
| IDR_FD_COMMAND_COM      RCDATA                  "../res/freedos/COMMAND.COM" | ||||
| IDR_FD_KERNEL_SYS       RCDATA                  "../res/freedos/KERNEL.SYS" | ||||
| IDR_FD_DISPLAY_EXE      RCDATA                  "../res/freedos/DISPLAY.EXE" | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| /*
 | ||||
|  * Rufus: The Reliable USB Formatting Utility | ||||
|  * SMART HDD vs Flash detection (using ATA over USB, S.M.A.R.T., etc.) | ||||
|  * Copyright © 2013 Pete Batard <pete@akeo.ie> | ||||
|  * Copyright © 2014 Pete Batard <pete@akeo.ie> | ||||
|  * | ||||
|  * Based in part on scsiata.cpp from Smartmontools: http://smartmontools.sourceforge.net
 | ||||
|  * Copyright © 2006-12 Douglas Gilbert <dgilbert@interlog.com> | ||||
|  | @ -33,6 +33,7 @@ | |||
| 
 | ||||
| #include "msapi_utf8.h" | ||||
| #include "rufus.h" | ||||
| #include "drive.h" | ||||
| #include "smart.h" | ||||
| #include "hdd_vs_ufd.h" | ||||
| 
 | ||||
|  |  | |||
|  | @ -27,6 +27,7 @@ | |||
| #include <ctype.h> | ||||
| 
 | ||||
| #include "rufus.h" | ||||
| #include "drive.h" | ||||
| #include "resource.h" | ||||
| #include "localization.h" | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue