mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[dev] improve FIXED vs REMOVABLE detection for drives with unmounted partitions
* And add an exception for a reported flash drive * Also fix a couple warnings in msapi_utf8.h and net.c
This commit is contained in:
		
							parent
							
								
									1e6e38b180
								
							
						
					
					
						commit
						2442aaf76f
					
				
					 7 changed files with 39 additions and 20 deletions
				
			
		|  | @ -418,9 +418,9 @@ BOOL GetOpticalMedia(IMG_SAVE* img_save) | |||
| /* For debugging user reports of HDDs vs UFDs */ | ||||
| //#define FORCED_DEVICE
 | ||||
| #ifdef FORCED_DEVICE | ||||
| #define FORCED_VID 0x05AC | ||||
| #define FORCED_PID 0x8406 | ||||
| #define FORCED_NAME "APPLE SD Card Reader USB Device" | ||||
| #define FORCED_VID 0x6557 | ||||
| #define FORCED_PID 0x0021 | ||||
| #define FORCED_NAME "USB DISK 2.0 USB Device" | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  |  | |||
							
								
								
									
										24
									
								
								src/drive.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								src/drive.c
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | |||
| /*
 | ||||
|  * Rufus: The Reliable USB Formatting Utility | ||||
|  * Drive access function calls | ||||
|  * Copyright © 2011-2019 Pete Batard <pete@akeo.ie> | ||||
|  * Copyright © 2011-2020 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 | ||||
|  | @ -797,11 +797,13 @@ static BOOL _GetDriveLettersAndType(DWORD DriveIndex, char* drive_letters, UINT* | |||
| { | ||||
| 	DWORD size; | ||||
| 	BOOL r = FALSE; | ||||
| 	HANDLE hDrive = INVALID_HANDLE_VALUE; | ||||
| 	HANDLE hDrive = INVALID_HANDLE_VALUE, hPhysical = INVALID_HANDLE_VALUE; | ||||
| 	UINT _drive_type; | ||||
| 	IO_STATUS_BLOCK io_status_block; | ||||
| 	FILE_FS_DEVICE_INFORMATION file_fs_device_info; | ||||
| 	int i = 0, drive_number; | ||||
| 	BYTE geometry[256] = { 0 }; | ||||
| 	PDISK_GEOMETRY_EX DiskGeometry = (PDISK_GEOMETRY_EX)(void*)geometry; | ||||
| 	int i = 0, drives_found = 0, drive_number; | ||||
| 	char *drive, drives[26*4 + 1];	/* "D:\", "E:\", etc., plus one NUL */ | ||||
| 	char logical_drive[] = "\\\\.\\#:"; | ||||
| 
 | ||||
|  | @ -865,6 +867,7 @@ static BOOL _GetDriveLettersAndType(DWORD DriveIndex, char* drive_letters, UINT* | |||
| 		safe_closehandle(hDrive); | ||||
| 		if (drive_number == DriveIndex) { | ||||
| 			r = TRUE; | ||||
| 			drives_found++; | ||||
| 			if (drive_letters != NULL) | ||||
| 				drive_letters[i++] = *drive; | ||||
| 			// The drive type should be the same for all volumes, so we can overwrite
 | ||||
|  | @ -873,6 +876,21 @@ static BOOL _GetDriveLettersAndType(DWORD DriveIndex, char* drive_letters, UINT* | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Devices that don't have mounted partitions require special
 | ||||
| 	// handling to determine if they are fixed or removable.
 | ||||
| 	if ((drives_found == 0) && (drive_type != NULL)) { | ||||
| 		hPhysical = GetPhysicalHandle(DriveIndex + DRIVE_INDEX_MIN, FALSE, FALSE, FALSE); | ||||
| 		r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, | ||||
| 			NULL, 0, geometry, sizeof(geometry), &size, NULL); | ||||
| 		safe_closehandle(hPhysical); | ||||
| 		if (r && size > 0) { | ||||
| 			if (DiskGeometry->Geometry.MediaType == FixedMedia) | ||||
| 				*drive_type = DRIVE_FIXED; | ||||
| 			else if (DiskGeometry->Geometry.MediaType == RemovableMedia) | ||||
| 				*drive_type = DRIVE_REMOVABLE; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| out: | ||||
| 	if (drive_letters != NULL) | ||||
| 		drive_letters[i] = 0; | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| /*
 | ||||
|  * Rufus: The Reliable USB Formatting Utility | ||||
|  * SMART HDD vs Flash detection - isHDD() tables | ||||
|  * Copyright © 2013-2019 Pete Batard <pete@akeo.ie> | ||||
|  * Copyright © 2013-2020 Pete Batard <pete@akeo.ie> | ||||
|  * | ||||
|  * Based in part on drivedb.h from Smartmontools: | ||||
|  * http://svn.code.sf.net/p/smartmontools/code/trunk/smartmontools/drivedb.h
 | ||||
|  | @ -261,6 +261,8 @@ static vidpid_score_t vidpid_score[] = { | |||
| 	{ 0x05ac, 0x8405, -20}, | ||||
| 	{ 0x05ac, 0x8406, -20}, | ||||
| 	{ 0x05ac, 0x8407, -20}, | ||||
| 	// No idea who these guys are. They don't exist in usb.ids.
 | ||||
| 	{ 0x6557, 0x0021, -5}, | ||||
| 	// Prolific exceptions
 | ||||
| 	{ 0x067b, 0x2506, -20 },	// 8 GB Micro Hard Drive
 | ||||
| 	{ 0x067b, 0x2517, -20 },	// 1 GB UFD
 | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
|  * Compensating for what Microsoft should have done a long long time ago. | ||||
|  * Also see https://utf8everywhere.org
 | ||||
|  * | ||||
|  * Copyright © 2010-2019 Pete Batard <pete@akeo.ie> | ||||
|  * Copyright © 2010-2020 Pete Batard <pete@akeo.ie> | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Lesser General Public | ||||
|  | @ -439,7 +439,7 @@ static __inline int ComboBox_GetLBTextU(HWND hCtrl, int index, char* lpString) | |||
| 	size = (int)SendMessageW(hCtrl, CB_GETLBTEXTLEN, (WPARAM)index, (LPARAM)0); | ||||
| 	if (size < 0) | ||||
| 		return size; | ||||
| 	wlpString = (wchar_t*)calloc(size+1, sizeof(wchar_t)); | ||||
| 	wlpString = (wchar_t*)calloc((size_t)size + 1, sizeof(wchar_t)); | ||||
| 	size = (int)SendMessageW(hCtrl, CB_GETLBTEXT, (WPARAM)index, (LPARAM)wlpString); | ||||
| 	err = GetLastError(); | ||||
| 	if (size > 0) | ||||
|  |  | |||
|  | @ -865,7 +865,7 @@ BOOL CheckForUpdates(BOOL force) | |||
| static DWORD WINAPI DownloadISOThread(LPVOID param) | ||||
| { | ||||
| 	char locale_str[1024], cmdline[sizeof(locale_str) + 512], pipe[MAX_GUID_STRING_LENGTH + 16] = "\\\\.\\pipe\\"; | ||||
| 	char powershell_path[MAX_PATH], icon_path[MAX_PATH] = "", script_path[MAX_PATH] = ""; | ||||
| 	char powershell_path[MAX_PATH], icon_path[MAX_PATH] = { 0 }, script_path[MAX_PATH] = { 0 }; | ||||
| 	char *url = NULL, sig_url[128]; | ||||
| 	uint64_t uncompressed_size; | ||||
| 	int64_t size = -1; | ||||
|  |  | |||
							
								
								
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | |||
| IDD_DIALOG DIALOGEX 12, 12, 232, 326 | ||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||
| EXSTYLE WS_EX_ACCEPTFILES | ||||
| CAPTION "Rufus 3.10.1634" | ||||
| CAPTION "Rufus 3.10.1635" | ||||
| FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||
| BEGIN | ||||
|     LTEXT           "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP | ||||
|  | @ -395,8 +395,8 @@ END | |||
| // | ||||
| 
 | ||||
| VS_VERSION_INFO VERSIONINFO | ||||
|  FILEVERSION 3,10,1634,0 | ||||
|  PRODUCTVERSION 3,10,1634,0 | ||||
|  FILEVERSION 3,10,1635,0 | ||||
|  PRODUCTVERSION 3,10,1635,0 | ||||
|  FILEFLAGSMASK 0x3fL | ||||
| #ifdef _DEBUG | ||||
|  FILEFLAGS 0x1L | ||||
|  | @ -414,13 +414,13 @@ BEGIN | |||
|             VALUE "Comments", "https://rufus.ie" | ||||
|             VALUE "CompanyName", "Akeo Consulting" | ||||
|             VALUE "FileDescription", "Rufus" | ||||
|             VALUE "FileVersion", "3.10.1634" | ||||
|             VALUE "FileVersion", "3.10.1635" | ||||
|             VALUE "InternalName", "Rufus" | ||||
|             VALUE "LegalCopyright", "© 2011-2020 Pete Batard (GPL v3)" | ||||
|             VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" | ||||
|             VALUE "OriginalFilename", "rufus-3.10.exe" | ||||
|             VALUE "ProductName", "Rufus" | ||||
|             VALUE "ProductVersion", "3.10.1634" | ||||
|             VALUE "ProductVersion", "3.10.1635" | ||||
|         END | ||||
|     END | ||||
|     BLOCK "VarFileInfo" | ||||
|  |  | |||
|  | @ -1,11 +1,11 @@ | |||
| /*
 | ||||
|  * Rufus: The Reliable USB Formatting Utility | ||||
|  * SMART HDD vs Flash detection (using ATA over USB, S.M.A.R.T., etc.) | ||||
|  * Copyright © 2013-2016 Pete Batard <pete@akeo.ie> | ||||
|  * Copyright © 2013-2020 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> | ||||
|  * Copyright © 2009-13 Christian Franke <smartmontools-support@lists.sourceforge.net> | ||||
|  * Copyright © 2006-2012 Douglas Gilbert <dgilbert@interlog.com> | ||||
|  * Copyright © 2009-2013 Christian Franke <smartmontools-support@lists.sourceforge.net> | ||||
|  * | ||||
|  * 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 | ||||
|  | @ -446,7 +446,6 @@ int IsHDD(DWORD DriveIndex, uint16_t vid, uint16_t pid, const char* strid) | |||
| 	uint64_t drive_size; | ||||
| 
 | ||||
| 	// Boost the score if fixed, as these are *generally* HDDs
 | ||||
| 	// NB: Due to a Windows API limitation, drives with no mounted partition will never have DRIVE_FIXED
 | ||||
| 	if (GetDriveTypeFromIndex(DriveIndex) == DRIVE_FIXED) | ||||
| 		score += 3; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue