mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[mbr] added mbr detection
* also added write_data() for Windows in file.h * also merged/removed fat16/32 includes * also removed disk-signature for zeroed MBR detection
This commit is contained in:
		
							parent
							
								
									2d8a674b88
								
							
						
					
					
						commit
						88143701ed
					
				
					 13 changed files with 116 additions and 105 deletions
				
			
		|  | @ -173,10 +173,7 @@ | ||||||
|     <ClInclude Include="..\inc\br_fat32_0x52.h" /> |     <ClInclude Include="..\inc\br_fat32_0x52.h" /> | ||||||
|     <ClInclude Include="..\inc\fat12.h" /> |     <ClInclude Include="..\inc\fat12.h" /> | ||||||
|     <ClInclude Include="..\inc\fat16.h" /> |     <ClInclude Include="..\inc\fat16.h" /> | ||||||
|     <ClInclude Include="..\inc\fat16fd.h" /> |  | ||||||
|     <ClInclude Include="..\inc\fat32.h" /> |     <ClInclude Include="..\inc\fat32.h" /> | ||||||
|     <ClInclude Include="..\inc\fat32fd.h" /> |  | ||||||
|     <ClInclude Include="..\inc\fat32nt.h" /> |  | ||||||
|     <ClInclude Include="..\inc\file.h" /> |     <ClInclude Include="..\inc\file.h" /> | ||||||
|     <ClInclude Include="..\inc\label_11_char.h" /> |     <ClInclude Include="..\inc\label_11_char.h" /> | ||||||
|     <ClInclude Include="..\inc\mbr_2000.h" /> |     <ClInclude Include="..\inc\mbr_2000.h" /> | ||||||
|  |  | ||||||
|  | @ -110,18 +110,9 @@ | ||||||
|     <ClInclude Include="..\inc\fat16.h"> |     <ClInclude Include="..\inc\fat16.h"> | ||||||
|       <Filter>Header Files\inc</Filter> |       <Filter>Header Files\inc</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|     <ClInclude Include="..\inc\fat16fd.h"> |  | ||||||
|       <Filter>Header Files\inc</Filter> |  | ||||||
|     </ClInclude> |  | ||||||
|     <ClInclude Include="..\inc\fat32.h"> |     <ClInclude Include="..\inc\fat32.h"> | ||||||
|       <Filter>Header Files\inc</Filter> |       <Filter>Header Files\inc</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|     <ClInclude Include="..\inc\fat32fd.h"> |  | ||||||
|       <Filter>Header Files\inc</Filter> |  | ||||||
|     </ClInclude> |  | ||||||
|     <ClInclude Include="..\inc\fat32nt.h"> |  | ||||||
|       <Filter>Header Files\inc</Filter> |  | ||||||
|     </ClInclude> |  | ||||||
|     <ClInclude Include="..\inc\file.h"> |     <ClInclude Include="..\inc\file.h"> | ||||||
|       <Filter>Header Files\inc</Filter> |       <Filter>Header Files\inc</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								fat16.c
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								fat16.c
									
										
									
									
									
								
							|  | @ -20,7 +20,6 @@ | ||||||
| 
 | 
 | ||||||
| #include "file.h" | #include "file.h" | ||||||
| #include "fat16.h" | #include "fat16.h" | ||||||
| #include "fat16fd.h" |  | ||||||
| 
 | 
 | ||||||
| int is_fat_16_fs(FILE *fp) | int is_fat_16_fs(FILE *fp) | ||||||
| { | { | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								fat32.c
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								fat32.c
									
										
									
									
									
								
							|  | @ -20,8 +20,6 @@ | ||||||
| 
 | 
 | ||||||
| #include "file.h" | #include "file.h" | ||||||
| #include "fat32.h" | #include "fat32.h" | ||||||
| #include "fat32fd.h" |  | ||||||
| #include "fat32nt.h" |  | ||||||
| 
 | 
 | ||||||
| int is_fat_32_fs(FILE *fp) | int is_fat_32_fs(FILE *fp) | ||||||
| { | { | ||||||
|  |  | ||||||
							
								
								
									
										53
									
								
								file.c
									
										
									
									
									
								
							
							
						
						
									
										53
									
								
								file.c
									
										
									
									
									
								
							|  | @ -1,6 +1,6 @@ | ||||||
| /******************************************************************
 | /******************************************************************
 | ||||||
|     Copyright (C) 2009  Henrik Carlqvist |     Copyright (C) 2009  Henrik Carlqvist | ||||||
|     Modified for Windows/Rufus (C) 2011  Pete Batard |     Modified for Rufus/Windows (C) 2011  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 | ||||||
|  | @ -106,38 +106,37 @@ int contains_data(FILE *fp, unsigned long ulPosition, | ||||||
|    if(memcmp(pData, &aucBuf[ulPosition - ulStartSector*ulSectorSize], uiLen)) |    if(memcmp(pData, &aucBuf[ulPosition - ulStartSector*ulSectorSize], uiLen)) | ||||||
|       return 0; |       return 0; | ||||||
|    return 1; |    return 1; | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|    // ONLY WORKS IN SECTORS!!!
 |  | ||||||
|    ptr.QuadPart = ulPosition; |  | ||||||
|    uprintf("HANDLE = %p\n", (HANDLE)fp); |  | ||||||
|    if (!SetFilePointerEx((HANDLE)fp, ptr, NULL, FILE_BEGIN)) |  | ||||||
|    { |  | ||||||
|       uprintf("Could not access byte %d - %s\n", ulPosition, WindowsErrorString()); |  | ||||||
|       return 0; |  | ||||||
|    } |  | ||||||
|    uprintf("SEEK to %d OK\n", WindowsErrorString()); |  | ||||||
| 
 |  | ||||||
|    uiLen = 512; |  | ||||||
|    if ((!ReadFile((HANDLE)fp, aucBuf, (DWORD)uiLen, &size, NULL)) || (size != (DWORD)uiLen)) { |  | ||||||
|       uprintf("Read error (size = %d vs %d) - %s\n", size, (DWORD)uiLen, WindowsErrorString()); |  | ||||||
|       return 0; |  | ||||||
|    } |  | ||||||
| 
 |  | ||||||
|    uiLen = 2; |  | ||||||
|    uprintf("aucBuf[0] = %02X, aucBuf[1] = %02X\n", aucBuf[0], aucBuf[1]); |  | ||||||
|    if(memcmp(pData, aucBuf, uiLen)) |  | ||||||
|       return 0; |  | ||||||
|    return 1; |  | ||||||
| */ |  | ||||||
| } /* contains_data */ | } /* contains_data */ | ||||||
| 
 | 
 | ||||||
|  | /* May read/write the same sector many times, but compatible with existing ms-sys */ | ||||||
| int write_data(FILE *fp, unsigned long ulPosition, | int write_data(FILE *fp, unsigned long ulPosition, | ||||||
|                const void *pData, unsigned int uiLen) |                const void *pData, unsigned int uiLen) | ||||||
| { | { | ||||||
|    if(fseek(fp, ulPosition, SEEK_SET)) |    unsigned char aucBuf[MAX_DATA_LEN]; | ||||||
|  |    HANDLE hDrive = (HANDLE)fp->_ptr; | ||||||
|  |    unsigned long ulSectorSize = (unsigned long)fp->_bufsiz; | ||||||
|  |    unsigned long ulStartSector, ulEndSector, ulNumSectors; | ||||||
|  | 
 | ||||||
|  |    ulStartSector = ulPosition/ulSectorSize; | ||||||
|  |    ulEndSector   = (ulPosition+uiLen+ulSectorSize-1)/ulSectorSize; | ||||||
|  |    ulNumSectors  = ulEndSector - ulStartSector; | ||||||
|  | 
 | ||||||
|  |    if((ulNumSectors*ulSectorSize) > MAX_DATA_LEN) | ||||||
|  |    { | ||||||
|  |       uprintf("Please increase MAX_DATA_LEN in file.h\n"); | ||||||
|       return 0; |       return 0; | ||||||
|    if(!fwrite(pData, uiLen, 1, fp)) |    } | ||||||
|  | 
 | ||||||
|  |    /* Data to write may not be aligned on a sector boundary => read into a sector buffer first */ | ||||||
|  |    if(!read_sectors(hDrive, ulSectorSize, ulStartSector, | ||||||
|  |                      ulNumSectors, aucBuf, sizeof(aucBuf))) | ||||||
|  |       return 0; | ||||||
|  | 
 | ||||||
|  |    if(!memcpy(&aucBuf[ulPosition - ulStartSector*ulSectorSize], pData, uiLen)) | ||||||
|  |       return 0; | ||||||
|  | 
 | ||||||
|  |    if(!write_sectors(hDrive, ulSectorSize, ulStartSector, | ||||||
|  |                      ulNumSectors, aucBuf, sizeof(aucBuf))) | ||||||
|       return 0; |       return 0; | ||||||
|    return 1; |    return 1; | ||||||
| } /* write_data */ | } /* write_data */ | ||||||
|  |  | ||||||
|  | @ -20,4 +20,13 @@ int entire_fat_16_br_matches(FILE *fp); | ||||||
|    FALSE */ |    FALSE */ | ||||||
| int write_fat_16_br(FILE *fp, int bKeepLabel); | int write_fat_16_br(FILE *fp, int bKeepLabel); | ||||||
| 
 | 
 | ||||||
|  | /* returns TRUE if the file has an exact match ot the FAT16 boot record this
 | ||||||
|  |    program would create for FreeDOS, otherwise FALSE. | ||||||
|  |    The file position will change when this function is called! */ | ||||||
|  | int entire_fat_16_fd_br_matches(FILE *fp); | ||||||
|  | 
 | ||||||
|  | /* Writes a FAT16 FreeDOS boot record to a file, returns TRUE on success,
 | ||||||
|  |    otherwise FALSE */ | ||||||
|  | int write_fat_16_fd_br(FILE *fp, int bKeepLabel); | ||||||
|  | 
 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -1,15 +0,0 @@ | ||||||
| #ifndef FAT16FD_H |  | ||||||
| #define FAT16FD_H |  | ||||||
| 
 |  | ||||||
| #include <stdio.h> |  | ||||||
| 
 |  | ||||||
| /* returns TRUE if the file has an exact match ot the FAT16 boot record this
 |  | ||||||
|    program would create for FreeDOS, otherwise FALSE. |  | ||||||
|    The file position will change when this function is called! */ |  | ||||||
| int entire_fat_16_fd_br_matches(FILE *fp); |  | ||||||
| 
 |  | ||||||
| /* Writes a FAT16 FreeDOS boot record to a file, returns TRUE on success,
 |  | ||||||
|    otherwise FALSE */ |  | ||||||
| int write_fat_16_fd_br(FILE *fp, int bKeepLabel); |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
							
								
								
									
										18
									
								
								inc/fat32.h
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								inc/fat32.h
									
										
									
									
									
								
							|  | @ -20,4 +20,22 @@ int entire_fat_32_br_matches(FILE *fp); | ||||||
|    FALSE */ |    FALSE */ | ||||||
| int write_fat_32_br(FILE *fp, int bKeepLabel); | int write_fat_32_br(FILE *fp, int bKeepLabel); | ||||||
| 
 | 
 | ||||||
|  | /* returns TRUE if the file has an exact match ot the FAT32 boot record this
 | ||||||
|  |    program would create for FreeDOS, otherwise FALSE. | ||||||
|  |    The file position will change when this function is called! */ | ||||||
|  | int entire_fat_32_fd_br_matches(FILE *fp); | ||||||
|  | 
 | ||||||
|  | /* Writes a FAT32 FreeDOS boot record to a file, returns TRUE on success,
 | ||||||
|  |    otherwise FALSE */ | ||||||
|  | int write_fat_32_fd_br(FILE *fp, int bKeepLabel); | ||||||
|  | 
 | ||||||
|  | /* returns TRUE if the file has an exact match ot 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_nt_br_matches(FILE *fp); | ||||||
|  | 
 | ||||||
|  | /* Writes a FAT32 NT boot record to a file, returns TRUE on success, otherwise
 | ||||||
|  |    FALSE */ | ||||||
|  | int write_fat_32_nt_br(FILE *fp, int bKeepLabel); | ||||||
|  | 
 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -1,15 +0,0 @@ | ||||||
| #ifndef FAT32FD_H |  | ||||||
| #define FAT32FD_H |  | ||||||
| 
 |  | ||||||
| #include <stdio.h> |  | ||||||
| 
 |  | ||||||
| /* returns TRUE if the file has an exact match ot the FAT32 boot record this
 |  | ||||||
|    program would create for FreeDOS, otherwise FALSE. |  | ||||||
|    The file position will change when this function is called! */ |  | ||||||
| int entire_fat_32_fd_br_matches(FILE *fp); |  | ||||||
| 
 |  | ||||||
| /* Writes a FAT32 FreeDOS boot record to a file, returns TRUE on success,
 |  | ||||||
|    otherwise FALSE */ |  | ||||||
| int write_fat_32_fd_br(FILE *fp, int bKeepLabel); |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
|  | @ -1,15 +0,0 @@ | ||||||
| #ifndef FAT32NT_H |  | ||||||
| #define FAT32NT_H |  | ||||||
| 
 |  | ||||||
| #include <stdio.h> |  | ||||||
| 
 |  | ||||||
| /* returns TRUE if the file has an exact match ot 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_nt_br_matches(FILE *fp); |  | ||||||
| 
 |  | ||||||
| /* Writes a FAT32 NT boot record to a file, returns TRUE on success, otherwise
 |  | ||||||
|    FALSE */ |  | ||||||
| int write_fat_32_nt_br(FILE *fp, int bKeepLabel); |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| /* First 446 bytes of a zeroed MBR*/ | /* First 440 bytes of a zeroed MBR (disk signature is excluded) */ | ||||||
| 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,6 +36,4 @@ 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 |  | ||||||
| }; |  | ||||||
|  |  | ||||||
							
								
								
									
										63
									
								
								rufus.c
									
										
									
									
									
								
							
							
						
						
									
										63
									
								
								rufus.c
									
										
									
									
									
								
							|  | @ -49,6 +49,7 @@ | ||||||
| #include "rufus.h" | #include "rufus.h" | ||||||
| #include "sys_types.h" | #include "sys_types.h" | ||||||
| #include "br.h" | #include "br.h" | ||||||
|  | #include "fat16.h" | ||||||
| #include "fat32.h" | #include "fat32.h" | ||||||
| #include "file.h" | #include "file.h" | ||||||
| 
 | 
 | ||||||
|  | @ -646,14 +647,63 @@ out: | ||||||
| 	return r; | 	return r; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static BOOL AnalyzeMBR(HANDLE hPhysicalDrive) | ||||||
|  | { | ||||||
|  | 	FILE fake_fd; | ||||||
|  | 
 | ||||||
|  | 	fake_fd._ptr = (char*)hPhysicalDrive; | ||||||
|  | 	fake_fd._bufsiz = SelectedDrive.Geometry.BytesPerSector; | ||||||
|  | 
 | ||||||
|  | 	// TODO: Apply this detection before partitioning
 | ||||||
|  | 	// TODO: since we detect all these, might as well give some MBR choice to the user?
 | ||||||
|  | 	if (is_br(&fake_fd)) { | ||||||
|  | 		uprintf("Drive has an x86 boot sector\n"); | ||||||
|  | 	} else{ | ||||||
|  | 		uprintf("Drive is missing an x86 boot sector!\n"); | ||||||
|  | 		return FALSE; | ||||||
|  | 	} | ||||||
|  | 	// TODO: Add/Eliminate FAT12?
 | ||||||
|  | 	if (is_fat_16_br(&fake_fd) || is_fat_32_br(&fake_fd)) { | ||||||
|  | 		if (entire_fat_16_br_matches(&fake_fd)) { | ||||||
|  | 			uprintf("Exact FAT16 DOS boot record match\n"); | ||||||
|  | 		} else if (entire_fat_16_fd_br_matches(&fake_fd)) { | ||||||
|  | 			uprintf("Exact FAT16 FreeDOS boot record match\n"); | ||||||
|  | 		} else if (entire_fat_32_br_matches(&fake_fd)) { | ||||||
|  | 			uprintf("Exact FAT32 DOS boot record match\n"); | ||||||
|  | 		} else if (entire_fat_32_nt_br_matches(&fake_fd)) { | ||||||
|  | 			uprintf("Exact FAT32 NT boot record match\n"); | ||||||
|  | 		} else if (entire_fat_32_fd_br_matches(&fake_fd)) { | ||||||
|  | 			uprintf("Exactly FAT32 FreeDOS boot record match\n"); | ||||||
|  | 		} else { | ||||||
|  | 			uprintf("Unknown FAT16 or FAT32 boot record\n"); | ||||||
|  | 		} | ||||||
|  | 	} else if (is_dos_mbr(&fake_fd)) { | ||||||
|  | 		uprintf("Microsoft DOS/NT/95A master boot record match\n"); | ||||||
|  | 	} else if (is_dos_f2_mbr(&fake_fd)) { | ||||||
|  | 		uprintf("Microsoft DOS/NT/95A master boot record with the undocumented\n"); | ||||||
|  | 		uprintf("F2 instruction match\n"); | ||||||
|  | 	} else if (is_95b_mbr(&fake_fd)) { | ||||||
|  | 		uprintf("Microsoft 95B/98/98SE/ME master boot record match\n"); | ||||||
|  | 	} else if (is_2000_mbr(&fake_fd)) { | ||||||
|  | 		uprintf("Microsoft 2000/XP/2003 master boot record match\n"); | ||||||
|  | 	} else if (is_vista_mbr(&fake_fd)) { | ||||||
|  | 		uprintf("Microsoft Vista master boot record match\n"); | ||||||
|  | 	} else if (is_win7_mbr(&fake_fd)) { | ||||||
|  | 		uprintf("Microsoft 7 master boot record match\n"); | ||||||
|  | 	} else if (is_zero_mbr(&fake_fd)) { | ||||||
|  | 		uprintf("Zeroed non-bootable master boot record match\n"); | ||||||
|  | 	} else { | ||||||
|  | 		uprintf("Unknown boot record\n"); | ||||||
|  | 	} | ||||||
|  | 	return TRUE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Process the MBR |  * Process the MBR | ||||||
|  */ |  */ | ||||||
| static BOOL ProcessMBR(HANDLE hPhysicalDrive) | static BOOL ProcessMBR(HANDLE hPhysicalDrive) | ||||||
| { | { | ||||||
| 	BOOL r = FALSE; | 	BOOL r = FALSE; | ||||||
| 	HANDLE hDrive = hPhysicalDrive; |  | ||||||
| 	FILE fake_fd; |  | ||||||
| 	unsigned char* buf = NULL; | 	unsigned char* buf = NULL; | ||||||
| 	size_t SecSize = SelectedDrive.Geometry.BytesPerSector; | 	size_t SecSize = SelectedDrive.Geometry.BytesPerSector; | ||||||
| 	size_t nSecs = 0x200/min(0x200, SelectedDrive.Geometry.BytesPerSector); | 	size_t nSecs = 0x200/min(0x200, SelectedDrive.Geometry.BytesPerSector); | ||||||
|  | @ -665,10 +715,7 @@ static BOOL ProcessMBR(HANDLE hPhysicalDrive) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	PrintStatus("Processing MBR...\n"); | 	PrintStatus("Processing MBR...\n"); | ||||||
| 
 | 	if (!AnalyzeMBR(hPhysicalDrive)) return FALSE; | ||||||
| 	fake_fd._ptr = (char*)hPhysicalDrive; |  | ||||||
| 	fake_fd._bufsiz = SelectedDrive.Geometry.BytesPerSector; |  | ||||||
| 	uprintf("I'm %sa boot record\n", is_br(&fake_fd)?"":"NOT "); |  | ||||||
| 
 | 
 | ||||||
| 	// FormatEx rewrites the MBR and removes the LBA attribute of FAT16
 | 	// FormatEx rewrites the MBR and removes the LBA attribute of FAT16
 | ||||||
| 	// and FAT32 partitions - we need to correct this in the MBR
 | 	// and FAT32 partitions - we need to correct this in the MBR
 | ||||||
|  | @ -680,7 +727,7 @@ static BOOL ProcessMBR(HANDLE hPhysicalDrive) | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (!read_sectors(hDrive, SelectedDrive.Geometry.BytesPerSector, 0, nSecs, buf, SecSize)) { | 	if (!read_sectors(hPhysicalDrive, SelectedDrive.Geometry.BytesPerSector, 0, nSecs, buf, SecSize)) { | ||||||
| 		uprintf("Could not read MBR\n"); | 		uprintf("Could not read MBR\n"); | ||||||
| 		FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_READ_FAULT; | 		FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_READ_FAULT; | ||||||
| 		goto out; | 		goto out; | ||||||
|  | @ -696,7 +743,7 @@ static BOOL ProcessMBR(HANDLE hPhysicalDrive) | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (!write_sectors(hDrive, SelectedDrive.Geometry.BytesPerSector, 0, nSecs, buf, SecSize)) { | 	if (!write_sectors(hPhysicalDrive, SelectedDrive.Geometry.BytesPerSector, 0, nSecs, buf, SecSize)) { | ||||||
| 		uprintf("Could not write MBR\n"); | 		uprintf("Could not write MBR\n"); | ||||||
| 		FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT; | 		FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT; | ||||||
| 		goto out; | 		goto out; | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								rufus.rc
									
										
									
									
									
								
							|  | @ -63,7 +63,7 @@ BEGIN | ||||||
|     DEFPUSHBUTTON   "OK",IDOK,231,175,50,14,WS_GROUP |     DEFPUSHBUTTON   "OK",IDOK,231,175,50,14,WS_GROUP | ||||||
|     CONTROL         "<a href=""https://github.com/pbatard/rufus/wiki/Rufus"">https://github.com/pbatard/rufus</a>",IDC_ABOUT_RUFUS_URL, |     CONTROL         "<a href=""https://github.com/pbatard/rufus/wiki/Rufus"">https://github.com/pbatard/rufus</a>",IDC_ABOUT_RUFUS_URL, | ||||||
|                     "SysLink",WS_TABSTOP,46,47,114,9 |                     "SysLink",WS_TABSTOP,46,47,114,9 | ||||||
|     LTEXT           "Version 1.0.0 (Build 48)",IDC_STATIC,46,19,78,8 |     LTEXT           "Version 1.0.0 (Build 49)",IDC_STATIC,46,19,78,8 | ||||||
|     PUSHBUTTON      "License...",IDC_ABOUT_LICENSE,46,175,50,14,WS_GROUP |     PUSHBUTTON      "License...",IDC_ABOUT_LICENSE,46,175,50,14,WS_GROUP | ||||||
|     EDITTEXT        IDC_ABOUT_COPYRIGHTS,46,107,235,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL |     EDITTEXT        IDC_ABOUT_COPYRIGHTS,46,107,235,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL | ||||||
|     LTEXT           "Report bugs or request enhancements at:",IDC_STATIC,46,66,187,8 |     LTEXT           "Report bugs or request enhancements at:",IDC_STATIC,46,66,187,8 | ||||||
|  | @ -162,8 +162,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 1,0,0,48 |  FILEVERSION 1,0,0,49 | ||||||
|  PRODUCTVERSION 1,0,0,48 |  PRODUCTVERSION 1,0,0,49 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -180,13 +180,13 @@ BEGIN | ||||||
|         BEGIN |         BEGIN | ||||||
|             VALUE "CompanyName", "akeo.ie" |             VALUE "CompanyName", "akeo.ie" | ||||||
|             VALUE "FileDescription", "Rufus" |             VALUE "FileDescription", "Rufus" | ||||||
|             VALUE "FileVersion", "1.0.0.48" |             VALUE "FileVersion", "1.0.0.49" | ||||||
|             VALUE "InternalName", "Rufus" |             VALUE "InternalName", "Rufus" | ||||||
|             VALUE "LegalCopyright", "© 2011 Pete Batard (GPL v3)" |             VALUE "LegalCopyright", "© 2011 Pete Batard (GPL v3)" | ||||||
|             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" |             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" | ||||||
|             VALUE "OriginalFilename", "rufus.exe" |             VALUE "OriginalFilename", "rufus.exe" | ||||||
|             VALUE "ProductName", "Rufus" |             VALUE "ProductName", "Rufus" | ||||||
|             VALUE "ProductVersion", "1.0.0.48" |             VALUE "ProductVersion", "1.0.0.49" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  | @ -212,7 +212,7 @@ IDI_ICON                ICON                    "rufus.ico" | ||||||
| 
 | 
 | ||||||
| STRINGTABLE | STRINGTABLE | ||||||
| BEGIN | BEGIN | ||||||
|     IDS_VERSION             "Rufus v1.0.0.48" |     IDS_VERSION             "Rufus v1.0.0.49" | ||||||
| END | END | ||||||
| 
 | 
 | ||||||
| #endif    // English resources | #endif    // English resources | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue