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 */ | /* For debugging user reports of HDDs vs UFDs */ | ||||||
| //#define FORCED_DEVICE
 | //#define FORCED_DEVICE
 | ||||||
| #ifdef FORCED_DEVICE | #ifdef FORCED_DEVICE | ||||||
| #define FORCED_VID 0x05AC | #define FORCED_VID 0x6557 | ||||||
| #define FORCED_PID 0x8406 | #define FORCED_PID 0x0021 | ||||||
| #define FORCED_NAME "APPLE SD Card Reader USB Device" | #define FORCED_NAME "USB DISK 2.0 USB Device" | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								src/drive.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								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-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 |  * 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 | ||||||
|  | @ -797,11 +797,13 @@ static BOOL _GetDriveLettersAndType(DWORD DriveIndex, char* drive_letters, UINT* | ||||||
| { | { | ||||||
| 	DWORD size; | 	DWORD size; | ||||||
| 	BOOL r = FALSE; | 	BOOL r = FALSE; | ||||||
| 	HANDLE hDrive = INVALID_HANDLE_VALUE; | 	HANDLE hDrive = INVALID_HANDLE_VALUE, hPhysical = INVALID_HANDLE_VALUE; | ||||||
| 	UINT _drive_type; | 	UINT _drive_type; | ||||||
| 	IO_STATUS_BLOCK io_status_block; | 	IO_STATUS_BLOCK io_status_block; | ||||||
| 	FILE_FS_DEVICE_INFORMATION file_fs_device_info; | 	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 *drive, drives[26*4 + 1];	/* "D:\", "E:\", etc., plus one NUL */ | ||||||
| 	char logical_drive[] = "\\\\.\\#:"; | 	char logical_drive[] = "\\\\.\\#:"; | ||||||
| 
 | 
 | ||||||
|  | @ -865,6 +867,7 @@ static BOOL _GetDriveLettersAndType(DWORD DriveIndex, char* drive_letters, UINT* | ||||||
| 		safe_closehandle(hDrive); | 		safe_closehandle(hDrive); | ||||||
| 		if (drive_number == DriveIndex) { | 		if (drive_number == DriveIndex) { | ||||||
| 			r = TRUE; | 			r = TRUE; | ||||||
|  | 			drives_found++; | ||||||
| 			if (drive_letters != NULL) | 			if (drive_letters != NULL) | ||||||
| 				drive_letters[i++] = *drive; | 				drive_letters[i++] = *drive; | ||||||
| 			// The drive type should be the same for all volumes, so we can overwrite
 | 			// 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: | out: | ||||||
| 	if (drive_letters != NULL) | 	if (drive_letters != NULL) | ||||||
| 		drive_letters[i] = 0; | 		drive_letters[i] = 0; | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Rufus: The Reliable USB Formatting Utility |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  * SMART HDD vs Flash detection - isHDD() tables |  * 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: |  * Based in part on drivedb.h from Smartmontools: | ||||||
|  * http://svn.code.sf.net/p/smartmontools/code/trunk/smartmontools/drivedb.h
 |  * 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, 0x8405, -20}, | ||||||
| 	{ 0x05ac, 0x8406, -20}, | 	{ 0x05ac, 0x8406, -20}, | ||||||
| 	{ 0x05ac, 0x8407, -20}, | 	{ 0x05ac, 0x8407, -20}, | ||||||
|  | 	// No idea who these guys are. They don't exist in usb.ids.
 | ||||||
|  | 	{ 0x6557, 0x0021, -5}, | ||||||
| 	// Prolific exceptions
 | 	// Prolific exceptions
 | ||||||
| 	{ 0x067b, 0x2506, -20 },	// 8 GB Micro Hard Drive
 | 	{ 0x067b, 0x2506, -20 },	// 8 GB Micro Hard Drive
 | ||||||
| 	{ 0x067b, 0x2517, -20 },	// 1 GB UFD
 | 	{ 0x067b, 0x2517, -20 },	// 1 GB UFD
 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
|  * Compensating for what Microsoft should have done a long long time ago. |  * Compensating for what Microsoft should have done a long long time ago. | ||||||
|  * Also see https://utf8everywhere.org
 |  * 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 |  * This library is free software; you can redistribute it and/or | ||||||
|  * modify it under the terms of the GNU Lesser General Public |  * 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); | 	size = (int)SendMessageW(hCtrl, CB_GETLBTEXTLEN, (WPARAM)index, (LPARAM)0); | ||||||
| 	if (size < 0) | 	if (size < 0) | ||||||
| 		return size; | 		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); | 	size = (int)SendMessageW(hCtrl, CB_GETLBTEXT, (WPARAM)index, (LPARAM)wlpString); | ||||||
| 	err = GetLastError(); | 	err = GetLastError(); | ||||||
| 	if (size > 0) | 	if (size > 0) | ||||||
|  |  | ||||||
|  | @ -865,7 +865,7 @@ BOOL CheckForUpdates(BOOL force) | ||||||
| static DWORD WINAPI DownloadISOThread(LPVOID param) | static DWORD WINAPI DownloadISOThread(LPVOID param) | ||||||
| { | { | ||||||
| 	char locale_str[1024], cmdline[sizeof(locale_str) + 512], pipe[MAX_GUID_STRING_LENGTH + 16] = "\\\\.\\pipe\\"; | 	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]; | 	char *url = NULL, sig_url[128]; | ||||||
| 	uint64_t uncompressed_size; | 	uint64_t uncompressed_size; | ||||||
| 	int64_t size = -1; | 	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 | IDD_DIALOG DIALOGEX 12, 12, 232, 326 | ||||||
| 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 | ||||||
| EXSTYLE WS_EX_ACCEPTFILES | EXSTYLE WS_EX_ACCEPTFILES | ||||||
| CAPTION "Rufus 3.10.1634" | CAPTION "Rufus 3.10.1635" | ||||||
| FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     LTEXT           "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP |     LTEXT           "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP | ||||||
|  | @ -395,8 +395,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 3,10,1634,0 |  FILEVERSION 3,10,1635,0 | ||||||
|  PRODUCTVERSION 3,10,1634,0 |  PRODUCTVERSION 3,10,1635,0 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -414,13 +414,13 @@ BEGIN | ||||||
|             VALUE "Comments", "https://rufus.ie" |             VALUE "Comments", "https://rufus.ie" | ||||||
|             VALUE "CompanyName", "Akeo Consulting" |             VALUE "CompanyName", "Akeo Consulting" | ||||||
|             VALUE "FileDescription", "Rufus" |             VALUE "FileDescription", "Rufus" | ||||||
|             VALUE "FileVersion", "3.10.1634" |             VALUE "FileVersion", "3.10.1635" | ||||||
|             VALUE "InternalName", "Rufus" |             VALUE "InternalName", "Rufus" | ||||||
|             VALUE "LegalCopyright", "© 2011-2020 Pete Batard (GPL v3)" |             VALUE "LegalCopyright", "© 2011-2020 Pete Batard (GPL v3)" | ||||||
|             VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" |             VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" | ||||||
|             VALUE "OriginalFilename", "rufus-3.10.exe" |             VALUE "OriginalFilename", "rufus-3.10.exe" | ||||||
|             VALUE "ProductName", "Rufus" |             VALUE "ProductName", "Rufus" | ||||||
|             VALUE "ProductVersion", "3.10.1634" |             VALUE "ProductVersion", "3.10.1635" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  |  | ||||||
|  | @ -1,11 +1,11 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Rufus: The Reliable USB Formatting Utility |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  * SMART HDD vs Flash detection (using ATA over USB, S.M.A.R.T., etc.) |  * 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
 |  * Based in part on scsiata.cpp from Smartmontools: http://smartmontools.sourceforge.net
 | ||||||
|  * Copyright © 2006-12 Douglas Gilbert <dgilbert@interlog.com> |  * Copyright © 2006-2012 Douglas Gilbert <dgilbert@interlog.com> | ||||||
|  * Copyright © 2009-13 Christian Franke <smartmontools-support@lists.sourceforge.net> |  * Copyright © 2009-2013 Christian Franke <smartmontools-support@lists.sourceforge.net> | ||||||
|  * |  * | ||||||
|  * 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 | ||||||
|  | @ -446,7 +446,6 @@ int IsHDD(DWORD DriveIndex, uint16_t vid, uint16_t pid, const char* strid) | ||||||
| 	uint64_t drive_size; | 	uint64_t drive_size; | ||||||
| 
 | 
 | ||||||
| 	// Boost the score if fixed, as these are *generally* HDDs
 | 	// 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) | 	if (GetDriveTypeFromIndex(DriveIndex) == DRIVE_FIXED) | ||||||
| 		score += 3; | 		score += 3; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue