mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[misc] Misc. fixes
* Addresses issue #66 (insert media notification with empty card readers) * Addresses issue #67 (devices without FriendlyName aren't listed) * Addresses issue #68 (WinPE/AIK images don't boot) * Also updates version to rufus-next
This commit is contained in:
		
							parent
							
								
									7ee5b35551
								
							
						
					
					
						commit
						e0f209a128
					
				
					 8 changed files with 157 additions and 35 deletions
				
			
		
							
								
								
									
										20
									
								
								configure
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								configure
									
										
									
									
										vendored
									
									
								
							|  | @ -1,6 +1,6 @@ | ||||||
| #! /bin/sh | #! /bin/sh | ||||||
| # Guess values for system-dependent variables and create Makefiles. | # Guess values for system-dependent variables and create Makefiles. | ||||||
| # Generated by GNU Autoconf 2.68 for rufus 1.1.4. | # Generated by GNU Autoconf 2.68 for rufus 1.1.5. | ||||||
| # | # | ||||||
| # Report bugs to <https://github.com/pbatard/rufus/issues>. | # Report bugs to <https://github.com/pbatard/rufus/issues>. | ||||||
| # | # | ||||||
|  | @ -559,8 +559,8 @@ MAKEFLAGS= | ||||||
| # Identity of this package. | # Identity of this package. | ||||||
| PACKAGE_NAME='rufus' | PACKAGE_NAME='rufus' | ||||||
| PACKAGE_TARNAME='rufus' | PACKAGE_TARNAME='rufus' | ||||||
| PACKAGE_VERSION='1.1.4' | PACKAGE_VERSION='1.1.5' | ||||||
| PACKAGE_STRING='rufus 1.1.4' | PACKAGE_STRING='rufus 1.1.5' | ||||||
| PACKAGE_BUGREPORT='https://github.com/pbatard/rufus/issues' | PACKAGE_BUGREPORT='https://github.com/pbatard/rufus/issues' | ||||||
| PACKAGE_URL='http://rufus.akeo.ie' | PACKAGE_URL='http://rufus.akeo.ie' | ||||||
| 
 | 
 | ||||||
|  | @ -1204,7 +1204,7 @@ if test "$ac_init_help" = "long"; then | ||||||
|   # Omit some internal or obsolete options to make the list less imposing. |   # Omit some internal or obsolete options to make the list less imposing. | ||||||
|   # This message is too long to be a string in the A/UX 3.1 sh. |   # This message is too long to be a string in the A/UX 3.1 sh. | ||||||
|   cat <<_ACEOF |   cat <<_ACEOF | ||||||
| \`configure' configures rufus 1.1.4 to adapt to many kinds of systems. | \`configure' configures rufus 1.1.5 to adapt to many kinds of systems. | ||||||
| 
 | 
 | ||||||
| Usage: $0 [OPTION]... [VAR=VALUE]... | Usage: $0 [OPTION]... [VAR=VALUE]... | ||||||
| 
 | 
 | ||||||
|  | @ -1270,7 +1270,7 @@ fi | ||||||
| 
 | 
 | ||||||
| if test -n "$ac_init_help"; then | if test -n "$ac_init_help"; then | ||||||
|   case $ac_init_help in |   case $ac_init_help in | ||||||
|      short | recursive ) echo "Configuration of rufus 1.1.4:";; |      short | recursive ) echo "Configuration of rufus 1.1.5:";; | ||||||
|    esac |    esac | ||||||
|   cat <<\_ACEOF |   cat <<\_ACEOF | ||||||
| 
 | 
 | ||||||
|  | @ -1363,7 +1363,7 @@ fi | ||||||
| test -n "$ac_init_help" && exit $ac_status | test -n "$ac_init_help" && exit $ac_status | ||||||
| if $ac_init_version; then | if $ac_init_version; then | ||||||
|   cat <<\_ACEOF |   cat <<\_ACEOF | ||||||
| rufus configure 1.1.4 | rufus configure 1.1.5 | ||||||
| generated by GNU Autoconf 2.68 | generated by GNU Autoconf 2.68 | ||||||
| 
 | 
 | ||||||
| Copyright (C) 2010 Free Software Foundation, Inc. | Copyright (C) 2010 Free Software Foundation, Inc. | ||||||
|  | @ -1418,7 +1418,7 @@ cat >config.log <<_ACEOF | ||||||
| This file contains any messages produced by compilers while | This file contains any messages produced by compilers while | ||||||
| running configure, to aid debugging if configure makes a mistake. | running configure, to aid debugging if configure makes a mistake. | ||||||
| 
 | 
 | ||||||
| It was created by rufus $as_me 1.1.4, which was | It was created by rufus $as_me 1.1.5, which was | ||||||
| generated by GNU Autoconf 2.68.  Invocation command line was | generated by GNU Autoconf 2.68.  Invocation command line was | ||||||
| 
 | 
 | ||||||
|   $ $0 $@ |   $ $0 $@ | ||||||
|  | @ -2233,7 +2233,7 @@ fi | ||||||
| 
 | 
 | ||||||
| # Define the identity of the package. | # Define the identity of the package. | ||||||
|  PACKAGE='rufus' |  PACKAGE='rufus' | ||||||
|  VERSION='1.1.4' |  VERSION='1.1.5' | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| cat >>confdefs.h <<_ACEOF | cat >>confdefs.h <<_ACEOF | ||||||
|  | @ -4091,7 +4091,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 | ||||||
| # report actual input values of CONFIG_FILES etc. instead of their | # report actual input values of CONFIG_FILES etc. instead of their | ||||||
| # values after options handling. | # values after options handling. | ||||||
| ac_log=" | ac_log=" | ||||||
| This file was extended by rufus $as_me 1.1.4, which was | This file was extended by rufus $as_me 1.1.5, which was | ||||||
| generated by GNU Autoconf 2.68.  Invocation command line was | generated by GNU Autoconf 2.68.  Invocation command line was | ||||||
| 
 | 
 | ||||||
|   CONFIG_FILES    = $CONFIG_FILES |   CONFIG_FILES    = $CONFIG_FILES | ||||||
|  | @ -4145,7 +4145,7 @@ _ACEOF | ||||||
| cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 | cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 | ||||||
| ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" | ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" | ||||||
| ac_cs_version="\\ | ac_cs_version="\\ | ||||||
| rufus config.status 1.1.4 | rufus config.status 1.1.5 | ||||||
| configured by $0, generated by GNU Autoconf 2.68, | configured by $0, generated by GNU Autoconf 2.68, | ||||||
|   with options \\"\$ac_cs_config\\" |   with options \\"\$ac_cs_config\\" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| AC_INIT([rufus], [1.1.4], [https://github.com/pbatard/rufus/issues], [rufus], [http://rufus.akeo.ie]) | AC_INIT([rufus], [1.1.5], [https://github.com/pbatard/rufus/issues], [rufus], [http://rufus.akeo.ie]) | ||||||
| AM_INIT_AUTOMAKE([-Wno-portability foreign no-dist no-dependencies]) | AM_INIT_AUTOMAKE([-Wno-portability foreign no-dist no-dependencies]) | ||||||
| AC_CONFIG_SRCDIR([src/rufus.c]) | AC_CONFIG_SRCDIR([src/rufus.c]) | ||||||
| AC_CONFIG_MACRO_DIR([m4]) | AC_CONFIG_MACRO_DIR([m4]) | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								src/drive.c
									
										
									
									
									
								
							
							
						
						
									
										15
									
								
								src/drive.c
									
										
									
									
									
								
							|  | @ -150,8 +150,9 @@ out: | ||||||
|  */ |  */ | ||||||
| BOOL GetDriveLabel(DWORD DriveIndex, char* letter, char** label) | BOOL GetDriveLabel(DWORD DriveIndex, char* letter, char** label) | ||||||
| { | { | ||||||
| 	HANDLE hDrive; | 	HANDLE hDrive, hPhysical; | ||||||
| 	char AutorunPath[] = "#:\\autorun.inf", *AutorunLabel; | 	DWORD size; | ||||||
|  | 	char AutorunPath[] = "#:\\autorun.inf", *AutorunLabel = NULL; | ||||||
| 	wchar_t wDrivePath[] = L"#:\\"; | 	wchar_t wDrivePath[] = L"#:\\"; | ||||||
| 	wchar_t wVolumeLabel[MAX_PATH+1]; | 	wchar_t wVolumeLabel[MAX_PATH+1]; | ||||||
| 	static char VolumeLabel[MAX_PATH+1]; | 	static char VolumeLabel[MAX_PATH+1]; | ||||||
|  | @ -166,9 +167,17 @@ BOOL GetDriveLabel(DWORD DriveIndex, char* letter, char** label) | ||||||
| 	wDrivePath[0] = *letter; | 	wDrivePath[0] = *letter; | ||||||
| 
 | 
 | ||||||
| 	// Try to read an extended label from autorun first. Fallback to regular label if not found.
 | 	// Try to read an extended label from autorun first. Fallback to regular label if not found.
 | ||||||
|  | 	// In the case of card readers with no card, users can get an annoying popup asking them
 | ||||||
|  | 	// to insert media. Use IOCTL_STORAGE_CHECK_VERIFY to prevent this
 | ||||||
|  | 	hPhysical = GetDriveHandle(DriveIndex, NULL, FALSE, FALSE); | ||||||
|  | 	if (DeviceIoControl(hPhysical, IOCTL_STORAGE_CHECK_VERIFY, NULL, 0, NULL, 0, &size, NULL)) | ||||||
| 		AutorunLabel = get_token_data(AutorunPath, "label"); | 		AutorunLabel = get_token_data(AutorunPath, "label"); | ||||||
|  | 	else if (GetLastError() == ERROR_NOT_READY) | ||||||
|  | 		uprintf("Ignoring autorun.inf label for drive %c: %s\n", *letter, | ||||||
|  | 		(HRESULT_CODE(GetLastError()) == ERROR_NOT_READY)?"No media":WindowsErrorString()); | ||||||
|  | 	safe_closehandle(hPhysical); | ||||||
| 	if (AutorunLabel != NULL) { | 	if (AutorunLabel != NULL) { | ||||||
| 		uprintf("Using autorun.inf label for device %c:\n", *letter); | 		uprintf("Using autorun.inf label for drive %c: '%s'\n", *letter, AutorunLabel); | ||||||
| 		strncpy(VolumeLabel, AutorunLabel, sizeof(VolumeLabel)); | 		strncpy(VolumeLabel, AutorunLabel, sizeof(VolumeLabel)); | ||||||
| 		safe_free(AutorunLabel); | 		safe_free(AutorunLabel); | ||||||
| 		*label = VolumeLabel; | 		*label = VolumeLabel; | ||||||
|  |  | ||||||
							
								
								
									
										94
									
								
								src/format.c
									
										
									
									
									
								
							
							
						
						
									
										94
									
								
								src/format.c
									
										
									
									
									
								
							|  | @ -136,6 +136,62 @@ static BOOLEAN __stdcall FormatExCallback(FILE_SYSTEM_CALLBACK_COMMAND Command, | ||||||
| 	return (!IS_ERROR(FormatStatus)); | 	return (!IS_ERROR(FormatStatus)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * Chkdsk callback. Return FALSE to halt operations | ||||||
|  |  */ | ||||||
|  | static BOOLEAN __stdcall ChkdskCallback(FILE_SYSTEM_CALLBACK_COMMAND Command, DWORD Action, PVOID pData) | ||||||
|  | { | ||||||
|  | 	DWORD* percent; | ||||||
|  | 	if (IS_ERROR(FormatStatus)) | ||||||
|  | 		return FALSE; | ||||||
|  | 
 | ||||||
|  | 	switch(Command) { | ||||||
|  | 	case FCC_PROGRESS: | ||||||
|  | 	case FCC_CHECKDISK_PROGRESS: | ||||||
|  | 		percent = (DWORD*)pData; | ||||||
|  | 		PrintStatus(0, FALSE, "NTFS Fixup: %d%% completed.", *percent); | ||||||
|  | 		break; | ||||||
|  | 	case FCC_DONE: | ||||||
|  | 		if(*(BOOLEAN*)pData == FALSE) { | ||||||
|  | 			uprintf("Error while checking disk.\n"); | ||||||
|  | 			FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_GEN_FAILURE; | ||||||
|  | 		} | ||||||
|  | 		break; | ||||||
|  | 	case FCC_UNKNOWN1A: | ||||||
|  | 	case FCC_DONE_WITH_STRUCTURE: | ||||||
|  | 		// Silence these specific calls
 | ||||||
|  | 		break; | ||||||
|  | 	case FCC_INCOMPATIBLE_FILE_SYSTEM: | ||||||
|  | 		uprintf("Incompatible File System\n"); | ||||||
|  | 		FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_INCOMPATIBLE_FS); | ||||||
|  | 		break; | ||||||
|  | 	case FCC_ACCESS_DENIED: | ||||||
|  | 		uprintf("Access denied\n"); | ||||||
|  | 		FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_ACCESS_DENIED; | ||||||
|  | 		break; | ||||||
|  | 	case FCC_MEDIA_WRITE_PROTECTED: | ||||||
|  | 		uprintf("Media is write protected\n"); | ||||||
|  | 		FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_PROTECT; | ||||||
|  | 		break; | ||||||
|  | 	case FCC_VOLUME_IN_USE: | ||||||
|  | 		uprintf("Volume is in use\n"); | ||||||
|  | 		FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_DEVICE_IN_USE; | ||||||
|  | 		break; | ||||||
|  | 	case FCC_OUTPUT: | ||||||
|  | 		uprintf("%s\n", ((PTEXTOUTPUT)pData)->Output); | ||||||
|  | 		break; | ||||||
|  | 	case FCC_NO_MEDIA_IN_DRIVE: | ||||||
|  | 		uprintf("No media in drive\n"); | ||||||
|  | 		FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_NO_MEDIA_IN_DRIVE; | ||||||
|  | 		break; | ||||||
|  | 	default: | ||||||
|  | 		uprintf("ChkdskExCallback: received unhandled command %X\n", Command); | ||||||
|  | 		// Assume the command isn't an error
 | ||||||
|  | 		break; | ||||||
|  | 	} | ||||||
|  | 	return (!IS_ERROR(FormatStatus)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Converts an UTF-16 label to a valid FAT/NTFS one |  * Converts an UTF-16 label to a valid FAT/NTFS one | ||||||
|  */ |  */ | ||||||
|  | @ -237,6 +293,41 @@ out: | ||||||
| 	return r; | 	return r; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * Call on fmifs.dll's Chkdsk() to fixup the filesystem | ||||||
|  |  */ | ||||||
|  | static BOOL CheckDisk(char DriveLetter) | ||||||
|  | { | ||||||
|  | 	BOOL r = FALSE; | ||||||
|  | 	PF_DECL(Chkdsk); | ||||||
|  | 	WCHAR wDriveRoot[] = L"?:\\"; | ||||||
|  | 	WCHAR wFSType[32]; | ||||||
|  | 	size_t i; | ||||||
|  | 
 | ||||||
|  | 	wDriveRoot[0] = (WCHAR)DriveLetter; | ||||||
|  | 	PrintStatus(0, TRUE, "NTFS Fixup (Checkdisk)..."); | ||||||
|  | 
 | ||||||
|  | 	PF_INIT_OR_OUT(Chkdsk, fmifs); | ||||||
|  | 
 | ||||||
|  | 	GetWindowTextW(hFileSystem, wFSType, ARRAYSIZE(wFSType)); | ||||||
|  | 	// We may have a " (Default)" trail
 | ||||||
|  | 	for (i=0; i<wcslen(wFSType); i++) { | ||||||
|  | 		if (wFSType[i] == ' ') { | ||||||
|  | 			wFSType[i] = 0; | ||||||
|  | 			break; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	pfChkdsk(wDriveRoot, wFSType, FALSE, FALSE, FALSE, FALSE, NULL, NULL, ChkdskCallback); | ||||||
|  | 	if (!IS_ERROR(FormatStatus)) { | ||||||
|  | 		uprintf("NTFS Fixup completed.\n"); | ||||||
|  | 		r = TRUE; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | out: | ||||||
|  | 	return r; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static BOOL AnalyzeMBR(HANDLE hPhysicalDrive) | static BOOL AnalyzeMBR(HANDLE hPhysicalDrive) | ||||||
| { | { | ||||||
| 	FILE fake_fd = { 0 }; | 	FILE fake_fd = { 0 }; | ||||||
|  | @ -668,6 +759,9 @@ DWORD WINAPI FormatThread(LPVOID param) | ||||||
| 		UpdateProgress(OP_DOS, -1.0f); | 		UpdateProgress(OP_DOS, -1.0f); | ||||||
| 		// Issue another complete remount before we exit, to ensure we're clean
 | 		// Issue another complete remount before we exit, to ensure we're clean
 | ||||||
| 		RemountVolume(drive_name[0]); | 		RemountVolume(drive_name[0]); | ||||||
|  | 		// NTFS fixup (WinPE/AIK images don't seem to boot without an extra checkdisk)
 | ||||||
|  | 		if ((dt == DT_ISO) && (fs = FS_NTFS)) | ||||||
|  | 			CheckDisk(drive_name[0]); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| out: | out: | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								src/format.h
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								src/format.h
									
										
									
									
									
								
							|  | @ -70,6 +70,18 @@ typedef enum { | ||||||
| 	FCC_VOLUME_TOO_SMALL, | 	FCC_VOLUME_TOO_SMALL, | ||||||
| 	FCC_VOLUME_TOO_BIG, | 	FCC_VOLUME_TOO_BIG, | ||||||
| 	FCC_NO_MEDIA_IN_DRIVE, | 	FCC_NO_MEDIA_IN_DRIVE, | ||||||
|  | 	FCC_UNKNOWN15, | ||||||
|  | 	FCC_UNKNOWN16, | ||||||
|  | 	FCC_UNKNOWN17, | ||||||
|  | 	FCC_UNKNOWN18, | ||||||
|  | 	FCC_CHECKDISK_PROGRESS, | ||||||
|  | 	FCC_UNKNOWN1A, | ||||||
|  | 	FCC_UNKNOWN1B, | ||||||
|  | 	FCC_UNKNOWN1C, | ||||||
|  | 	FCC_UNKNOWN1D, | ||||||
|  | 	FCC_UNKNOWN1E, | ||||||
|  | 	FCC_UNKNOWN1F, | ||||||
|  | 	FCC_UNKNOWN20, | ||||||
| } FILE_SYSTEM_CALLBACK_COMMAND; | } FILE_SYSTEM_CALLBACK_COMMAND; | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|  | @ -95,6 +107,18 @@ typedef VOID (WINAPI *FormatEx_t)( | ||||||
| 	FILE_SYSTEM_CALLBACK Callback | 	FILE_SYSTEM_CALLBACK Callback | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
|  | /* Mostly from http://doxygen.reactos.org/df/d85/fmifs_8h_source.html */ | ||||||
|  | typedef LONG (WINAPI *Chkdsk_t)( | ||||||
|  | 	WCHAR*               DriveRoot, | ||||||
|  | 	WCHAR*               FileSystemTypeName, | ||||||
|  | 	BOOL                 CorrectErrors, | ||||||
|  | 	BOOL                 Verbose, | ||||||
|  | 	BOOL                 CheckOnlyIfDirty, | ||||||
|  | 	BOOL                 ScanDrive, | ||||||
|  | 	VOID*                Unused2, | ||||||
|  | 	VOID*                Unused3, | ||||||
|  | 	FILE_SYSTEM_CALLBACK Callback); | ||||||
|  | 
 | ||||||
| /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa383357.aspx */ | /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa383357.aspx */ | ||||||
| typedef enum  { | typedef enum  { | ||||||
| 	FPF_COMPRESSED   = 0x01  | 	FPF_COMPRESSED   = 0x01  | ||||||
|  |  | ||||||
							
								
								
									
										20
									
								
								src/rufus.c
									
										
									
									
									
								
							
							
						
						
									
										20
									
								
								src/rufus.c
									
										
									
									
									
								
							|  | @ -296,7 +296,7 @@ static BOOL GetDriveInfo(void) | ||||||
| 	r = DeviceIoControl(hDrive, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,  | 	r = DeviceIoControl(hDrive, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,  | ||||||
| 			NULL, 0, geometry, sizeof(geometry), &size, NULL); | 			NULL, 0, geometry, sizeof(geometry), &size, NULL); | ||||||
| 	if (!r || size <= 0) { | 	if (!r || size <= 0) { | ||||||
| 		uprintf("IOCTL_DISK_GET_DRIVE_GEOMETRY_EX failed: %s\n", WindowsErrorString()); | 		uprintf("IOCTL_DISK_GET_DRIVE_GEOMETRY_EX failed for drive %c: %s\n", DrivePath[0], WindowsErrorString()); | ||||||
| 		safe_closehandle(hDrive); | 		safe_closehandle(hDrive); | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 	} | 	} | ||||||
|  | @ -309,7 +309,7 @@ static BOOL GetDriveInfo(void) | ||||||
| 	r = DeviceIoControl(hDrive, IOCTL_DISK_GET_DRIVE_LAYOUT_EX,  | 	r = DeviceIoControl(hDrive, IOCTL_DISK_GET_DRIVE_LAYOUT_EX,  | ||||||
| 			NULL, 0, layout, sizeof(layout), &size, NULL ); | 			NULL, 0, layout, sizeof(layout), &size, NULL ); | ||||||
| 	if (!r || size <= 0) { | 	if (!r || size <= 0) { | ||||||
| 		uprintf("IOCTL_DISK_GET_DRIVE_LAYOUT_EX failed: %s\n", WindowsErrorString()); | 		uprintf("IOCTL_DISK_GET_DRIVE_LAYOUT_EX failed for drive %c: %s\n", DrivePath[0], WindowsErrorString()); | ||||||
| 	} else { | 	} else { | ||||||
| 		DestroyTooltip(hFSTooltip); | 		DestroyTooltip(hFSTooltip); | ||||||
| 		hFSTooltip = NULL; | 		hFSTooltip = NULL; | ||||||
|  | @ -561,6 +561,7 @@ static BOOL GetUSBDevices(DWORD devnum) | ||||||
| 	char drive_letter; | 	char drive_letter; | ||||||
| 	char *label, entry[MAX_PATH], buffer[MAX_PATH]; | 	char *label, entry[MAX_PATH], buffer[MAX_PATH]; | ||||||
| 	const char* usbstor_name = "USBSTOR"; | 	const char* usbstor_name = "USBSTOR"; | ||||||
|  | 	const char* generic_friendly_name = "USB Storage Device (Generic)"; | ||||||
| 	GUID _GUID_DEVINTERFACE_DISK =			// only known to some...
 | 	GUID _GUID_DEVINTERFACE_DISK =			// only known to some...
 | ||||||
| 		{ 0x53f56307L, 0xb6bf, 0x11d0, {0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b} }; | 		{ 0x53f56307L, 0xb6bf, 0x11d0, {0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b} }; | ||||||
| 
 | 
 | ||||||
|  | @ -571,7 +572,7 @@ static BOOL GetUSBDevices(DWORD devnum) | ||||||
| 
 | 
 | ||||||
| 	dev_info = SetupDiGetClassDevsA(&_GUID_DEVINTERFACE_DISK, NULL, NULL, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE); | 	dev_info = SetupDiGetClassDevsA(&_GUID_DEVINTERFACE_DISK, NULL, NULL, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE); | ||||||
| 	if (dev_info == INVALID_HANDLE_VALUE) { | 	if (dev_info == INVALID_HANDLE_VALUE) { | ||||||
| 		uprintf("SetupDiGetClassDevs (Interface) failed: %d\n", WindowsErrorString()); | 		uprintf("SetupDiGetClassDevs (Interface) failed: %s\n", WindowsErrorString()); | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -580,7 +581,7 @@ static BOOL GetUSBDevices(DWORD devnum) | ||||||
| 		memset(buffer, 0, sizeof(buffer)); | 		memset(buffer, 0, sizeof(buffer)); | ||||||
| 		if (!SetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_ENUMERATOR_NAME, | 		if (!SetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_ENUMERATOR_NAME, | ||||||
| 				&datatype, (LPBYTE)buffer, sizeof(buffer), &size)) { | 				&datatype, (LPBYTE)buffer, sizeof(buffer), &size)) { | ||||||
| 			uprintf("SetupDiGetDeviceRegistryProperty (Enumerator Name) failed: %d\n", WindowsErrorString()); | 			uprintf("SetupDiGetDeviceRegistryProperty (Enumerator Name) failed: %s\n", WindowsErrorString()); | ||||||
| 			continue; | 			continue; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -589,8 +590,9 @@ static BOOL GetUSBDevices(DWORD devnum) | ||||||
| 		memset(buffer, 0, sizeof(buffer)); | 		memset(buffer, 0, sizeof(buffer)); | ||||||
| 		if (!SetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_FRIENDLYNAME, | 		if (!SetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_FRIENDLYNAME, | ||||||
| 				&datatype, (LPBYTE)buffer, sizeof(buffer), &size)) { | 				&datatype, (LPBYTE)buffer, sizeof(buffer), &size)) { | ||||||
| 			uprintf("SetupDiGetDeviceRegistryProperty (Friendly Name) failed: %d\n", WindowsErrorString()); | 			uprintf("SetupDiGetDeviceRegistryProperty (Friendly Name) failed: %s\n", WindowsErrorString()); | ||||||
| 			continue; | 			// We can afford a failure on this call - just replace the name
 | ||||||
|  | 			safe_strcpy(buffer, sizeof(buffer), generic_friendly_name); | ||||||
| 		} | 		} | ||||||
| 		uprintf("Found drive '%s'\n", buffer); | 		uprintf("Found drive '%s'\n", buffer); | ||||||
| 
 | 
 | ||||||
|  | @ -1508,11 +1510,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine | ||||||
| 	// Initialize COM for folder selection
 | 	// Initialize COM for folder selection
 | ||||||
| 	CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); | 	CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); | ||||||
| 
 | 
 | ||||||
| #ifdef DISABLE_AUTORUN |  | ||||||
| 	// We use local group policies rather than direct registry manipulation
 | 	// We use local group policies rather than direct registry manipulation
 | ||||||
| 	// 0x9e disables removable and fixed drive notifications
 | 	// 0x9e disables removable and fixed drive notifications
 | ||||||
| 	SetLGP(FALSE, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", "NoDriveTypeAutorun", 0x9e); | 	SetLGP(FALSE, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", "NoDriveTypeAutorun", 0x9e); | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
| 	// Find out if the FreeDOS resources are embedded in the app
 | 	// Find out if the FreeDOS resources are embedded in the app
 | ||||||
| 	bWithFreeDOS = (FindResource(hMainInstance, MAKEINTRESOURCE(IDR_FD_COMMAND_COM), RT_RCDATA) != NULL) && | 	bWithFreeDOS = (FindResource(hMainInstance, MAKEINTRESOURCE(IDR_FD_COMMAND_COM), RT_RCDATA) != NULL) && | ||||||
|  | @ -1544,14 +1544,12 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine | ||||||
| 				GetUSBDevices(0); | 				GetUSBDevices(0); | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
| #ifdef DISABLE_AUTORUN |  | ||||||
| 			// Alt-D => Delete the NoDriveTypeAutorun key on exit (useful if the app crashed)
 | 			// Alt-D => Delete the NoDriveTypeAutorun key on exit (useful if the app crashed)
 | ||||||
| 			if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'D')) { | 			if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'D')) { | ||||||
| 				PrintStatus(0, FALSE, "NoDriveTypeAutorun will be deleted on exit."); | 				PrintStatus(0, FALSE, "NoDriveTypeAutorun will be deleted on exit."); | ||||||
| 				existing_key = FALSE; | 				existing_key = FALSE; | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
| #endif |  | ||||||
| 			TranslateMessage(&msg); | 			TranslateMessage(&msg); | ||||||
| 			DispatchMessage(&msg); | 			DispatchMessage(&msg); | ||||||
| 		} | 		} | ||||||
|  | @ -1560,9 +1558,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine | ||||||
| out: | out: | ||||||
| 	DestroyAllTooltips(); | 	DestroyAllTooltips(); | ||||||
| 	safe_free(iso_path); | 	safe_free(iso_path); | ||||||
| #ifdef DISABLE_AUTORUN |  | ||||||
| 	SetLGP(TRUE, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", "NoDriveTypeAutorun", 0); | 	SetLGP(TRUE, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", "NoDriveTypeAutorun", 0); | ||||||
| #endif |  | ||||||
| 	CloseHandle(mutex); | 	CloseHandle(mutex); | ||||||
| 	uprintf("*** RUFUS EXIT ***\n"); | 	uprintf("*** RUFUS EXIT ***\n"); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -23,7 +23,6 @@ | ||||||
| 
 | 
 | ||||||
| /* Program options */ | /* Program options */ | ||||||
| #define RUFUS_DEBUG                 // print debug info to Debug facility
 | #define RUFUS_DEBUG                 // print debug info to Debug facility
 | ||||||
| #define DISABLE_AUTORUN             // disable new USB drive notification from explorer when application is running
 |  | ||||||
| /* Features not ready for prime time and that may *DESTROY* your data - USE AT YOUR OWN RISKS! */ | /* Features not ready for prime time and that may *DESTROY* your data - USE AT YOUR OWN RISKS! */ | ||||||
| //#define RUFUS_TEST
 | //#define RUFUS_TEST
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -33,7 +33,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL | ||||||
| IDD_DIALOG DIALOGEX 12, 12, 206, 289 | IDD_DIALOG DIALOGEX 12, 12, 206, 289 | ||||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| EXSTYLE WS_EX_APPWINDOW | EXSTYLE WS_EX_APPWINDOW | ||||||
| CAPTION "Rufus v1.1.4.150" | CAPTION "Rufus v1.1.5.151" | ||||||
| FONT 8, "MS Shell Dlg", 400, 0, 0x1 | FONT 8, "MS Shell Dlg", 400, 0, 0x1 | ||||||
| BEGIN | BEGIN | ||||||
|     DEFPUSHBUTTON   "Start",IDC_START,94,248,50,14 |     DEFPUSHBUTTON   "Start",IDC_START,94,248,50,14 | ||||||
|  | @ -73,7 +73,7 @@ BEGIN | ||||||
|     DEFPUSHBUTTON   "OK",IDOK,231,175,50,14,WS_GROUP |     DEFPUSHBUTTON   "OK",IDOK,231,175,50,14,WS_GROUP | ||||||
|     CONTROL         "<a href=""http://rufus.akeo.ie"">http://rufus.akeo.ie</a>",IDC_ABOUT_RUFUS_URL, |     CONTROL         "<a href=""http://rufus.akeo.ie"">http://rufus.akeo.ie</a>",IDC_ABOUT_RUFUS_URL, | ||||||
|                     "SysLink",WS_TABSTOP,46,47,114,9 |                     "SysLink",WS_TABSTOP,46,47,114,9 | ||||||
|     LTEXT           "Version 1.1.4 (Build 150)",IDC_STATIC,46,19,78,8 |     LTEXT           "Version 1.1.5 (Build 151)",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 | ||||||
|  | @ -223,8 +223,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 1,1,4,150 |  FILEVERSION 1,1,5,151 | ||||||
|  PRODUCTVERSION 1,1,4,150 |  PRODUCTVERSION 1,1,5,151 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -241,13 +241,13 @@ BEGIN | ||||||
|         BEGIN |         BEGIN | ||||||
|             VALUE "CompanyName", "akeo.ie" |             VALUE "CompanyName", "akeo.ie" | ||||||
|             VALUE "FileDescription", "Rufus" |             VALUE "FileDescription", "Rufus" | ||||||
|             VALUE "FileVersion", "1.1.4.150" |             VALUE "FileVersion", "1.1.5.151" | ||||||
|             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.1.4.150" |             VALUE "ProductVersion", "1.1.5.151" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue