mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[efi] check for 7-zip path in HKLM
* Closes #121 * Also update registry handling * Issues reported by Ronny Kalusniok
This commit is contained in:
		
							parent
							
								
									c51bf5ce45
								
							
						
					
					
						commit
						d2e7e003c3
					
				
					 6 changed files with 70 additions and 72 deletions
				
			
		
							
								
								
									
										14
									
								
								src/net.c
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								src/net.c
									
										
									
									
									
								
							|  | @ -422,7 +422,7 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param) | ||||||
| 	BOOL is_x64 = FALSE, (__stdcall *pIsWow64Process)(HANDLE, PBOOL) = NULL; | 	BOOL is_x64 = FALSE, (__stdcall *pIsWow64Process)(HANDLE, PBOOL) = NULL; | ||||||
| 
 | 
 | ||||||
| 	update_check_in_progress = TRUE; | 	update_check_in_progress = TRUE; | ||||||
| 	verbose = ReadRegistryKey32(REGKEY_VERBOSE_UPDATES); | 	verbose = ReadRegistryKey32(REGKEY_HKCU, REGKEY_VERBOSE_UPDATES); | ||||||
| 	// Unless the update was forced, wait a while before performing the update check
 | 	// Unless the update was forced, wait a while before performing the update check
 | ||||||
| 	if (!force_update_check) { | 	if (!force_update_check) { | ||||||
| 		// TODO: Also check on inactivity
 | 		// TODO: Also check on inactivity
 | ||||||
|  | @ -433,14 +433,14 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param) | ||||||
| 				Sleep(500); | 				Sleep(500); | ||||||
| 		} while ((!force_update_check) && ((iso_op_in_progress || format_op_in_progress || (dialog_showing>0)))); | 		} while ((!force_update_check) && ((iso_op_in_progress || format_op_in_progress || (dialog_showing>0)))); | ||||||
| 		if (!force_update_check) { | 		if (!force_update_check) { | ||||||
| 			if ((ReadRegistryKey32(REGKEY_UPDATE_INTERVAL) == -1)) { | 			if ((ReadRegistryKey32(REGKEY_HKCU, REGKEY_UPDATE_INTERVAL) == -1)) { | ||||||
| 				vuprintf("Check for updates disabled, as per registry settings.\n"); | 				vuprintf("Check for updates disabled, as per registry settings.\n"); | ||||||
| 				goto out; | 				goto out; | ||||||
| 			} | 			} | ||||||
| 			reg_time = ReadRegistryKey64(REGKEY_LAST_UPDATE); | 			reg_time = ReadRegistryKey64(REGKEY_HKCU, REGKEY_LAST_UPDATE); | ||||||
| 			update_interval = (int64_t)ReadRegistryKey32(REGKEY_UPDATE_INTERVAL); | 			update_interval = (int64_t)ReadRegistryKey32(REGKEY_HKCU, REGKEY_UPDATE_INTERVAL); | ||||||
| 			if (update_interval == 0) { | 			if (update_interval == 0) { | ||||||
| 				WriteRegistryKey32(REGKEY_UPDATE_INTERVAL, DEFAULT_UPDATE_INTERVAL); | 				WriteRegistryKey32(REGKEY_HKCU, REGKEY_UPDATE_INTERVAL, DEFAULT_UPDATE_INTERVAL); | ||||||
| 				update_interval = DEFAULT_UPDATE_INTERVAL; | 				update_interval = DEFAULT_UPDATE_INTERVAL; | ||||||
| 			} | 			} | ||||||
| 			GetSystemTime(&LocalTime); | 			GetSystemTime(&LocalTime); | ||||||
|  | @ -488,7 +488,7 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param) | ||||||
| 		goto out; | 		goto out; | ||||||
| 
 | 
 | ||||||
| 	status++;	// 2
 | 	status++;	// 2
 | ||||||
| 	releases_only = !GetRegistryKeyBool(REGKEY_INCLUDE_BETAS); | 	releases_only = !GetRegistryKeyBool(REGKEY_HKCU, REGKEY_INCLUDE_BETAS); | ||||||
| 
 | 
 | ||||||
| 	for (k=0; (k<(releases_only?1:(int)ARRAYSIZE(channel))) && (!found_new_version); k++) { | 	for (k=0; (k<(releases_only?1:(int)ARRAYSIZE(channel))) && (!found_new_version); k++) { | ||||||
| 		uprintf("Checking %s channel...\n", channel[k]); | 		uprintf("Checking %s channel...\n", channel[k]); | ||||||
|  | @ -554,7 +554,7 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param) | ||||||
| 		server_time = ((((int64_t)FileTime.dwHighDateTime)<<32) + FileTime.dwLowDateTime) / 10000000; | 		server_time = ((((int64_t)FileTime.dwHighDateTime)<<32) + FileTime.dwLowDateTime) / 10000000; | ||||||
| 		vvuprintf("Server time: %" PRId64 "\n", server_time); | 		vvuprintf("Server time: %" PRId64 "\n", server_time); | ||||||
| 		// Always store the server response time - the only clock we trust!
 | 		// Always store the server response time - the only clock we trust!
 | ||||||
| 		WriteRegistryKey64(REGKEY_LAST_UPDATE, server_time); | 		WriteRegistryKey64(REGKEY_HKCU, REGKEY_LAST_UPDATE, server_time); | ||||||
| 		// Might as well let the user know
 | 		// Might as well let the user know
 | ||||||
| 		if (!force_update_check) { | 		if (!force_update_check) { | ||||||
| 			if (local_time > server_time + 600) { | 			if (local_time > server_time + 600) { | ||||||
|  |  | ||||||
|  | @ -26,6 +26,9 @@ | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | #define REGKEY_HKCU                 HKEY_CURRENT_USER | ||||||
|  | #define REGKEY_HKLM                 HKEY_LOCAL_MACHINE | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * List of registry keys used by this application |  * List of registry keys used by this application | ||||||
|  * These keys go into HKCU\Software\COMPANY_NAME\APPLICATION_NAME\ |  * These keys go into HKCU\Software\COMPANY_NAME\APPLICATION_NAME\ | ||||||
|  | @ -36,14 +39,14 @@ extern "C" { | ||||||
| #define REGKEY_INCLUDE_BETAS        "CheckForBetas" | #define REGKEY_INCLUDE_BETAS        "CheckForBetas" | ||||||
| #define REGKEY_COMM_CHECK           "CommCheck" | #define REGKEY_COMM_CHECK           "CommCheck" | ||||||
| 
 | 
 | ||||||
| /* Delete a registry key from HKCU\Software and all its values
 | /* Delete a registry key from <key_root>\Software and all its values
 | ||||||
|    If the key has subkeys, this call will fail. */ |    If the key has subkeys, this call will fail. */ | ||||||
| static __inline BOOL DeleteRegistryKey(const char* key_name) | static __inline BOOL DeleteRegistryKey(HKEY key_root, const char* key_name) | ||||||
| { | { | ||||||
| 	HKEY hSoftware = NULL; | 	HKEY hSoftware = NULL; | ||||||
| 	LONG s; | 	LONG s; | ||||||
| 
 | 
 | ||||||
| 	if (RegOpenKeyExA(HKEY_CURRENT_USER, "SOFTWARE", 0, KEY_READ|KEY_CREATE_SUB_KEY, &hSoftware) != ERROR_SUCCESS) { | 	if (RegOpenKeyExA(key_root, "SOFTWARE", 0, KEY_READ|KEY_CREATE_SUB_KEY, &hSoftware) != ERROR_SUCCESS) { | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -59,7 +62,7 @@ static __inline BOOL DeleteRegistryKey(const char* key_name) | ||||||
| 
 | 
 | ||||||
| /* Read a generic registry key value. If a short key_name is used, assume that it belongs to
 | /* Read a generic registry key value. If a short key_name is used, assume that it belongs to
 | ||||||
|    the application and create the app subkey if required */ |    the application and create the app subkey if required */ | ||||||
| static __inline BOOL _GetRegistryKey(const char* key_name, DWORD reg_type, LPBYTE dest, DWORD dest_size) | static __inline BOOL _GetRegistryKey(HKEY key_root, const char* key_name, DWORD reg_type, LPBYTE dest, DWORD dest_size) | ||||||
| { | { | ||||||
| 	BOOL r = FALSE; | 	BOOL r = FALSE; | ||||||
| 	size_t i = 0; | 	size_t i = 0; | ||||||
|  | @ -78,10 +81,10 @@ static __inline BOOL _GetRegistryKey(const char* key_name, DWORD reg_type, LPBYT | ||||||
| 		safe_strcat(long_key_name, sizeof(long_key_name), key_name); | 		safe_strcat(long_key_name, sizeof(long_key_name), key_name); | ||||||
| 		long_key_name[sizeof("SOFTWARE\\") + i-1] = 0; | 		long_key_name[sizeof("SOFTWARE\\") + i-1] = 0; | ||||||
| 		i++; | 		i++; | ||||||
| 		if (RegOpenKeyExA(HKEY_CURRENT_USER, long_key_name, 0, KEY_READ, &hApp) != ERROR_SUCCESS) | 		if (RegOpenKeyExA(key_root, long_key_name, 0, KEY_READ, &hApp) != ERROR_SUCCESS) | ||||||
| 			goto out; | 			goto out; | ||||||
| 	} else { | 	} else { | ||||||
| 		if ( (RegOpenKeyExA(HKEY_CURRENT_USER, "SOFTWARE", 0, KEY_READ|KEY_CREATE_SUB_KEY, &hSoftware) != ERROR_SUCCESS) | 		if ( (RegOpenKeyExA(key_root, "SOFTWARE", 0, KEY_READ|KEY_CREATE_SUB_KEY, &hSoftware) != ERROR_SUCCESS) | ||||||
| 			 || (RegCreateKeyExA(hSoftware, COMPANY_NAME "\\" APPLICATION_NAME, 0, NULL, 0, | 			 || (RegCreateKeyExA(hSoftware, COMPANY_NAME "\\" APPLICATION_NAME, 0, NULL, 0, | ||||||
| 				KEY_SET_VALUE|KEY_QUERY_VALUE|KEY_CREATE_SUB_KEY, NULL, &hApp, &dwDisp) != ERROR_SUCCESS) ) | 				KEY_SET_VALUE|KEY_QUERY_VALUE|KEY_CREATE_SUB_KEY, NULL, &hApp, &dwDisp) != ERROR_SUCCESS) ) | ||||||
| 		goto out; | 		goto out; | ||||||
|  | @ -99,13 +102,13 @@ out: | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Write a generic registry key value (create the key if it doesn't exist) */ | /* Write a generic registry key value (create the key if it doesn't exist) */ | ||||||
| static __inline BOOL _SetRegistryKey(const char* key_name, DWORD reg_type, LPBYTE src, DWORD src_size) | static __inline BOOL _SetRegistryKey(HKEY key_root, const char* key_name, DWORD reg_type, LPBYTE src, DWORD src_size) | ||||||
| { | { | ||||||
| 	BOOL r = FALSE; | 	BOOL r = FALSE; | ||||||
| 	HKEY hSoftware = NULL, hApp = NULL; | 	HKEY hSoftware = NULL, hApp = NULL; | ||||||
| 	DWORD dwDisp, dwType = reg_type; | 	DWORD dwDisp, dwType = reg_type; | ||||||
| 
 | 
 | ||||||
| 	if ( (RegOpenKeyExA(HKEY_CURRENT_USER, "SOFTWARE", 0, KEY_READ|KEY_CREATE_SUB_KEY, &hSoftware) != ERROR_SUCCESS) | 	if ( (RegOpenKeyExA(key_root, "SOFTWARE", 0, KEY_READ|KEY_CREATE_SUB_KEY, &hSoftware) != ERROR_SUCCESS) | ||||||
| 	  || (RegCreateKeyExA(hSoftware, COMPANY_NAME "\\" APPLICATION_NAME, 0, NULL, 0, | 	  || (RegCreateKeyExA(hSoftware, COMPANY_NAME "\\" APPLICATION_NAME, 0, NULL, 0, | ||||||
| 		KEY_SET_VALUE|KEY_QUERY_VALUE|KEY_CREATE_SUB_KEY, NULL, &hApp, &dwDisp) != ERROR_SUCCESS) ) { | 		KEY_SET_VALUE|KEY_QUERY_VALUE|KEY_CREATE_SUB_KEY, NULL, &hApp, &dwDisp) != ERROR_SUCCESS) ) { | ||||||
| 		goto out; | 		goto out; | ||||||
|  | @ -120,52 +123,52 @@ out: | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Helpers for 64 bit registry operations */ | /* Helpers for 64 bit registry operations */ | ||||||
| #define GetRegistryKey64(key, pval) _GetRegistryKey(key, REG_QWORD, (LPBYTE)pval, sizeof(LONGLONG)) | #define GetRegistryKey64(root, key, pval) _GetRegistryKey(root, key, REG_QWORD, (LPBYTE)pval, sizeof(LONGLONG)) | ||||||
| #define SetRegistryKey64(key, val) _SetRegistryKey(key, REG_QWORD, (LPBYTE)&val, sizeof(LONGLONG)) | #define SetRegistryKey64(root, key, val) _SetRegistryKey(root, key, REG_QWORD, (LPBYTE)&val, sizeof(LONGLONG)) | ||||||
| // Check that a key is accessible for R/W (will create a key if not already existing)
 | // Check that a key is accessible for R/W (will create a key if not already existing)
 | ||||||
| static __inline BOOL CheckRegistryKey64(const char* key) { | static __inline BOOL CheckRegistryKey64(HKEY root, const char* key) { | ||||||
| 	LONGLONG val; | 	LONGLONG val; | ||||||
| 	return GetRegistryKey64(key, &val); // && SetRegistryKey64(key, val));
 | 	return GetRegistryKey64(root, key, &val); // && SetRegistryKey64(key, val));
 | ||||||
| } | } | ||||||
| static __inline int64_t ReadRegistryKey64(const char* key) { | static __inline int64_t ReadRegistryKey64(HKEY root, const char* key) { | ||||||
| 	LONGLONG val; | 	LONGLONG val; | ||||||
| 	GetRegistryKey64(key, &val); | 	GetRegistryKey64(root, key, &val); | ||||||
| 	return (int64_t)val; | 	return (int64_t)val; | ||||||
| } | } | ||||||
| static __inline BOOL WriteRegistryKey64(const char* key, int64_t val) { | static __inline BOOL WriteRegistryKey64(HKEY root, const char* key, int64_t val) { | ||||||
| 	LONGLONG tmp = (LONGLONG)val; | 	LONGLONG tmp = (LONGLONG)val; | ||||||
| 	return SetRegistryKey64(key, tmp); | 	return SetRegistryKey64(root, key, tmp); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Helpers for 32 bit registry operations */ | /* Helpers for 32 bit registry operations */ | ||||||
| #define GetRegistryKey32(key, pval) _GetRegistryKey(key, REG_DWORD, (LPBYTE)pval, sizeof(DWORD)) | #define GetRegistryKey32(root, key, pval) _GetRegistryKey(root, key, REG_DWORD, (LPBYTE)pval, sizeof(DWORD)) | ||||||
| #define SetRegistryKey32(key, val) _SetRegistryKey(key, REG_DWORD, (LPBYTE)&val, sizeof(DWORD)) | #define SetRegistryKey32(root, key, val) _SetRegistryKey(root, key, REG_DWORD, (LPBYTE)&val, sizeof(DWORD)) | ||||||
| static __inline BOOL CheckRegistryKey32(const char* key) { | static __inline BOOL CheckRegistryKey32(HKEY root, const char* key) { | ||||||
| 	DWORD val; | 	DWORD val; | ||||||
| 	return (GetRegistryKey32(key, &val) && SetRegistryKey32(key, val)); | 	return (GetRegistryKey32(root, key, &val) && SetRegistryKey32(root, key, val)); | ||||||
| } | } | ||||||
| static __inline int32_t ReadRegistryKey32(const char* key) { | static __inline int32_t ReadRegistryKey32(HKEY root, const char* key) { | ||||||
| 	DWORD val; | 	DWORD val; | ||||||
| 	GetRegistryKey32(key, &val); | 	GetRegistryKey32(root, key, &val); | ||||||
| 	return (int32_t)val; | 	return (int32_t)val; | ||||||
| } | } | ||||||
| static __inline BOOL WriteRegistryKey32(const char* key, int32_t val) { | static __inline BOOL WriteRegistryKey32(HKEY root, const char* key, int32_t val) { | ||||||
| 	DWORD tmp = (DWORD)val; | 	DWORD tmp = (DWORD)val; | ||||||
| 	return SetRegistryKey32(key, tmp); | 	return SetRegistryKey32(root, key, tmp); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Helpers for boolean registry operations */ | /* Helpers for boolean registry operations */ | ||||||
| #define GetRegistryKeyBool(key) (ReadRegistryKey32(key) != 0) | #define GetRegistryKeyBool(root, key) (ReadRegistryKey32(root, key) != 0) | ||||||
| #define SetRegistryKeyBool(key, b) WriteRegistryKey32(key, (b)?1:0) | #define SetRegistryKeyBool(root, key, b) WriteRegistryKey32(root, key, (b)?1:0) | ||||||
| #define CheckRegistryKeyBool CheckRegistryKey32 | #define CheckRegistryKeyBool CheckRegistryKey32 | ||||||
| 
 | 
 | ||||||
| /* Helpers for String registry operations */ | /* Helpers for String registry operations */ | ||||||
| #define GetRegistryKeyStr(key, str, len) _GetRegistryKey(key, REG_SZ, (LPBYTE)str, (DWORD)len) | #define GetRegistryKeyStr(root, key, str, len) _GetRegistryKey(root, key, REG_SZ, (LPBYTE)str, (DWORD)len) | ||||||
| #define SetRegistryKeyStr(key, str) _SetRegistryKey(key, REG_SZ, (LPBYTE)str, safe_strlen(str)) | #define SetRegistryKeyStr(root, key, str) _SetRegistryKey(root, key, REG_SZ, (LPBYTE)str, safe_strlen(str)) | ||||||
| // Use a static buffer - don't allocate
 | // Use a static buffer - don't allocate
 | ||||||
| static __inline char* ReadRegistryKeyStr(const char* key) { | static __inline char* ReadRegistryKeyStr(HKEY root, const char* key) { | ||||||
| 	static char str[512]; | 	static char str[512]; | ||||||
| 	_GetRegistryKey(key, REG_SZ, (LPBYTE)str, (DWORD)sizeof(str)-1); | 	_GetRegistryKey(root, key, REG_SZ, (LPBYTE)str, (DWORD)sizeof(str)-1); | ||||||
| 	return str; | 	return str; | ||||||
| } | } | ||||||
| #define WriteRegistryKeyStr SetRegistryKeyStr | #define WriteRegistryKeyStr SetRegistryKeyStr | ||||||
|  |  | ||||||
|  | @ -1808,9 +1808,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine | ||||||
| 			// Alt-R => Remove all the registry keys created by Rufus
 | 			// Alt-R => Remove all the registry keys created by Rufus
 | ||||||
| 			if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'R')) { | 			if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'R')) { | ||||||
| 				PrintStatus(2000, FALSE, "Application registry key %s deleted.", | 				PrintStatus(2000, FALSE, "Application registry key %s deleted.", | ||||||
| 					DeleteRegistryKey(COMPANY_NAME "\\" APPLICATION_NAME)?"successfully":"could not be"); | 					DeleteRegistryKey(REGKEY_HKCU, COMPANY_NAME "\\" APPLICATION_NAME)?"successfully":"could not be"); | ||||||
| 				// Also try to delete the upper key (company name) if it's empty (don't care about the result)
 | 				// Also try to delete the upper key (company name) if it's empty (don't care about the result)
 | ||||||
| 				DeleteRegistryKey(COMPANY_NAME); | 				DeleteRegistryKey(REGKEY_HKCU, COMPANY_NAME); | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
| 			TranslateMessage(&msg); | 			TranslateMessage(&msg); | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -30,7 +30,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL | ||||||
| IDD_DIALOG DIALOGEX 12, 12, 206, 316 | IDD_DIALOG DIALOGEX 12, 12, 206, 316 | ||||||
| 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.3.3.234" | CAPTION "Rufus v1.3.3.235" | ||||||
| FONT 8, "MS Shell Dlg", 400, 0, 0x1 | FONT 8, "MS Shell Dlg", 400, 0, 0x1 | ||||||
| BEGIN | BEGIN | ||||||
|     DEFPUSHBUTTON   "Start",IDC_START,94,278,50,14 |     DEFPUSHBUTTON   "Start",IDC_START,94,278,50,14 | ||||||
|  | @ -274,8 +274,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 1,3,3,234 |  FILEVERSION 1,3,3,235 | ||||||
|  PRODUCTVERSION 1,3,3,234 |  PRODUCTVERSION 1,3,3,235 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -292,13 +292,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", "1.3.3.234" |             VALUE "FileVersion", "1.3.3.235" | ||||||
|             VALUE "InternalName", "Rufus" |             VALUE "InternalName", "Rufus" | ||||||
|             VALUE "LegalCopyright", "(c) 2011-2013 Pete Batard (GPL v3)" |             VALUE "LegalCopyright", "(c) 2011-2013 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.3.3.234" |             VALUE "ProductVersion", "1.3.3.235" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  |  | ||||||
							
								
								
									
										22
									
								
								src/stdlg.c
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								src/stdlg.c
									
										
									
									
									
								
							|  | @ -948,7 +948,7 @@ INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM l | ||||||
| 		IGNORE_RETVAL(ComboBox_SetItemData(hFrequency, ComboBox_AddStringU(hFrequency, "Daily (Default)"), 86400)); | 		IGNORE_RETVAL(ComboBox_SetItemData(hFrequency, ComboBox_AddStringU(hFrequency, "Daily (Default)"), 86400)); | ||||||
| 		IGNORE_RETVAL(ComboBox_SetItemData(hFrequency, ComboBox_AddStringU(hFrequency, "Weekly"), 604800)); | 		IGNORE_RETVAL(ComboBox_SetItemData(hFrequency, ComboBox_AddStringU(hFrequency, "Weekly"), 604800)); | ||||||
| 		IGNORE_RETVAL(ComboBox_SetItemData(hFrequency, ComboBox_AddStringU(hFrequency, "Monthly"), 2629800)); | 		IGNORE_RETVAL(ComboBox_SetItemData(hFrequency, ComboBox_AddStringU(hFrequency, "Monthly"), 2629800)); | ||||||
| 		freq = ReadRegistryKey32(REGKEY_UPDATE_INTERVAL); | 		freq = ReadRegistryKey32(REGKEY_HKCU, REGKEY_UPDATE_INTERVAL); | ||||||
| 		EnableWindow(GetDlgItem(hDlg, IDC_CHECK_NOW), (freq != 0)); | 		EnableWindow(GetDlgItem(hDlg, IDC_CHECK_NOW), (freq != 0)); | ||||||
| 		EnableWindow(hBeta, (freq >= 0)); | 		EnableWindow(hBeta, (freq >= 0)); | ||||||
| 		switch(freq) { | 		switch(freq) { | ||||||
|  | @ -972,7 +972,7 @@ INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM l | ||||||
| 		} | 		} | ||||||
| 		IGNORE_RETVAL(ComboBox_AddStringU(hBeta, "Yes")); | 		IGNORE_RETVAL(ComboBox_AddStringU(hBeta, "Yes")); | ||||||
| 		IGNORE_RETVAL(ComboBox_AddStringU(hBeta, "No")); | 		IGNORE_RETVAL(ComboBox_AddStringU(hBeta, "No")); | ||||||
| 		IGNORE_RETVAL(ComboBox_SetCurSel(hBeta, GetRegistryKeyBool(REGKEY_INCLUDE_BETAS)?0:1)); | 		IGNORE_RETVAL(ComboBox_SetCurSel(hBeta, GetRegistryKeyBool(REGKEY_HKCU, REGKEY_INCLUDE_BETAS)?0:1)); | ||||||
| 		hPolicy = GetDlgItem(hDlg, IDC_POLICY); | 		hPolicy = GetDlgItem(hDlg, IDC_POLICY); | ||||||
| 		SendMessage(hPolicy, EM_AUTOURLDETECT, 1, 0); | 		SendMessage(hPolicy, EM_AUTOURLDETECT, 1, 0); | ||||||
| 		SendMessageA(hPolicy, EM_SETTEXTEX, (WPARAM)&friggin_microsoft_unicode_amateurs, (LPARAM)update_policy); | 		SendMessageA(hPolicy, EM_SETTEXTEX, (WPARAM)&friggin_microsoft_unicode_amateurs, (LPARAM)update_policy); | ||||||
|  | @ -993,13 +993,13 @@ INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM l | ||||||
| 			if (HIWORD(wParam) != CBN_SELCHANGE) | 			if (HIWORD(wParam) != CBN_SELCHANGE) | ||||||
| 				break; | 				break; | ||||||
| 			freq = (int32_t)ComboBox_GetItemData(hFrequency, ComboBox_GetCurSel(hFrequency)); | 			freq = (int32_t)ComboBox_GetItemData(hFrequency, ComboBox_GetCurSel(hFrequency)); | ||||||
| 			WriteRegistryKey32(REGKEY_UPDATE_INTERVAL, (DWORD)freq); | 			WriteRegistryKey32(REGKEY_HKCU, REGKEY_UPDATE_INTERVAL, (DWORD)freq); | ||||||
| 			EnableWindow(hBeta, (freq >= 0)); | 			EnableWindow(hBeta, (freq >= 0)); | ||||||
| 			return (INT_PTR)TRUE; | 			return (INT_PTR)TRUE; | ||||||
| 		case IDC_INCLUDE_BETAS: | 		case IDC_INCLUDE_BETAS: | ||||||
| 			if (HIWORD(wParam) != CBN_SELCHANGE) | 			if (HIWORD(wParam) != CBN_SELCHANGE) | ||||||
| 				break; | 				break; | ||||||
| 			SetRegistryKeyBool(REGKEY_INCLUDE_BETAS, ComboBox_GetCurSel(hBeta) == 0); | 			SetRegistryKeyBool(REGKEY_HKCU, REGKEY_INCLUDE_BETAS, ComboBox_GetCurSel(hBeta) == 0); | ||||||
| 			return (INT_PTR)TRUE; | 			return (INT_PTR)TRUE; | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
|  | @ -1019,13 +1019,13 @@ BOOL SetUpdateCheck(void) | ||||||
| 	size_t fn_len, exe_len; | 	size_t fn_len, exe_len; | ||||||
| 
 | 
 | ||||||
| 	// Test if we have access to the registry. If not, forget it.
 | 	// Test if we have access to the registry. If not, forget it.
 | ||||||
| 	WriteRegistryKey32(REGKEY_COMM_CHECK, commcheck); | 	WriteRegistryKey32(REGKEY_HKCU, REGKEY_COMM_CHECK, commcheck); | ||||||
| 	if (ReadRegistryKey32(REGKEY_COMM_CHECK) != commcheck) | 	if (ReadRegistryKey32(REGKEY_HKCU, REGKEY_COMM_CHECK) != commcheck) | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 	reg_commcheck = TRUE; | 	reg_commcheck = TRUE; | ||||||
| 
 | 
 | ||||||
| 	// If the update interval is not set, this is the first time we run so prompt the user
 | 	// If the update interval is not set, this is the first time we run so prompt the user
 | ||||||
| 	if (ReadRegistryKey32(REGKEY_UPDATE_INTERVAL) == 0) { | 	if (ReadRegistryKey32(REGKEY_HKCU, REGKEY_UPDATE_INTERVAL) == 0) { | ||||||
| 
 | 
 | ||||||
| 		// Add a hack for people who'd prefer the app not to prompt about update settings on first run.
 | 		// Add a hack for people who'd prefer the app not to prompt about update settings on first run.
 | ||||||
| 		// If the executable is called "rufus.exe", without version, we disable the prompt
 | 		// If the executable is called "rufus.exe", without version, we disable the prompt
 | ||||||
|  | @ -1040,13 +1040,13 @@ BOOL SetUpdateCheck(void) | ||||||
| 				"Do you want to allow " APPLICATION_NAME " to check for application updates?\n"); | 				"Do you want to allow " APPLICATION_NAME " to check for application updates?\n"); | ||||||
| 		} | 		} | ||||||
| 		if (!enable_updates) { | 		if (!enable_updates) { | ||||||
| 			WriteRegistryKey32(REGKEY_UPDATE_INTERVAL, -1); | 			WriteRegistryKey32(REGKEY_HKCU, REGKEY_UPDATE_INTERVAL, -1); | ||||||
| 			return FALSE; | 			return FALSE; | ||||||
| 		} | 		} | ||||||
| 		// If the user hasn't set the interval in the dialog, set to default
 | 		// If the user hasn't set the interval in the dialog, set to default
 | ||||||
| 		if ( (ReadRegistryKey32(REGKEY_UPDATE_INTERVAL) == 0) || | 		if ( (ReadRegistryKey32(REGKEY_HKCU, REGKEY_UPDATE_INTERVAL) == 0) || | ||||||
| 			 ((ReadRegistryKey32(REGKEY_UPDATE_INTERVAL) == -1) && enable_updates) ) | 			 ((ReadRegistryKey32(REGKEY_HKCU, REGKEY_UPDATE_INTERVAL) == -1) && enable_updates) ) | ||||||
| 			WriteRegistryKey32(REGKEY_UPDATE_INTERVAL, 86400); | 			WriteRegistryKey32(REGKEY_HKCU, REGKEY_UPDATE_INTERVAL, 86400); | ||||||
| 	} | 	} | ||||||
| 	return TRUE; | 	return TRUE; | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										29
									
								
								src/vhd.c
									
										
									
									
									
								
							
							
						
						
									
										29
									
								
								src/vhd.c
									
										
									
									
									
								
							|  | @ -25,6 +25,7 @@ | ||||||
| #include "registry.h" | #include "registry.h" | ||||||
| 
 | 
 | ||||||
| static BOOL has_wimgapi = FALSE, has_7z = FALSE; | static BOOL has_wimgapi = FALSE, has_7z = FALSE; | ||||||
|  | static char sevenzip_path[MAX_PATH]; | ||||||
| 
 | 
 | ||||||
| #define WIM_GENERIC_READ	GENERIC_READ | #define WIM_GENERIC_READ	GENERIC_READ | ||||||
| #define WIM_OPEN_EXISTING	OPEN_EXISTING | #define WIM_OPEN_EXISTING	OPEN_EXISTING | ||||||
|  | @ -66,11 +67,19 @@ static PF_DECL(WIMLoadImage); | ||||||
| static PF_DECL(WIMExtractImagePath); | static PF_DECL(WIMExtractImagePath); | ||||||
| static PF_DECL(WIMCloseHandle); | static PF_DECL(WIMCloseHandle); | ||||||
| 
 | 
 | ||||||
|  | static BOOL Get7ZipPath(void) | ||||||
|  | { | ||||||
|  | 	if ( (GetRegistryKeyStr(REGKEY_HKCU, "7-Zip\\Path", sevenzip_path, sizeof(sevenzip_path))) | ||||||
|  | 	  || (GetRegistryKeyStr(REGKEY_HKLM, "7-Zip\\Path", sevenzip_path, sizeof(sevenzip_path))) ) { | ||||||
|  | 		safe_strcat(sevenzip_path, sizeof(sevenzip_path), "\\7z.exe"); | ||||||
|  | 		return (_access(sevenzip_path, 0) != -1); | ||||||
|  | 	} | ||||||
|  | 	return FALSE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Find out if we have any way to extraxt WIM files on this platform
 | // Find out if we have any way to extraxt WIM files on this platform
 | ||||||
| BOOL WimExtractCheck(void) | BOOL WimExtractCheck(void) | ||||||
| { | { | ||||||
| 	char sevenzip_path[MAX_PATH]; |  | ||||||
| 
 |  | ||||||
| 	PF_INIT(WIMCreateFile, wimgapi); | 	PF_INIT(WIMCreateFile, wimgapi); | ||||||
| 	PF_INIT(WIMSetTemporaryPath, wimgapi); | 	PF_INIT(WIMSetTemporaryPath, wimgapi); | ||||||
| 	PF_INIT(WIMLoadImage, wimgapi); | 	PF_INIT(WIMLoadImage, wimgapi); | ||||||
|  | @ -78,10 +87,7 @@ BOOL WimExtractCheck(void) | ||||||
| 	PF_INIT(WIMCloseHandle, wimgapi); | 	PF_INIT(WIMCloseHandle, wimgapi); | ||||||
| 
 | 
 | ||||||
| 	has_wimgapi = (pfWIMCreateFile && pfWIMSetTemporaryPath && pfWIMLoadImage && pfWIMExtractImagePath && pfWIMCloseHandle); | 	has_wimgapi = (pfWIMCreateFile && pfWIMSetTemporaryPath && pfWIMLoadImage && pfWIMExtractImagePath && pfWIMCloseHandle); | ||||||
| 	if (GetRegistryKeyStr("7-Zip\\Path", sevenzip_path, sizeof(sevenzip_path))) { | 	has_7z = Get7ZipPath(); | ||||||
| 		safe_strcat(sevenzip_path, sizeof(sevenzip_path), "\\7z.exe"); |  | ||||||
| 		has_7z = (_access(sevenzip_path, 0) != -1); |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	uprintf("WIM extraction method(s) supported: %s%s%s\n", has_7z?"7z":(has_wimgapi?"":"NONE"), | 	uprintf("WIM extraction method(s) supported: %s%s%s\n", has_7z?"7z":(has_wimgapi?"":"NONE"), | ||||||
| 		(has_wimgapi && has_7z)?", ":"", has_wimgapi?"wimgapi.dll":""); | 		(has_wimgapi && has_7z)?", ":"", has_wimgapi?"wimgapi.dll":""); | ||||||
|  | @ -162,17 +168,6 @@ static BOOL WimExtractFile_7z(const char* image, int index, const char* src, con | ||||||
| 	char tmpdst[MAX_PATH]; | 	char tmpdst[MAX_PATH]; | ||||||
| 
 | 
 | ||||||
| 	uprintf("Opening: %s:[%d] (7-Zip)\n", image, index); | 	uprintf("Opening: %s:[%d] (7-Zip)\n", image, index); | ||||||
| 	if (!GetRegistryKeyStr("7-Zip\\Path", sevenzip_path, sizeof(sevenzip_path))) { |  | ||||||
| 		uprintf("  Could not read 7-Zip path from registry\n"); |  | ||||||
| 		return FALSE; |  | ||||||
| 	} |  | ||||||
| 	safe_strcat(sevenzip_path, sizeof(sevenzip_path), "\\7z.exe"); |  | ||||||
| 	 |  | ||||||
| 	if (_access(sevenzip_path, 0) == -1) { |  | ||||||
| 		uprintf("  Could not locate 7z.exe at '%s'\n", sevenzip_path); |  | ||||||
| 		return FALSE; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	safe_strcpy(tmpdst, sizeof(tmpdst), dst); | 	safe_strcpy(tmpdst, sizeof(tmpdst), dst); | ||||||
| 	for (i=safe_strlen(tmpdst); i>0; i--) { | 	for (i=safe_strlen(tmpdst); i>0; i--) { | ||||||
| 		if (tmpdst[i] == '\\') | 		if (tmpdst[i] == '\\') | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue