mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[ms-sys] update ms-sys to current
* NB: This includes an updated Syslinux MBR
This commit is contained in:
		
							parent
							
								
									cc65d0494d
								
							
						
					
					
						commit
						b77561bb9b
					
				
					 15 changed files with 312 additions and 120 deletions
				
			
		
							
								
								
									
										15
									
								
								src/drive.c
									
										
									
									
									
								
							
							
						
						
									
										15
									
								
								src/drive.c
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Rufus: The Reliable USB Formatting Utility |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  * Drive access function calls |  * Drive access function calls | ||||||
|  * Copyright © 2011-2015 Pete Batard <pete@akeo.ie> |  * Copyright © 2011-2016 Pete Batard <pete@akeo.ie> | ||||||
|  * |  * | ||||||
|  * This program is free software: you can redistribute it and/or modify |  * 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 |  * it under the terms of the GNU General Public License as published by | ||||||
|  | @ -576,10 +576,10 @@ const struct {int (*fn)(FILE *fp); char* str;} known_mbr[] = { | ||||||
| 	{ is_rufus_mbr, "Rufus" }, | 	{ is_rufus_mbr, "Rufus" }, | ||||||
| 	{ is_syslinux_mbr, "Syslinux" }, | 	{ is_syslinux_mbr, "Syslinux" }, | ||||||
| 	{ is_reactos_mbr, "ReactOS" }, | 	{ is_reactos_mbr, "ReactOS" }, | ||||||
| 	{ is_kolibri_mbr, "KolibriOS" }, | 	{ is_kolibrios_mbr, "KolibriOS" }, | ||||||
| 	{ is_grub_mbr, "Grub4DOS" }, | 	{ is_grub4dos_mbr, "Grub4DOS" }, | ||||||
| 	{ is_grub2_mbr, "Grub 2.0" }, | 	{ is_grub2_mbr, "Grub 2.0" }, | ||||||
| 	{ is_zero_mbr, "Zeroed" }, | 	{ is_zero_mbr_not_including_disk_signature_or_copy_protect, "Zeroed" }, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // Returns TRUE if the drive seems bootable, FALSE otherwise
 | // Returns TRUE if the drive seems bootable, FALSE otherwise
 | ||||||
|  | @ -591,10 +591,7 @@ BOOL AnalyzeMBR(HANDLE hPhysicalDrive, const char* TargetName) | ||||||
| 	int i; | 	int i; | ||||||
| 
 | 
 | ||||||
| 	fake_fd._handle = (char*)hPhysicalDrive; | 	fake_fd._handle = (char*)hPhysicalDrive; | ||||||
| 	fake_fd._sector_size = SelectedDrive.Geometry.BytesPerSector; | 	set_bytes_per_sector(SelectedDrive.Geometry.BytesPerSector); | ||||||
| 	// Might need correction, as we use this method for images and we may not have a target UFD yet
 |  | ||||||
| 	if (fake_fd._sector_size < 512) |  | ||||||
| 		fake_fd._sector_size = 512; |  | ||||||
| 
 | 
 | ||||||
| 	if (!is_br(fp)) { | 	if (!is_br(fp)) { | ||||||
| 		uprintf("%s does not have an x86 %s\n", TargetName, mbr_name); | 		uprintf("%s does not have an x86 %s\n", TargetName, mbr_name); | ||||||
|  | @ -630,7 +627,7 @@ BOOL AnalyzePBR(HANDLE hLogicalVolume) | ||||||
| 	int i; | 	int i; | ||||||
| 
 | 
 | ||||||
| 	fake_fd._handle = (char*)hLogicalVolume; | 	fake_fd._handle = (char*)hLogicalVolume; | ||||||
| 	fake_fd._sector_size = SelectedDrive.Geometry.BytesPerSector; | 	set_bytes_per_sector(SelectedDrive.Geometry.BytesPerSector); | ||||||
| 
 | 
 | ||||||
| 	if (!is_br(fp)) { | 	if (!is_br(fp)) { | ||||||
| 		uprintf("Volume does not have an x86 %s\n", pbr_name); | 		uprintf("Volume does not have an x86 %s\n", pbr_name); | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								src/format.c
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								src/format.c
									
										
									
									
									
								
							|  | @ -2,7 +2,7 @@ | ||||||
|  * Rufus: The Reliable USB Formatting Utility |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  * Formatting function calls |  * Formatting function calls | ||||||
|  * Copyright © 2007-2009 Tom Thornhill/Ridgecrop |  * Copyright © 2007-2009 Tom Thornhill/Ridgecrop | ||||||
|  * Copyright © 2011-2015 Pete Batard <pete@akeo.ie> |  * Copyright © 2011-2016 Pete Batard <pete@akeo.ie> | ||||||
|  * |  * | ||||||
|  * This program is free software: you can redistribute it and/or modify |  * 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 |  * it under the terms of the GNU General Public License as published by | ||||||
|  | @ -913,7 +913,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	fake_fd._handle = (char*)hPhysicalDrive; | 	fake_fd._handle = (char*)hPhysicalDrive; | ||||||
| 	fake_fd._sector_size = SelectedDrive.Geometry.BytesPerSector; | 	set_bytes_per_sector(SelectedDrive.Geometry.BytesPerSector); | ||||||
| 
 | 
 | ||||||
| 	// What follows is really a case statement with complex conditions listed
 | 	// What follows is really a case statement with complex conditions listed
 | ||||||
| 	// by order of preference
 | 	// by order of preference
 | ||||||
|  | @ -945,7 +945,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive) | ||||||
| 	// Grub4DOS
 | 	// Grub4DOS
 | ||||||
| 	if ( ((bt == BT_ISO) && (img_report.has_grub4dos)) || (bt == BT_GRUB4DOS) ) { | 	if ( ((bt == BT_ISO) && (img_report.has_grub4dos)) || (bt == BT_GRUB4DOS) ) { | ||||||
| 		uprintf(using_msg, "Grub4DOS"); | 		uprintf(using_msg, "Grub4DOS"); | ||||||
| 		r = write_grub_mbr(fp); | 		r = write_grub4dos_mbr(fp); | ||||||
| 		goto notify; | 		goto notify; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -959,7 +959,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive) | ||||||
| 	// KolibriOS
 | 	// KolibriOS
 | ||||||
| 	if ( (bt == BT_ISO) && (img_report.has_kolibrios) && (IS_FAT(fs))) { | 	if ( (bt == BT_ISO) && (img_report.has_kolibrios) && (IS_FAT(fs))) { | ||||||
| 		uprintf(using_msg, "KolibriOS"); | 		uprintf(using_msg, "KolibriOS"); | ||||||
| 		r = write_kolibri_mbr(fp); | 		r = write_kolibrios_mbr(fp); | ||||||
| 		goto notify; | 		goto notify; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -996,7 +996,7 @@ static BOOL WriteSBR(HANDLE hPhysicalDrive) | ||||||
| 	FILE* fp = (FILE*)&fake_fd; | 	FILE* fp = (FILE*)&fake_fd; | ||||||
| 
 | 
 | ||||||
| 	fake_fd._handle = (char*)hPhysicalDrive; | 	fake_fd._handle = (char*)hPhysicalDrive; | ||||||
| 	fake_fd._sector_size = SelectedDrive.Geometry.BytesPerSector; | 	set_bytes_per_sector(SelectedDrive.Geometry.BytesPerSector); | ||||||
| 	// Ensure that we have sufficient space for the SBR
 | 	// Ensure that we have sufficient space for the SBR
 | ||||||
| 	max_size = IsChecked(IDC_EXTRA_PARTITION) ? | 	max_size = IsChecked(IDC_EXTRA_PARTITION) ? | ||||||
| 		(DWORD)(SelectedDrive.Geometry.BytesPerSector * SelectedDrive.Geometry.SectorsPerTrack) : 1024 * 1024; | 		(DWORD)(SelectedDrive.Geometry.BytesPerSector * SelectedDrive.Geometry.SectorsPerTrack) : 1024 * 1024; | ||||||
|  | @ -1068,7 +1068,7 @@ static BOOL WritePBR(HANDLE hLogicalVolume) | ||||||
| 	const char* using_msg = "Using %s %s partition boot record\n"; | 	const char* using_msg = "Using %s %s partition boot record\n"; | ||||||
| 
 | 
 | ||||||
| 	fake_fd._handle = (char*)hLogicalVolume; | 	fake_fd._handle = (char*)hLogicalVolume; | ||||||
| 	fake_fd._sector_size = SelectedDrive.Geometry.BytesPerSector; | 	set_bytes_per_sector(SelectedDrive.Geometry.BytesPerSector); | ||||||
| 
 | 
 | ||||||
| 	switch (ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem))) { | 	switch (ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem))) { | ||||||
| 	case FS_FAT16: | 	case FS_FAT16: | ||||||
|  |  | ||||||
							
								
								
									
										127
									
								
								src/ms-sys/br.c
									
										
									
									
									
								
							
							
						
						
									
										127
									
								
								src/ms-sys/br.c
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | ||||||
| /******************************************************************
 | /******************************************************************
 | ||||||
|     Copyright (C) 2009  Henrik Carlqvist |     Copyright (C) 2009-2015  Henrik Carlqvist | ||||||
| 
 | 
 | ||||||
|     This program is free software; you can redistribute it and/or modify |     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 |     it under the terms of the GNU General Public License as published by | ||||||
|  | @ -20,13 +20,35 @@ | ||||||
| #include "file.h" | #include "file.h" | ||||||
| #include "br.h" | #include "br.h" | ||||||
| 
 | 
 | ||||||
|  | unsigned long ulBytesPerSector = 512; | ||||||
|  | 
 | ||||||
|  | void set_bytes_per_sector(unsigned long ulValue) | ||||||
|  | { | ||||||
|  |    ulBytesPerSector = ulValue; | ||||||
|  |    if ((ulBytesPerSector < 512) || (ulBytesPerSector > 65536)) | ||||||
|  |       ulBytesPerSector = 512; | ||||||
|  | } /* set_bytes_per_sector */ | ||||||
|  | 
 | ||||||
|  | uint32_t read_windows_disk_signature(FILE *fp) | ||||||
|  | { | ||||||
|  |    uint32_t tWDS; | ||||||
|  |    if(!read_data(fp, 0x1b8, &tWDS, 4)) | ||||||
|  |       return 0; | ||||||
|  |    return tWDS; | ||||||
|  | } /* read_windows_disk_signature */ | ||||||
|  | 
 | ||||||
|  | int write_windows_disk_signature(FILE *fp, uint32_t tWDS) | ||||||
|  | { | ||||||
|  |    return write_data(fp, 0x1b8, &tWDS, 4); | ||||||
|  | } /* write_windows_disk_signature */ | ||||||
|  | 
 | ||||||
| int is_br(FILE *fp) | int is_br(FILE *fp) | ||||||
| { | { | ||||||
|    /* A "file" is probably some kind of boot record if it contains the magic
 |    /* A "file" is probably some kind of boot record if it contains the magic
 | ||||||
|       chars 0x55, 0xAA at position 0x1FE */ |       chars 0x55, 0xAA at position 0x1FE */ | ||||||
|    unsigned char aucRef[] = {0x55, 0xAA}; |    unsigned char aucRef[] = {0x55, 0xAA}; | ||||||
| 
 | 
 | ||||||
|    return contains_data(fp, 0x1FE, aucRef, sizeof(aucRef));  |    return contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); | ||||||
| } /* is_br */ | } /* is_br */ | ||||||
| 
 | 
 | ||||||
| int is_lilo_br(FILE *fp) | int is_lilo_br(FILE *fp) | ||||||
|  | @ -36,130 +58,128 @@ int is_lilo_br(FILE *fp) | ||||||
|    unsigned char aucRef[] = {'L','I','L','O'}; |    unsigned char aucRef[] = {'L','I','L','O'}; | ||||||
| 
 | 
 | ||||||
|    return ( contains_data(fp, 0x6, aucRef, sizeof(aucRef)) || |    return ( contains_data(fp, 0x6, aucRef, sizeof(aucRef)) || | ||||||
| 	    contains_data(fp, 0x2, aucRef, sizeof(aucRef)) );  | 	    contains_data(fp, 0x2, aucRef, sizeof(aucRef)) ); | ||||||
| } /* is_lilo_br */ | } /* is_lilo_br */ | ||||||
| 
 | 
 | ||||||
| int is_dos_mbr(FILE *fp) | int is_dos_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_dos.h" |    #include "mbr_dos.h" | ||||||
|    unsigned char aucRef[] = {0x55, 0xAA}; |  | ||||||
| 
 | 
 | ||||||
|    return |    return | ||||||
|       contains_data(fp, 0x0, mbr_dos_0x0, sizeof(mbr_dos_0x0)) && |       contains_data(fp, 0x0, mbr_dos_0x0, sizeof(mbr_dos_0x0)) && | ||||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); |       is_br(fp); | ||||||
| } /* is_dos_mbr */ | } /* is_dos_mbr */ | ||||||
| 
 | 
 | ||||||
| int is_dos_f2_mbr(FILE *fp) | int is_dos_f2_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_dos_f2.h" |    #include "mbr_dos_f2.h" | ||||||
|    unsigned char aucRef[] = {0x55, 0xAA}; |  | ||||||
| 
 | 
 | ||||||
|    return |    return | ||||||
|       contains_data(fp, 0x0, mbr_dos_f2_0x0, sizeof(mbr_dos_f2_0x0)) && |       contains_data(fp, 0x0, mbr_dos_f2_0x0, sizeof(mbr_dos_f2_0x0)) && | ||||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); |       is_br(fp); | ||||||
| } /* is_dos_f2_mbr */ | } /* is_dos_f2_mbr */ | ||||||
| 
 | 
 | ||||||
| int is_95b_mbr(FILE *fp) | int is_95b_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_95b.h" |    #include "mbr_95b.h" | ||||||
|    unsigned char aucRef[] = {0x55, 0xAA}; |  | ||||||
| 
 | 
 | ||||||
|    return |    return | ||||||
|       contains_data(fp, 0x0,   mbr_95b_0x0,   sizeof(mbr_95b_0x0)) && |       contains_data(fp, 0x0,   mbr_95b_0x0,   sizeof(mbr_95b_0x0)) && | ||||||
|       contains_data(fp, 0x0e0, mbr_95b_0x0e0, sizeof(mbr_95b_0x0e0)) && |       contains_data(fp, 0x0e0, mbr_95b_0x0e0, sizeof(mbr_95b_0x0e0)) && | ||||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); |       is_br(fp); | ||||||
| } /* is_95b_mbr */ | } /* is_95b_mbr */ | ||||||
| 
 | 
 | ||||||
| int is_2000_mbr(FILE *fp) | int is_2000_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_2000.h" |    #include "mbr_2000.h" | ||||||
|    unsigned char aucRef[] = {0x55, 0xAA}; |  | ||||||
| 
 | 
 | ||||||
|    return |    return | ||||||
|       contains_data(fp, 0x0, mbr_2000_0x0, sizeof(mbr_2000_0x0)) && |       contains_data(fp, 0x0, mbr_2000_0x0, sizeof(mbr_2000_0x0)) && | ||||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); |       is_br(fp); | ||||||
| } /* is_2000_mbr */ | } /* is_2000_mbr */ | ||||||
| 
 | 
 | ||||||
| int is_vista_mbr(FILE *fp) | int is_vista_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_vista.h" |    #include "mbr_vista.h" | ||||||
|    unsigned char aucRef[] = {0x55, 0xAA}; |  | ||||||
| 
 | 
 | ||||||
|    return |    return | ||||||
|       contains_data(fp, 0x0, mbr_vista_0x0, sizeof(mbr_vista_0x0)) && |       contains_data(fp, 0x0, mbr_vista_0x0, sizeof(mbr_vista_0x0)) && | ||||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); |       is_br(fp); | ||||||
| } /* is_vista_mbr */ | } /* is_vista_mbr */ | ||||||
| 
 | 
 | ||||||
| int is_win7_mbr(FILE *fp) | int is_win7_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_win7.h" |    #include "mbr_win7.h" | ||||||
|    unsigned char aucRef[] = {0x55, 0xAA}; |  | ||||||
| 
 | 
 | ||||||
|    return |    return | ||||||
|       contains_data(fp, 0x0, mbr_win7_0x0, sizeof(mbr_win7_0x0)) && |       contains_data(fp, 0x0, mbr_win7_0x0, sizeof(mbr_win7_0x0)) && | ||||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); |       is_br(fp); | ||||||
| } /* is_win7_mbr */ | } /* is_win7_mbr */ | ||||||
| 
 | 
 | ||||||
| int is_rufus_mbr(FILE *fp) | int is_rufus_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_rufus.h" |    #include "mbr_rufus.h" | ||||||
|    unsigned char aucRef[] = {0x55, 0xAA}; |  | ||||||
| 
 | 
 | ||||||
|    return |    return | ||||||
|       contains_data(fp, 0x0, mbr_rufus_0x0, sizeof(mbr_rufus_0x0)) && |       contains_data(fp, 0x0, mbr_rufus_0x0, sizeof(mbr_rufus_0x0)) && | ||||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); |       is_br(fp); | ||||||
| } /* is_rufus_mbr */ | } /* is_rufus_mbr */ | ||||||
| 
 | 
 | ||||||
| int is_reactos_mbr(FILE *fp) | int is_reactos_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_reactos.h" |    #include "mbr_reactos.h" | ||||||
|    unsigned char aucRef[] = {0x55, 0xAA}; |  | ||||||
| 
 | 
 | ||||||
|    return |    return | ||||||
|       contains_data(fp, 0x0, mbr_reactos_0x0, sizeof(mbr_reactos_0x0)) && |       contains_data(fp, 0x0, mbr_reactos_0x0, sizeof(mbr_reactos_0x0)) && | ||||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); |       is_br(fp); | ||||||
| } /* is_reactos_mbr */ | } /* is_reactos_mbr */ | ||||||
| 
 | 
 | ||||||
| int is_grub_mbr(FILE *fp) | int is_grub4dos_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_grub.h" |    #include "mbr_grub.h" | ||||||
|    unsigned char aucRef[] = {0x55, 0xAA}; |  | ||||||
| 
 | 
 | ||||||
|    return |    return | ||||||
|       contains_data(fp, 0x0, mbr_grub_0x0, sizeof(mbr_grub_0x0)) && |       contains_data(fp, 0x0, mbr_grub_0x0, sizeof(mbr_grub_0x0)) && | ||||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); |       is_br(fp); | ||||||
| } /* is_grub_mbr */ | } /* is_grub_mbr */ | ||||||
| 
 | 
 | ||||||
| int is_grub2_mbr(FILE *fp) | int is_grub2_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_grub2.h" |    #include "mbr_grub2.h" | ||||||
|    unsigned char aucRef[] = {0x55, 0xAA}; |  | ||||||
| 
 | 
 | ||||||
|    return |    return | ||||||
|       contains_data(fp, 0x0, mbr_grub2_0x0, sizeof(mbr_grub2_0x0)) && |       contains_data(fp, 0x0, mbr_grub2_0x0, sizeof(mbr_grub2_0x0)) && | ||||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); |       is_br(fp); | ||||||
| } /* is_grub2_mbr */ | } /* is_grub2_mbr */ | ||||||
| 
 | 
 | ||||||
| int is_kolibri_mbr(FILE *fp) | int is_kolibrios_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_kolibri.h" |    #include "mbr_kolibri.h" | ||||||
|    unsigned char aucRef[] = {0x55, 0xAA}; |  | ||||||
| 
 | 
 | ||||||
|    return |    return | ||||||
|       contains_data(fp, 0x0, mbr_kolibri_0x0, sizeof(mbr_kolibri_0x0)) && |       contains_data(fp, 0x0, mbr_kolibri_0x0, sizeof(mbr_kolibri_0x0)) && | ||||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); |       is_br(fp); | ||||||
| } /* is_kolibri_mbr */ | } /* is_kolibri_mbr */ | ||||||
| 
 | 
 | ||||||
| int is_syslinux_mbr(FILE *fp) | int is_syslinux_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_syslinux.h" |    #include "mbr_syslinux.h" | ||||||
|    unsigned char aucRef[] = {0x55, 0xAA}; |  | ||||||
| 
 | 
 | ||||||
|    return |    return | ||||||
|       contains_data(fp, 0x0, mbr_syslinux_0x0, sizeof(mbr_syslinux_0x0)) && |       contains_data(fp, 0x0, mbr_syslinux_0x0, sizeof(mbr_syslinux_0x0)) && | ||||||
|       contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); |       is_br(fp); | ||||||
| } /* is_syslinux_mbr */ | } /* is_syslinux_mbr */ | ||||||
| 
 | 
 | ||||||
|  | int is_syslinux_gpt_mbr(FILE *fp) | ||||||
|  | { | ||||||
|  |    #include "mbr_gpt_syslinux.h" | ||||||
|  | 
 | ||||||
|  |    return | ||||||
|  |       contains_data(fp, 0x0, mbr_gpt_syslinux_0x0, | ||||||
|  | 		    sizeof(mbr_gpt_syslinux_0x0)) && | ||||||
|  |       is_br(fp); | ||||||
|  | } /* is_syslinux_gpt_mbr */ | ||||||
|  | 
 | ||||||
| int is_zero_mbr(FILE *fp) | int is_zero_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_zero.h" |    #include "mbr_zero.h" | ||||||
|  | @ -169,19 +189,37 @@ int is_zero_mbr(FILE *fp) | ||||||
| 	/* Don't bother to check 55AA signature */ | 	/* Don't bother to check 55AA signature */ | ||||||
| } /* is_zero_mbr */ | } /* is_zero_mbr */ | ||||||
| 
 | 
 | ||||||
|  | int is_zero_mbr_with_other_windows_disk_signature(FILE *fp) | ||||||
|  | { | ||||||
|  |    #include "mbr_zero.h" | ||||||
|  | 
 | ||||||
|  |    return | ||||||
|  |       (!contains_data(fp, 0x0, mbr_zero_0x0, sizeof(mbr_zero_0x0))) && | ||||||
|  |       contains_data(fp, 0x0, mbr_zero_0x0, 0x1b8); | ||||||
|  |       contains_data(fp, 0x1bc, mbr_zero_0x0, 2); | ||||||
|  | 	/* Don't bother to check 55AA signature */ | ||||||
|  | } /* is_zero_mbr_with_other_windows_disk_signature */ | ||||||
|  | 
 | ||||||
|  | int is_zero_mbr_not_including_disk_signature_or_copy_protect(FILE *fp) | ||||||
|  | { | ||||||
|  |    #include "mbr_zero.h" | ||||||
|  | 
 | ||||||
|  |    return | ||||||
|  |       contains_data(fp, 0x0, mbr_zero_0x0, 0x1b8); | ||||||
|  | } /* is_zero_mbr_not_including_disk_signature_or_copy_protect */ | ||||||
|  | 
 | ||||||
| /* Handle nonstandard sector sizes (such as 4K) by writing
 | /* Handle nonstandard sector sizes (such as 4K) by writing
 | ||||||
|    the boot marker at every 512-2 bytes location */ |    the boot marker at every 512-2 bytes location */ | ||||||
| static int write_bootmark(FILE *fp) | static int write_bootmark(FILE *fp) | ||||||
| { | { | ||||||
| 	unsigned char aucRef[] = {0x55, 0xAA}; |    unsigned char aucRef[] = {0x55, 0xAA}; | ||||||
| 	uint32_t pos = 0x1FE; |    unsigned long pos = 0x1FE; | ||||||
| 	FAKE_FD* fd = (FAKE_FD*)fp; |  | ||||||
| 
 | 
 | ||||||
| 	for (pos = 0x1FE; pos < fd->_sector_size; pos += 0x200) { |    for (pos = 0x1FE; pos < ulBytesPerSector; pos += 0x200) { | ||||||
| 		if (!write_data(fp, pos, aucRef, sizeof(aucRef))) |       if (!write_data(fp, pos, aucRef, sizeof(aucRef))) | ||||||
| 			return 0; | 		    return 0; | ||||||
| 	} |    } | ||||||
| 	return 1; |    return 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int write_dos_mbr(FILE *fp) | int write_dos_mbr(FILE *fp) | ||||||
|  | @ -248,7 +286,7 @@ int write_reactos_mbr(FILE *fp) | ||||||
|       write_bootmark(fp); |       write_bootmark(fp); | ||||||
| } /* write_reactos_mbr */ | } /* write_reactos_mbr */ | ||||||
| 
 | 
 | ||||||
| int write_kolibri_mbr(FILE *fp) | int write_kolibrios_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_kolibri.h" |    #include "mbr_kolibri.h" | ||||||
| 
 | 
 | ||||||
|  | @ -266,7 +304,16 @@ int write_syslinux_mbr(FILE *fp) | ||||||
|       write_bootmark(fp); |       write_bootmark(fp); | ||||||
| } /* write_syslinux_mbr */ | } /* write_syslinux_mbr */ | ||||||
| 
 | 
 | ||||||
| int write_grub_mbr(FILE *fp) | int write_syslinux_gpt_mbr(FILE *fp) | ||||||
|  | { | ||||||
|  |    #include "mbr_gpt_syslinux.h" | ||||||
|  | 
 | ||||||
|  |    return | ||||||
|  |       write_data(fp, 0x0, mbr_gpt_syslinux_0x0, sizeof(mbr_gpt_syslinux_0x0)) && | ||||||
|  |       write_bootmark(fp); | ||||||
|  | } /* write_syslinux_gpt_mbr */ | ||||||
|  | 
 | ||||||
|  | int write_grub4dos_mbr(FILE *fp) | ||||||
| { | { | ||||||
|    #include "mbr_grub.h" |    #include "mbr_grub.h" | ||||||
| 
 | 
 | ||||||
|  | @ -289,6 +336,6 @@ int write_zero_mbr(FILE *fp) | ||||||
|    #include "mbr_zero.h" |    #include "mbr_zero.h" | ||||||
| 
 | 
 | ||||||
|    return |    return | ||||||
|       write_data(fp, 0x0,   mbr_zero_0x0, sizeof(mbr_zero_0x0)) && |       write_data(fp, 0x0, mbr_zero_0x0, sizeof(mbr_zero_0x0)) && | ||||||
|       write_bootmark(fp); |       write_bootmark(fp); | ||||||
| } /* write_zero_mbr */ | } /* write_zero_mbr */ | ||||||
|  |  | ||||||
|  | @ -129,5 +129,5 @@ int write_fat_16_ros_br(FILE *fp, int bKeepLabel) | ||||||
| 	 ( write_data(fp, 0x0, br_fat16_0x0, sizeof(br_fat16_0x0)) && | 	 ( write_data(fp, 0x0, br_fat16_0x0, sizeof(br_fat16_0x0)) && | ||||||
| 	   /* BIOS Parameter Block should not be overwritten */ | 	   /* BIOS Parameter Block should not be overwritten */ | ||||||
| 	   write_data(fp, 0x2b, label_11_char, sizeof(label_11_char)) && | 	   write_data(fp, 0x2b, label_11_char, sizeof(label_11_char)) && | ||||||
| 	   write_data(fp, 0x3e, br_fat16_0x3e, sizeof(br_fat16_0x3e)) );       | 	   write_data(fp, 0x3e, br_fat16_0x3e, sizeof(br_fat16_0x3e)) ); | ||||||
| } /* write_fat_16_ros_br */ | } /* write_fat_16_ros_br */ | ||||||
|  |  | ||||||
|  | @ -172,6 +172,57 @@ int write_fat_32_nt_br(FILE *fp, int bKeepLabel) | ||||||
| 	    ); | 	    ); | ||||||
| } /* write_fat_32_nt_br */ | } /* write_fat_32_nt_br */ | ||||||
| 
 | 
 | ||||||
|  | /* Not used by Rufus */ | ||||||
|  | #if 0 | ||||||
|  | int entire_fat_32_pe_br_matches(FILE *fp) | ||||||
|  | { | ||||||
|  |    #include "br_fat32_0x0.h" | ||||||
|  |    #include "br_fat32pe_0x52.h" | ||||||
|  |    #include "br_fat32pe_0x3f0.h" | ||||||
|  |    #include "br_fat32pe_0x1800.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_fat32pe_0x52, sizeof(br_fat32pe_0x52)) && | ||||||
|  | 	/* Cluster information might differ between systems */ | ||||||
|  | 	contains_data(fp, 0x3f0, br_fat32pe_0x3f0, sizeof(br_fat32pe_0x3f0)) && | ||||||
|  | 	contains_data(fp, 0x1800, br_fat32pe_0x1800, sizeof(br_fat32pe_0x1800)) | ||||||
|  | 	 ); | ||||||
|  | } /* entire_fat_32_nt_br_matches */ | ||||||
|  | 
 | ||||||
|  | int write_fat_32_pe_br(FILE *fp, int bKeepLabel) | ||||||
|  | { | ||||||
|  |    #include "label_11_char.h" | ||||||
|  |    #include "br_fat32_0x0.h" | ||||||
|  |    #include "br_fat32pe_0x52.h" | ||||||
|  |    #include "br_fat32pe_0x3f0.h" | ||||||
|  |    #include "br_fat32pe_0x1800.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_fat32pe_0x52, sizeof(br_fat32pe_0x52)) && | ||||||
|  |    /* Cluster information is not overwritten, however, it would bo OK
 | ||||||
|  |       to write 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff here. */ | ||||||
|  | 	   write_data(fp, 0x3f0, br_fat32pe_0x3f0, sizeof(br_fat32pe_0x3f0)) && | ||||||
|  | 	   write_data(fp, 0x1800, br_fat32pe_0x1800, sizeof(br_fat32pe_0x1800)) | ||||||
|  | 	    ); | ||||||
|  |    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_fat32pe_0x52, sizeof(br_fat32pe_0x52)) && | ||||||
|  |    /* Cluster information is not overwritten, however, it would bo OK
 | ||||||
|  |       to write 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff here. */ | ||||||
|  | 	   write_data(fp, 0x3f0, br_fat32pe_0x3f0, sizeof(br_fat32pe_0x3f0)) && | ||||||
|  | 	   write_data(fp, 0x1800, br_fat32pe_0x1800, sizeof(br_fat32pe_0x1800)) | ||||||
|  | 	    ); | ||||||
|  | } /* write_fat_32_pe_br */ | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| int entire_fat_32_ros_br_matches(FILE *fp) | int entire_fat_32_ros_br_matches(FILE *fp) | ||||||
| { | { | ||||||
|    #include "br_fat32_0x0.h" |    #include "br_fat32_0x0.h" | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| /******************************************************************
 | /******************************************************************
 | ||||||
|     Copyright (C) 2009  Henrik Carlqvist |     Copyright (C) 2009  Henrik Carlqvist | ||||||
|     Modified for Rufus/Windows (C) 2011-2015  Pete Batard |     Modified for Rufus/Windows (C) 2011-2016  Pete Batard | ||||||
| 
 | 
 | ||||||
|     This program is free software; you can redistribute it and/or modify |     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 |     it under the terms of the GNU General Public License as published by | ||||||
|  | @ -23,6 +23,8 @@ | ||||||
| #include "../rufus.h" | #include "../rufus.h" | ||||||
| #include "file.h" | #include "file.h" | ||||||
| 
 | 
 | ||||||
|  | extern unsigned long ulBytesPerSector; | ||||||
|  | 
 | ||||||
| /* Returns the number of bytes written or -1 on error */ | /* Returns the number of bytes written or -1 on error */ | ||||||
| int64_t write_sectors(HANDLE hDrive, uint64_t SectorSize, | int64_t write_sectors(HANDLE hDrive, uint64_t SectorSize, | ||||||
|                       uint64_t StartSector, uint64_t nSectors, |                       uint64_t StartSector, uint64_t nSectors, | ||||||
|  | @ -89,26 +91,37 @@ int64_t read_sectors(HANDLE hDrive, uint64_t SectorSize, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * The following calls use a hijacked fp on Windows that contains: | * The following calls use a hijacked fp on Windows that contains: | ||||||
|  * fp->_handle: a Windows handle | * fp->_handle: a Windows handle | ||||||
|  * fp->_sector_size: the sector size | * fp->_offset: a file offset | ||||||
|  * fp->_offset: a file offset | */ | ||||||
|  */ | 
 | ||||||
| int contains_data(FILE *fp, uint64_t Position, | int contains_data(FILE *fp, uint64_t Position, | ||||||
|                   const void *pData, uint64_t Len) | 	const void *pData, uint64_t Len) | ||||||
|  | { | ||||||
|  | 	unsigned char aucBuf[MAX_DATA_LEN]; | ||||||
|  | 
 | ||||||
|  | 	if (!read_data(fp, Position, aucBuf, Len)) | ||||||
|  | 		return 0; | ||||||
|  | 	if (memcmp(pData, aucBuf, (size_t)Len)) | ||||||
|  | 		return 0; | ||||||
|  | 	return 1; | ||||||
|  | } /* contains_data */ | ||||||
|  | 
 | ||||||
|  | int read_data(FILE *fp, uint64_t Position, | ||||||
|  |               void *pData, uint64_t Len) | ||||||
| { | { | ||||||
|    unsigned char aucBuf[MAX_DATA_LEN]; |    unsigned char aucBuf[MAX_DATA_LEN]; | ||||||
|    FAKE_FD* fd = (FAKE_FD*)fp; |    FAKE_FD* fd = (FAKE_FD*)fp; | ||||||
|    HANDLE hDrive = (HANDLE)fd->_handle; |    HANDLE hDrive = (HANDLE)fd->_handle; | ||||||
|    uint64_t SectorSize = (uint64_t)fd->_sector_size; |  | ||||||
|    uint64_t StartSector, EndSector, NumSectors; |    uint64_t StartSector, EndSector, NumSectors; | ||||||
|    Position += fd->_offset; |    Position += fd->_offset; | ||||||
| 
 | 
 | ||||||
|    StartSector = Position/SectorSize; |    StartSector = Position/ulBytesPerSector; | ||||||
|    EndSector   = (Position+Len+SectorSize-1)/SectorSize; |    EndSector   = (Position+Len+ulBytesPerSector -1)/ulBytesPerSector; | ||||||
|    NumSectors  = (size_t)(EndSector - StartSector); |    NumSectors  = (size_t)(EndSector - StartSector); | ||||||
| 
 | 
 | ||||||
|    if((NumSectors*SectorSize) > MAX_DATA_LEN) |    if((NumSectors*ulBytesPerSector) > MAX_DATA_LEN) | ||||||
|    { |    { | ||||||
|       uprintf("contains_data: please increase MAX_DATA_LEN in file.h\n"); |       uprintf("contains_data: please increase MAX_DATA_LEN in file.h\n"); | ||||||
|       return 0; |       return 0; | ||||||
|  | @ -120,14 +133,13 @@ int contains_data(FILE *fp, uint64_t Position, | ||||||
|       return 0; |       return 0; | ||||||
|    } |    } | ||||||
| 
 | 
 | ||||||
|    if(read_sectors(hDrive, SectorSize, StartSector, |    if(read_sectors(hDrive, ulBytesPerSector, StartSector, | ||||||
|                      NumSectors, aucBuf) <= 0) |                      NumSectors, aucBuf) <= 0) | ||||||
|       return 0; |       return 0; | ||||||
| 
 | 
 | ||||||
|    if(memcmp(pData, &aucBuf[Position - StartSector*SectorSize], (size_t)Len)) |    memcpy(pData, &aucBuf[Position - StartSector*ulBytesPerSector], (size_t)Len); | ||||||
|       return 0; |  | ||||||
|    return 1; |    return 1; | ||||||
| } /* contains_data */ | }  /* read_data */ | ||||||
| 
 | 
 | ||||||
| /* May read/write the same sector many times, but compatible with existing ms-sys */ | /* May read/write the same sector many times, but compatible with existing ms-sys */ | ||||||
| int write_data(FILE *fp, uint64_t Position, | int write_data(FILE *fp, uint64_t Position, | ||||||
|  | @ -136,15 +148,14 @@ int write_data(FILE *fp, uint64_t Position, | ||||||
|    unsigned char aucBuf[MAX_DATA_LEN]; |    unsigned char aucBuf[MAX_DATA_LEN]; | ||||||
|    FAKE_FD* fd = (FAKE_FD*)fp; |    FAKE_FD* fd = (FAKE_FD*)fp; | ||||||
|    HANDLE hDrive = (HANDLE)fd->_handle; |    HANDLE hDrive = (HANDLE)fd->_handle; | ||||||
|    uint64_t SectorSize = (uint64_t)fd->_sector_size; |  | ||||||
|    uint64_t StartSector, EndSector, NumSectors; |    uint64_t StartSector, EndSector, NumSectors; | ||||||
|    Position += fd->_offset; |    Position += fd->_offset; | ||||||
| 
 | 
 | ||||||
|    StartSector = Position/SectorSize; |    StartSector = Position/ulBytesPerSector; | ||||||
|    EndSector   = (Position+Len+SectorSize-1)/SectorSize; |    EndSector   = (Position+Len+ulBytesPerSector-1)/ulBytesPerSector; | ||||||
|    NumSectors  = EndSector - StartSector; |    NumSectors  = EndSector - StartSector; | ||||||
| 
 | 
 | ||||||
|    if((NumSectors*SectorSize) > MAX_DATA_LEN) |    if((NumSectors*ulBytesPerSector) > MAX_DATA_LEN) | ||||||
|    { |    { | ||||||
|       uprintf("Please increase MAX_DATA_LEN in file.h\n"); |       uprintf("Please increase MAX_DATA_LEN in file.h\n"); | ||||||
|       return 0; |       return 0; | ||||||
|  | @ -157,14 +168,14 @@ int write_data(FILE *fp, uint64_t Position, | ||||||
|    } |    } | ||||||
| 
 | 
 | ||||||
|    /* Data to write may not be aligned on a sector boundary => read into a sector buffer first */ |    /* Data to write may not be aligned on a sector boundary => read into a sector buffer first */ | ||||||
|    if(read_sectors(hDrive, SectorSize, StartSector, |    if(read_sectors(hDrive, ulBytesPerSector, StartSector, | ||||||
|                      NumSectors, aucBuf) <= 0) |                      NumSectors, aucBuf) <= 0) | ||||||
|       return 0; |       return 0; | ||||||
| 
 | 
 | ||||||
|    if(!memcpy(&aucBuf[Position - StartSector*SectorSize], pData, (size_t)Len)) |    if(!memcpy(&aucBuf[Position - StartSector*ulBytesPerSector], pData, (size_t)Len)) | ||||||
|       return 0; |       return 0; | ||||||
| 
 | 
 | ||||||
|    if(write_sectors(hDrive, SectorSize, StartSector, |    if(write_sectors(hDrive, ulBytesPerSector, StartSector, | ||||||
|                      NumSectors, aucBuf) <= 0) |                      NumSectors, aucBuf) <= 0) | ||||||
|       return 0; |       return 0; | ||||||
|    return 1; |    return 1; | ||||||
|  |  | ||||||
|  | @ -2,6 +2,16 @@ | ||||||
| #define BR_H | #define BR_H | ||||||
| 
 | 
 | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  | #include <stdint.h> | ||||||
|  | 
 | ||||||
|  | /* Sets custom number of bytes per sector, default value is 512 */ | ||||||
|  | void set_bytes_per_sector(unsigned long ulValue); | ||||||
|  | 
 | ||||||
|  | /* Gets Windows Disk Signature from MBR */ | ||||||
|  | uint32_t read_windows_disk_signature(FILE *fp); | ||||||
|  | 
 | ||||||
|  | /* Sets a new Windows Disk Signature to MBR */ | ||||||
|  | int write_windows_disk_signature(FILE *fp, uint32_t tWDS); | ||||||
| 
 | 
 | ||||||
| /* returns TRUE if the file has a boot record, otherwise FALSE.
 | /* returns TRUE if the file has a boot record, otherwise FALSE.
 | ||||||
|    The file position will change when this function is called! */ |    The file position will change when this function is called! */ | ||||||
|  | @ -46,7 +56,7 @@ int is_reactos_mbr(FILE *fp); | ||||||
| 
 | 
 | ||||||
| /* returns TRUE if the file has a Grub4DOS master boot record, otherwise
 | /* returns TRUE if the file has a Grub4DOS master boot record, otherwise
 | ||||||
|    FALSE.The file position will change when this function is called! */ |    FALSE.The file position will change when this function is called! */ | ||||||
| int is_grub_mbr(FILE *fp); | int is_grub4dos_mbr(FILE *fp); | ||||||
| 
 | 
 | ||||||
| /* returns TRUE if the file has a Grub 2.0 master boot record, otherwise
 | /* returns TRUE if the file has a Grub 2.0 master boot record, otherwise
 | ||||||
|    FALSE.The file position will change when this function is called! */ |    FALSE.The file position will change when this function is called! */ | ||||||
|  | @ -54,15 +64,21 @@ int is_grub2_mbr(FILE *fp); | ||||||
| 
 | 
 | ||||||
| /* returns TRUE if the file has a KolibriOS master boot record, otherwise
 | /* returns TRUE if the file has a KolibriOS master boot record, otherwise
 | ||||||
|    FALSE.The file position will change when this function is called! */ |    FALSE.The file position will change when this function is called! */ | ||||||
| int is_kolibri_mbr(FILE *fp); | int is_kolibrios_mbr(FILE *fp); | ||||||
| 
 | 
 | ||||||
| /* returns TRUE if the file has a syslinux master boot record, otherwise
 | /* returns TRUE if the file has a syslinux master boot record, otherwise
 | ||||||
|    FALSE.The file position will change when this function is called! */ |    FALSE.The file position will change when this function is called! */ | ||||||
| int is_syslinux_mbr(FILE *fp); | int is_syslinux_mbr(FILE *fp); | ||||||
| 
 | 
 | ||||||
|  | /* returns TRUE if the file has a syslinux GPT master boot record, otherwise
 | ||||||
|  |    FALSE.The file position will change when this function is called! */ | ||||||
|  | int is_syslinux_gpt_mbr(FILE *fp); | ||||||
|  | 
 | ||||||
| /* returns TRUE if the file has a zeroed master boot record, otherwise
 | /* returns TRUE if the file has a zeroed master boot record, otherwise
 | ||||||
|    FALSE.The file position will change when this function is called! */ |    FALSE.The file position will change when this function is called! */ | ||||||
| int is_zero_mbr(FILE *fp); | int is_zero_mbr(FILE *fp); | ||||||
|  | int is_zero_mbr_with_other_windows_disk_signature(FILE *fp); | ||||||
|  | int is_zero_mbr_not_including_disk_signature_or_copy_protect(FILE *fp); | ||||||
| 
 | 
 | ||||||
| /* Writes a dos master boot record to a file, returns TRUE on success, otherwise
 | /* Writes a dos master boot record to a file, returns TRUE on success, otherwise
 | ||||||
|    FALSE */ |    FALSE */ | ||||||
|  | @ -94,7 +110,7 @@ int write_reactos_mbr(FILE *fp); | ||||||
| 
 | 
 | ||||||
| /* Writes a Grub4DOS master boot record to a file, returns TRUE on success, otherwise
 | /* Writes a Grub4DOS master boot record to a file, returns TRUE on success, otherwise
 | ||||||
|    FALSE */ |    FALSE */ | ||||||
| int write_grub_mbr(FILE *fp); | int write_grub4dos_mbr(FILE *fp); | ||||||
| 
 | 
 | ||||||
| /* Writes a Grub 2.0 master boot record to a file, returns TRUE on success, otherwise
 | /* Writes a Grub 2.0 master boot record to a file, returns TRUE on success, otherwise
 | ||||||
|    FALSE */ |    FALSE */ | ||||||
|  | @ -102,12 +118,16 @@ int write_grub2_mbr(FILE *fp); | ||||||
| 
 | 
 | ||||||
| /* Writes a KolibriOS master boot record to a file, returns TRUE on success, otherwise
 | /* Writes a KolibriOS master boot record to a file, returns TRUE on success, otherwise
 | ||||||
|    FALSE */ |    FALSE */ | ||||||
| int write_kolibri_mbr(FILE *fp); | int write_kolibrios_mbr(FILE *fp); | ||||||
| 
 | 
 | ||||||
| /* Writes a syslinux master boot record to a file, returns TRUE on success, otherwise
 | /* Writes a syslinux master boot record to a file, returns TRUE on success, otherwise
 | ||||||
|    FALSE */ |    FALSE */ | ||||||
| int write_syslinux_mbr(FILE *fp); | int write_syslinux_mbr(FILE *fp); | ||||||
| 
 | 
 | ||||||
|  | /* Writes a syslinux GPT master boot record to a file, returns TRUE on success, otherwise
 | ||||||
|  |    FALSE */ | ||||||
|  | int write_syslinux_gpt_mbr(FILE *fp); | ||||||
|  | 
 | ||||||
| /* Writes an empty (zeroed) master boot record to a file, returns TRUE on success, otherwise
 | /* Writes an empty (zeroed) master boot record to a file, returns TRUE on success, otherwise
 | ||||||
|    FALSE */ |    FALSE */ | ||||||
| int write_zero_mbr(FILE *fp); | int write_zero_mbr(FILE *fp); | ||||||
|  |  | ||||||
|  | @ -38,6 +38,15 @@ int entire_fat_32_nt_br_matches(FILE *fp); | ||||||
|    FALSE */ |    FALSE */ | ||||||
| int write_fat_32_nt_br(FILE *fp, int bKeepLabel); | 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 NT, otherwise FALSE. | ||||||
|  |    The file position will change when this function is called! */ | ||||||
|  | int entire_fat_32_pe_br_matches(FILE *fp); | ||||||
|  | 
 | ||||||
|  | /* Writes a FAT32 NT boot record to a file, returns TRUE on success, otherwise
 | ||||||
|  |    FALSE */ | ||||||
|  | int write_fat_32_pe_br(FILE *fp, int bKeepLabel); | ||||||
|  | 
 | ||||||
| /* returns TRUE if the file has an exact match of the FAT32 boot record this
 | /* returns TRUE if the file has an exact match of the FAT32 boot record this
 | ||||||
|    program would create for ReactOS, otherwise FALSE. |    program would create for ReactOS, otherwise FALSE. | ||||||
|    The file position will change when this function is called! */ |    The file position will change when this function is called! */ | ||||||
|  |  | ||||||
|  | @ -10,7 +10,6 @@ | ||||||
| typedef struct { | typedef struct { | ||||||
| 	void *_handle; | 	void *_handle; | ||||||
| 	uint64_t _offset; | 	uint64_t _offset; | ||||||
| 	uint32_t _sector_size; |  | ||||||
| } FAKE_FD; | } FAKE_FD; | ||||||
| 
 | 
 | ||||||
| /* Checks if a file contains a data pattern of length Len at position
 | /* Checks if a file contains a data pattern of length Len at position
 | ||||||
|  | @ -18,6 +17,11 @@ typedef struct { | ||||||
| int contains_data(FILE *fp, uint64_t Position, | int contains_data(FILE *fp, uint64_t Position, | ||||||
|                   const void *pData, uint64_t Len); |                   const void *pData, uint64_t Len); | ||||||
| 
 | 
 | ||||||
|  | /* Reads data of length Len at position Position.
 | ||||||
|  | The file pointer will change when calling this function! */ | ||||||
|  | int read_data(FILE *fp, uint64_t Position, | ||||||
|  |               void *pData, uint64_t uiLen); | ||||||
|  | 
 | ||||||
| /* Writes a data pattern of length Len at position Position.
 | /* Writes a data pattern of length Len at position Position.
 | ||||||
|    The file pointer will change when calling this function! */ |    The file pointer will change when calling this function! */ | ||||||
| int write_data(FILE *fp, uint64_t Position, | int write_data(FILE *fp, uint64_t Position, | ||||||
|  |  | ||||||
							
								
								
									
										40
									
								
								src/ms-sys/inc/mbr_gpt_syslinux.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/ms-sys/inc/mbr_gpt_syslinux.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | ||||||
|  | /* This version is from gptmbr.bin from syslinux 6.02 */ | ||||||
|  | unsigned char mbr_gpt_syslinux_0x0[] = { | ||||||
|  |   0x33, 0xc0, 0xfa, 0x8e, 0xd8, 0x8e, 0xd0, 0xbc, 0x00, 0x7c, 0x89, 0xe6, | ||||||
|  |   0x06, 0x57, 0x8e, 0xc0, 0xfb, 0xfc, 0xbf, 0x00, 0x06, 0xb9, 0x00, 0x01, | ||||||
|  |   0xf3, 0xa5, 0xea, 0x1f, 0x06, 0x00, 0x00, 0x52, 0x89, 0xe5, 0x83, 0xec, | ||||||
|  |   0x1c, 0x6a, 0x1e, 0xc7, 0x46, 0xfa, 0x00, 0x02, 0x52, 0xb4, 0x41, 0xbb, | ||||||
|  |   0xaa, 0x55, 0x31, 0xc9, 0x30, 0xf6, 0xf9, 0xcd, 0x13, 0x5a, 0xb4, 0x08, | ||||||
|  |   0x72, 0x17, 0x81, 0xfb, 0x55, 0xaa, 0x75, 0x11, 0xd1, 0xe9, 0x73, 0x0d, | ||||||
|  |   0x66, 0xc7, 0x06, 0x59, 0x07, 0xb4, 0x42, 0xeb, 0x13, 0xb4, 0x48, 0x89, | ||||||
|  |   0xe6, 0xcd, 0x13, 0x83, 0xe1, 0x3f, 0x51, 0x0f, 0xb6, 0xc6, 0x40, 0xf7, | ||||||
|  |   0xe1, 0x52, 0x50, 0x66, 0x31, 0xc0, 0x66, 0x99, 0x40, 0xe8, 0xdc, 0x00, | ||||||
|  |   0x8b, 0x4e, 0x56, 0x8b, 0x46, 0x5a, 0x50, 0x51, 0xf7, 0xe1, 0xf7, 0x76, | ||||||
|  |   0xfa, 0x91, 0x41, 0x66, 0x8b, 0x46, 0x4e, 0x66, 0x8b, 0x56, 0x52, 0x53, | ||||||
|  |   0xe8, 0xc4, 0x00, 0xe2, 0xfb, 0x31, 0xf6, 0x5f, 0x59, 0x58, 0x66, 0x8b, | ||||||
|  |   0x15, 0x66, 0x0b, 0x55, 0x04, 0x66, 0x0b, 0x55, 0x08, 0x66, 0x0b, 0x55, | ||||||
|  |   0x0c, 0x74, 0x0c, 0xf6, 0x45, 0x30, 0x04, 0x74, 0x06, 0x21, 0xf6, 0x75, | ||||||
|  |   0x19, 0x89, 0xfe, 0x01, 0xc7, 0xe2, 0xdf, 0x21, 0xf6, 0x75, 0x2e, 0xe8, | ||||||
|  |   0xe1, 0x00, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x4f, 0x53, | ||||||
|  |   0x0d, 0x0a, 0xe8, 0xd2, 0x00, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, | ||||||
|  |   0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, 0x70, 0x61, 0x72, | ||||||
|  |   0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0d, 0x0a, 0x91, 0xbf, 0xbe, | ||||||
|  |   0x07, 0x57, 0x66, 0x31, 0xc0, 0xb0, 0x80, 0x66, 0xab, 0xb0, 0xed, 0x66, | ||||||
|  |   0xab, 0x66, 0x8b, 0x44, 0x20, 0x66, 0x8b, 0x54, 0x24, 0xe8, 0x40, 0x00, | ||||||
|  |   0x66, 0x8b, 0x44, 0x28, 0x66, 0x8b, 0x54, 0x2c, 0x66, 0x2b, 0x44, 0x20, | ||||||
|  |   0x66, 0x1b, 0x54, 0x24, 0xe8, 0x70, 0x00, 0xe8, 0x2a, 0x00, 0x66, 0x0f, | ||||||
|  |   0xb7, 0xc1, 0x66, 0xab, 0xf3, 0xa4, 0x5e, 0x66, 0x8b, 0x44, 0x34, 0x66, | ||||||
|  |   0x8b, 0x54, 0x38, 0xe8, 0x22, 0x00, 0x81, 0x3e, 0xfe, 0x7d, 0x55, 0xaa, | ||||||
|  |   0x75, 0x85, 0x89, 0xec, 0x5a, 0x5f, 0x07, 0x66, 0xb8, 0x21, 0x47, 0x50, | ||||||
|  |   0x54, 0xfa, 0xff, 0xe4, 0x66, 0x21, 0xd2, 0x74, 0x04, 0x66, 0x83, 0xc8, | ||||||
|  |   0xff, 0x66, 0xab, 0xc3, 0xbb, 0x00, 0x7c, 0x66, 0x60, 0x66, 0x52, 0x66, | ||||||
|  |   0x50, 0x06, 0x53, 0x6a, 0x01, 0x6a, 0x10, 0x89, 0xe6, 0x66, 0xf7, 0x76, | ||||||
|  |   0xdc, 0xc0, 0xe4, 0x06, 0x88, 0xe1, 0x88, 0xc5, 0x92, 0xf6, 0x76, 0xe0, | ||||||
|  |   0x88, 0xc6, 0x08, 0xe1, 0x41, 0xb8, 0x01, 0x02, 0x8a, 0x56, 0x00, 0xcd, | ||||||
|  |   0x13, 0x8d, 0x64, 0x10, 0x66, 0x61, 0x72, 0x0c, 0x02, 0x7e, 0xfb, 0x66, | ||||||
|  |   0x83, 0xc0, 0x01, 0x66, 0x83, 0xd2, 0x00, 0xc3, 0xe8, 0x0c, 0x00, 0x44, | ||||||
|  |   0x69, 0x73, 0x6b, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0d, 0x0a, 0x5e, | ||||||
|  |   0xac, 0xb4, 0x0e, 0x8a, 0x3e, 0x62, 0x04, 0xb3, 0x07, 0xcd, 0x10, 0x3c, | ||||||
|  |   0x0a, 0x75, 0xf1, 0xcd, 0x18, 0xf4, 0xeb, 0xfd, 0x00, 0x00, 0x00, 0x00, | ||||||
|  |   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | ||||||
|  | }; | ||||||
|  | @ -1,29 +1,40 @@ | ||||||
| /* Public domain MBR by H. Peter Anvin supplied with Syslinux */ | /* This version is from mbr.bin from syslinux 6.02 */ | ||||||
| /* This version from mbr.asm,v 1.6 2--2/10/03 10:02:50 */ |  | ||||||
| unsigned char mbr_syslinux_0x0[] = { | unsigned char mbr_syslinux_0x0[] = { | ||||||
|   0xfa, 0x31, 0xc0, 0x8e, 0xd8, 0x8e, 0xc0, 0x8e, 0xd0, 0xbc, 0x00, 0x7c, |   0x33, 0xc0, 0xfa, 0x8e, 0xd8, 0x8e, 0xd0, 0xbc, 0x00, 0x7c, 0x89, 0xe6, | ||||||
|   0xfb, 0xfc, 0x89, 0xe6, 0xbf, 0x00, 0x06, 0xb9, 0x00, 0x01, 0xf3, 0xa5, |   0x06, 0x57, 0x8e, 0xc0, 0xfb, 0xfc, 0xbf, 0x00, 0x06, 0xb9, 0x00, 0x01, | ||||||
|   0xea, 0x1d, 0x06, 0x00, 0x00, 0x88, 0x16, 0x00, 0x08, 0xb4, 0x08, 0xcd, |   0xf3, 0xa5, 0xea, 0x1f, 0x06, 0x00, 0x00, 0x52, 0x52, 0xb4, 0x41, 0xbb, | ||||||
|   0x13, 0x31, 0xc0, 0x88, 0xf0, 0x40, 0xa3, 0xec, 0x06, 0x80, 0xe1, 0x3f, |   0xaa, 0x55, 0x31, 0xc9, 0x30, 0xf6, 0xf9, 0xcd, 0x13, 0x72, 0x13, 0x81, | ||||||
|   0x88, 0x0e, 0xee, 0x06, 0xbe, 0xbe, 0x07, 0x31, 0xc0, 0xb9, 0x04, 0x00, |   0xfb, 0x55, 0xaa, 0x75, 0x0d, 0xd1, 0xe9, 0x73, 0x09, 0x66, 0xc7, 0x06, | ||||||
|   0xf6, 0x04, 0x80, 0x74, 0x03, 0x40, 0x89, 0xf7, 0x83, 0xc6, 0x10, 0xe2, |   0x8d, 0x06, 0xb4, 0x42, 0xeb, 0x15, 0x5a, 0xb4, 0x08, 0xcd, 0x13, 0x83, | ||||||
|   0xf3, 0x83, 0xf8, 0x01, 0x75, 0x73, 0x8a, 0x16, 0x00, 0x08, 0xb8, 0x00, |   0xe1, 0x3f, 0x51, 0x0f, 0xb6, 0xc6, 0x40, 0xf7, 0xe1, 0x52, 0x50, 0x66, | ||||||
|   0x41, 0xbb, 0xaa, 0x55, 0x31, 0xc9, 0x30, 0xf6, 0xf9, 0xcd, 0x13, 0x72, |   0x31, 0xc0, 0x66, 0x99, 0xe8, 0x66, 0x00, 0xe8, 0x35, 0x01, 0x4d, 0x69, | ||||||
|   0x23, 0x81, 0xfb, 0x55, 0xaa, 0x75, 0x1d, 0xf6, 0xc1, 0x01, 0x74, 0x18, |   0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, | ||||||
|   0x57, 0xbe, 0xdc, 0x06, 0x8b, 0x5d, 0x08, 0x89, 0x5c, 0x08, 0x8b, 0x5d, |   0x69, 0x6e, 0x67, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x0d, | ||||||
|   0x0a, 0x89, 0x5c, 0x0a, 0x8a, 0x16, 0x00, 0x08, 0xb4, 0x42, 0xeb, 0x2a, |   0x0a, 0x66, 0x60, 0x66, 0x31, 0xd2, 0xbb, 0x00, 0x7c, 0x66, 0x52, 0x66, | ||||||
|   0x57, 0x8b, 0x45, 0x08, 0x8b, 0x55, 0x0a, 0xf7, 0x36, 0xee, 0x06, 0x42, |   0x50, 0x06, 0x53, 0x6a, 0x01, 0x6a, 0x10, 0x89, 0xe6, 0x66, 0xf7, 0x36, | ||||||
|   0x89, 0xd1, 0x31, 0xd2, 0xf7, 0x36, 0xec, 0x06, 0x88, 0xc5, 0xd1, 0xe8, |   0xf4, 0x7b, 0xc0, 0xe4, 0x06, 0x88, 0xe1, 0x88, 0xc5, 0x92, 0xf6, 0x36, | ||||||
|   0xd1, 0xe8, 0x24, 0xc0, 0x08, 0xc1, 0x88, 0xd6, 0x8a, 0x16, 0x00, 0x08, |   0xf8, 0x7b, 0x88, 0xc6, 0x08, 0xe1, 0x41, 0xb8, 0x01, 0x02, 0x8a, 0x16, | ||||||
|   0xbb, 0x00, 0x7c, 0xb8, 0x01, 0x02, 0xcd, 0x13, 0x72, 0x16, 0x5e, 0x81, |   0xfa, 0x7b, 0xcd, 0x13, 0x8d, 0x64, 0x10, 0x66, 0x61, 0xc3, 0xe8, 0xc4, | ||||||
|   0x3e, 0xfe, 0x7d, 0x55, 0xaa, 0x75, 0x08, 0xfa, 0xea, 0x00, 0x7c, 0x00, |   0xff, 0xbe, 0xbe, 0x7d, 0xbf, 0xbe, 0x07, 0xb9, 0x20, 0x00, 0xf3, 0xa5, | ||||||
|   0x00, 0x77, 0x05, 0xbe, 0xf0, 0x06, 0xeb, 0x03, 0xbe, 0x0b, 0x07, 0xac, |   0xc3, 0x66, 0x60, 0x89, 0xe5, 0xbb, 0xbe, 0x07, 0xb9, 0x04, 0x00, 0x31, | ||||||
|   0x30, 0xc0, 0x74, 0x09, 0xb4, 0x0e, 0xbb, 0x07, 0x00, 0xcd, 0x10, 0xeb, |   0xc0, 0x53, 0x51, 0xf6, 0x07, 0x80, 0x74, 0x03, 0x40, 0x89, 0xde, 0x83, | ||||||
|   0xf2, 0xeb, 0xfe, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x7c, 0x00, 0x00, |   0xc3, 0x10, 0xe2, 0xf3, 0x48, 0x74, 0x5b, 0x79, 0x39, 0x59, 0x5b, 0x8a, | ||||||
|   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |   0x47, 0x04, 0x3c, 0x0f, 0x74, 0x06, 0x24, 0x7f, 0x3c, 0x05, 0x75, 0x22, | ||||||
|   0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x70, 0x65, 0x72, |   0x66, 0x8b, 0x47, 0x08, 0x66, 0x8b, 0x56, 0x14, 0x66, 0x01, 0xd0, 0x66, | ||||||
|   0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, |   0x21, 0xd2, 0x75, 0x03, 0x66, 0x89, 0xc2, 0xe8, 0xac, 0xff, 0x72, 0x03, | ||||||
|   0x0d, 0x0a, 0x00, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, |   0xe8, 0xb6, 0xff, 0x66, 0x8b, 0x46, 0x1c, 0xe8, 0xa0, 0xff, 0x83, 0xc3, | ||||||
|   0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x6c, 0x6f, 0x61, 0x64, |   0x10, 0xe2, 0xcc, 0x66, 0x61, 0xc3, 0xe8, 0x76, 0x00, 0x4d, 0x75, 0x6c, | ||||||
|   0x69, 0x6e, 0x67, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0d, 0x0a, 0x00 |   0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, | ||||||
|  |   0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, | ||||||
|  |   0x0d, 0x0a, 0x66, 0x8b, 0x44, 0x08, 0x66, 0x03, 0x46, 0x1c, 0x66, 0x89, | ||||||
|  |   0x44, 0x08, 0xe8, 0x30, 0xff, 0x72, 0x27, 0x66, 0x81, 0x3e, 0x00, 0x7c, | ||||||
|  |   0x58, 0x46, 0x53, 0x42, 0x75, 0x09, 0x66, 0x83, 0xc0, 0x04, 0xe8, 0x1c, | ||||||
|  |   0xff, 0x72, 0x13, 0x81, 0x3e, 0xfe, 0x7d, 0x55, 0xaa, 0x0f, 0x85, 0xf2, | ||||||
|  |   0xfe, 0xbc, 0xfa, 0x7b, 0x5a, 0x5f, 0x07, 0xfa, 0xff, 0xe4, 0xe8, 0x1e, | ||||||
|  |   0x00, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, | ||||||
|  |   0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x65, | ||||||
|  |   0x72, 0x72, 0x6f, 0x72, 0x2e, 0x0d, 0x0a, 0x5e, 0xac, 0xb4, 0x0e, 0x8a, | ||||||
|  |   0x3e, 0x62, 0x04, 0xb3, 0x07, 0xcd, 0x10, 0x3c, 0x0a, 0x75, 0xf1, 0xcd, | ||||||
|  |   0x18, 0xf4, 0xeb, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||||
|  |   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| /* First 440 bytes of a zeroed MBR (disk signature is excluded) */ | /* First 446 bytes of a zeroed MBR*/ | ||||||
| unsigned char mbr_zero_0x0[] = { | unsigned char mbr_zero_0x0[] = { | ||||||
|   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||||
|   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||||
|  | @ -36,4 +36,6 @@ unsigned char mbr_zero_0x0[] = { | ||||||
|   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||||
|   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||||
|   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||||
|   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; |   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||||
|  |   0x00, 0x00 | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ int write_partition_number_of_heads(FILE *fp, int iHeads); | ||||||
| int write_partition_start_sector_number(FILE *fp, int iStartSector); | int write_partition_start_sector_number(FILE *fp, int iStartSector); | ||||||
| 
 | 
 | ||||||
| /* Writes a physical disk drive id of 0x80 (for C:) to a partition */ | /* Writes a physical disk drive id of 0x80 (for C:) to a partition */ | ||||||
| int write_partition_physical_disk_drive_id_fat16(FILE *fp); |  | ||||||
| int write_partition_physical_disk_drive_id_fat32(FILE *fp); | int write_partition_physical_disk_drive_id_fat32(FILE *fp); | ||||||
|  | int write_partition_physical_disk_drive_id_fat16(FILE *fp); | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -55,13 +55,13 @@ int write_partition_start_sector_number(FILE *fp, int iStartSector) | ||||||
| int write_partition_physical_disk_drive_id_fat32(FILE *fp) | int write_partition_physical_disk_drive_id_fat32(FILE *fp) | ||||||
| { | { | ||||||
|    unsigned char ucId = 0x80; /* C: */ |    unsigned char ucId = 0x80; /* C: */ | ||||||
|     | 
 | ||||||
|    return write_data(fp, 0x40, &ucId, 1); |    return write_data(fp, 0x40, &ucId, 1); | ||||||
| } /* write_partition_physical_disk_drive_id_fat32 */ | } /* write_partition_physical_disk_drive_id_fat32 */ | ||||||
| 
 | 
 | ||||||
| int write_partition_physical_disk_drive_id_fat16(FILE *fp) | int write_partition_physical_disk_drive_id_fat16(FILE *fp) | ||||||
| { | { | ||||||
|    unsigned char ucId = 0x80; /* C: */ |    unsigned char ucId = 0x80; /* C: */ | ||||||
|     | 
 | ||||||
|    return write_data(fp, 0x24, &ucId, 1); |    return write_data(fp, 0x24, &ucId, 1); | ||||||
| } /* write_partition_physical_disk_drive_id_fat16 */ | } /* write_partition_physical_disk_drive_id_fat16 */ | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -32,7 +32,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | ||||||
| 
 | 
 | ||||||
| IDD_DIALOG DIALOGEX 12, 12, 242, 376 | IDD_DIALOG DIALOGEX 12, 12, 242, 376 | ||||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| CAPTION "Rufus 2.7.823" | CAPTION "Rufus 2.7.824" | ||||||
| FONT 8, "Segoe UI Symbol", 400, 0, 0x0 | FONT 8, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     LTEXT           "Device",IDS_DEVICE_TXT,9,6,200,8 |     LTEXT           "Device",IDS_DEVICE_TXT,9,6,200,8 | ||||||
|  | @ -319,8 +319,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 2,7,823,0 |  FILEVERSION 2,7,824,0 | ||||||
|  PRODUCTVERSION 2,7,823,0 |  PRODUCTVERSION 2,7,824,0 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -337,13 +337,13 @@ BEGIN | ||||||
|         BEGIN |         BEGIN | ||||||
|             VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" |             VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" | ||||||
|             VALUE "FileDescription", "Rufus" |             VALUE "FileDescription", "Rufus" | ||||||
|             VALUE "FileVersion", "2.7.823" |             VALUE "FileVersion", "2.7.824" | ||||||
|             VALUE "InternalName", "Rufus" |             VALUE "InternalName", "Rufus" | ||||||
|             VALUE "LegalCopyright", "© 2011-2016 Pete Batard (GPL v3)" |             VALUE "LegalCopyright", "© 2011-2016 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", "2.7.823" |             VALUE "ProductVersion", "2.7.824" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue