mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[misc] disable Windows 7 support
* Also set rufus-next to 3.23 and fix a date typo in ChangeLog.txt
This commit is contained in:
		
							parent
							
								
									d478e3179b
								
							
						
					
					
						commit
						018718b2c8
					
				
					 10 changed files with 50 additions and 53 deletions
				
			
		|  | @ -1,4 +1,4 @@ | ||||||
| o Version 3.22 (2022.03.25) | o Version 3.22 (2023.03.25) | ||||||
|     Add SHA-1 and SHA-256 x86 acceleration on CPUs that support it (courtesy of Jeffrey Walton) |     Add SHA-1 and SHA-256 x86 acceleration on CPUs that support it (courtesy of Jeffrey Walton) | ||||||
|     Add an option to disable BitLocker device encryption in the Windows User Experience dialog |     Add an option to disable BitLocker device encryption in the Windows User Experience dialog | ||||||
|     Add a cheat mode (Ctrl-P) to preserve the log between sessions |     Add a cheat mode (Ctrl-P) to preserve the log between sessions | ||||||
|  |  | ||||||
							
								
								
									
										25
									
								
								configure
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										25
									
								
								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.71 for rufus 3.22. | # Generated by GNU Autoconf 2.71 for rufus 3.23. | ||||||
| # | # | ||||||
| # Report bugs to <https://github.com/pbatard/rufus/issues>. | # Report bugs to <https://github.com/pbatard/rufus/issues>. | ||||||
| # | # | ||||||
|  | @ -611,8 +611,8 @@ MAKEFLAGS= | ||||||
| # Identity of this package. | # Identity of this package. | ||||||
| PACKAGE_NAME='rufus' | PACKAGE_NAME='rufus' | ||||||
| PACKAGE_TARNAME='rufus' | PACKAGE_TARNAME='rufus' | ||||||
| PACKAGE_VERSION='3.22' | PACKAGE_VERSION='3.23' | ||||||
| PACKAGE_STRING='rufus 3.22' | PACKAGE_STRING='rufus 3.23' | ||||||
| PACKAGE_BUGREPORT='https://github.com/pbatard/rufus/issues' | PACKAGE_BUGREPORT='https://github.com/pbatard/rufus/issues' | ||||||
| PACKAGE_URL='https://rufus.ie' | PACKAGE_URL='https://rufus.ie' | ||||||
| 
 | 
 | ||||||
|  | @ -1269,7 +1269,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 3.22 to adapt to many kinds of systems. | \`configure' configures rufus 3.23 to adapt to many kinds of systems. | ||||||
| 
 | 
 | ||||||
| Usage: $0 [OPTION]... [VAR=VALUE]... | Usage: $0 [OPTION]... [VAR=VALUE]... | ||||||
| 
 | 
 | ||||||
|  | @ -1336,7 +1336,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 3.22:";; |      short | recursive ) echo "Configuration of rufus 3.23:";; | ||||||
|    esac |    esac | ||||||
|   cat <<\_ACEOF |   cat <<\_ACEOF | ||||||
| 
 | 
 | ||||||
|  | @ -1428,7 +1428,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 3.22 | rufus configure 3.23 | ||||||
| generated by GNU Autoconf 2.71 | generated by GNU Autoconf 2.71 | ||||||
| 
 | 
 | ||||||
| Copyright (C) 2021 Free Software Foundation, Inc. | Copyright (C) 2021 Free Software Foundation, Inc. | ||||||
|  | @ -1504,7 +1504,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 3.22, which was | It was created by rufus $as_me 3.23, which was | ||||||
| generated by GNU Autoconf 2.71.  Invocation command line was | generated by GNU Autoconf 2.71.  Invocation command line was | ||||||
| 
 | 
 | ||||||
|   $ $0$ac_configure_args_raw |   $ $0$ac_configure_args_raw | ||||||
|  | @ -1790,9 +1790,7 @@ struct stat; | ||||||
| /* Most of the following tests are stolen from RCS 5.7 src/conf.sh.  */ | /* Most of the following tests are stolen from RCS 5.7 src/conf.sh.  */ | ||||||
| struct buf { int x; }; | struct buf { int x; }; | ||||||
| struct buf * (*rcsopen) (struct buf *, struct stat *, int); | struct buf * (*rcsopen) (struct buf *, struct stat *, int); | ||||||
| static char *e (p, i) | static char *e (char **p, int i) | ||||||
|      char **p; |  | ||||||
|      int i; |  | ||||||
| { | { | ||||||
|   return p[i]; |   return p[i]; | ||||||
| } | } | ||||||
|  | @ -1843,6 +1841,7 @@ extern int puts (const char *); | ||||||
| extern int printf (const char *, ...); | extern int printf (const char *, ...); | ||||||
| extern int dprintf (int, const char *, ...); | extern int dprintf (int, const char *, ...); | ||||||
| extern void *malloc (size_t); | extern void *malloc (size_t); | ||||||
|  | extern void free (void *); | ||||||
| 
 | 
 | ||||||
| // Check varargs macros.  These examples are taken from C99 6.10.3.5. | // Check varargs macros.  These examples are taken from C99 6.10.3.5. | ||||||
| // dprintf is used instead of fprintf to avoid needing to declare | // dprintf is used instead of fprintf to avoid needing to declare | ||||||
|  | @ -2768,7 +2767,7 @@ fi | ||||||
| 
 | 
 | ||||||
| # Define the identity of the package. | # Define the identity of the package. | ||||||
|  PACKAGE='rufus' |  PACKAGE='rufus' | ||||||
|  VERSION='3.22' |  VERSION='3.23' | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h | printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h | ||||||
|  | @ -5310,7 +5309,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 3.22, which was | This file was extended by rufus $as_me 3.23, which was | ||||||
| generated by GNU Autoconf 2.71.  Invocation command line was | generated by GNU Autoconf 2.71.  Invocation command line was | ||||||
| 
 | 
 | ||||||
|   CONFIG_FILES    = $CONFIG_FILES |   CONFIG_FILES    = $CONFIG_FILES | ||||||
|  | @ -5366,7 +5365,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ | ||||||
| cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 | cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 | ||||||
| ac_cs_config='$ac_cs_config_escaped' | ac_cs_config='$ac_cs_config_escaped' | ||||||
| ac_cs_version="\\ | ac_cs_version="\\ | ||||||
| rufus config.status 3.22 | rufus config.status 3.23 | ||||||
| configured by $0, generated by GNU Autoconf 2.71, | configured by $0, generated by GNU Autoconf 2.71, | ||||||
|   with options \\"\$ac_cs_config\\" |   with options \\"\$ac_cs_config\\" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| AC_INIT([rufus], [3.22], [https://github.com/pbatard/rufus/issues], [rufus], [https://rufus.ie]) | AC_INIT([rufus], [3.23], [https://github.com/pbatard/rufus/issues], [rufus], [https://rufus.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]) | ||||||
|  |  | ||||||
|  | @ -103,8 +103,7 @@ static BOOL GetUSBProperties(char* parent_path, char* device_id, usb_device_prop | ||||||
| 		r = TRUE; | 		r = TRUE; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// In their great wisdom, Microsoft decided to BREAK the USB speed report between Windows 7 and Windows 8
 | 	// The USB speed report of modern Windows is a complete mess
 | ||||||
| 	if (nWindowsVersion >= WINDOWS_8) { |  | ||||||
| 	size = sizeof(conn_info_v2); | 	size = sizeof(conn_info_v2); | ||||||
| 	memset(&conn_info_v2, 0, size); | 	memset(&conn_info_v2, 0, size); | ||||||
| 	conn_info_v2.ConnectionIndex = (ULONG)props->port; | 	conn_info_v2.ConnectionIndex = (ULONG)props->port; | ||||||
|  | @ -121,7 +120,6 @@ static BOOL GetUSBProperties(char* parent_path, char* device_id, usb_device_prop | ||||||
| 	} else if (conn_info_v2.Flags.DeviceIsSuperSpeedCapableOrHigher) { | 	} else if (conn_info_v2.Flags.DeviceIsSuperSpeedCapableOrHigher) { | ||||||
| 		props->lower_speed = 1; | 		props->lower_speed = 1; | ||||||
| 	} | 	} | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| out: | out: | ||||||
| 	safe_closehandle(handle); | 	safe_closehandle(handle); | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								src/pki.c
									
										
									
									
									
								
							
							
						
						
									
										15
									
								
								src/pki.c
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Rufus: The Reliable USB Formatting Utility |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  * PKI functions (code signing, etc.) |  * PKI functions (code signing, etc.) | ||||||
|  * Copyright © 2015-2022 Pete Batard <pete@akeo.ie> |  * Copyright © 2015-2023 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 | ||||||
|  | @ -539,14 +539,15 @@ uint64_t GetSignatureTimeStamp(const char* path) | ||||||
| 	timestamp = GetRFC3161TimeStamp(pSignerInfo); | 	timestamp = GetRFC3161TimeStamp(pSignerInfo); | ||||||
| 	if (timestamp) | 	if (timestamp) | ||||||
| 		uprintf("Note: '%s' has timestamp %s", (path==NULL)?mpath:path, TimestampToHumanReadable(timestamp)); | 		uprintf("Note: '%s' has timestamp %s", (path==NULL)?mpath:path, TimestampToHumanReadable(timestamp)); | ||||||
| 	// Because we are currently using both SHA-1 and SHA-256 signatures, we are in the very specific
 | 	// Because we were using both SHA-1 and SHA-256 signatures during the SHA-256 transition, we were
 | ||||||
| 	// situation that Windows may say our executable passes Authenticode validation on Windows 7 or
 | 	// in the very specific situation where Windows could say that our executable passed Authenticode
 | ||||||
| 	// later (which includes timestamp validation) even if the SHA-1 signature or timestamps have
 | 	// validation even if the SHA-1 signature or timestamps had been altered.
 | ||||||
| 	// been altered.
 | 	// This means that, unless we also check the nested signature timestamp, an attacker could alter
 | ||||||
| 	// This means that, if we don't also check the nested SHA-256 signature timestamp, an attacker
 | 	// the most vulnerable signature (which may also be the one used for chronology validation) and
 | ||||||
| 	// could alter the SHA-1 one (which is the one we use by default for chronology validation) and
 |  | ||||||
| 	// trick us into using an invalid timestamp value. To prevent this, we validate that, if we have
 | 	// trick us into using an invalid timestamp value. To prevent this, we validate that, if we have
 | ||||||
| 	// both a regular and nested timestamp, they are within 60 seconds of each other.
 | 	// both a regular and nested timestamp, they are within 60 seconds of each other.
 | ||||||
|  | 	// Even as we are no longer dual signing with two versions of SHA, we keep the code in case a
 | ||||||
|  | 	// major SHA-256 vulnerability is found and we have to go through a dual SHA again.
 | ||||||
| 	nested_timestamp = GetNestedRFC3161TimeStamp(pSignerInfo); | 	nested_timestamp = GetNestedRFC3161TimeStamp(pSignerInfo); | ||||||
| 	if (nested_timestamp) | 	if (nested_timestamp) | ||||||
| 		uprintf("Note: '%s' has nested timestamp %s", (path==NULL)?mpath:path, TimestampToHumanReadable(nested_timestamp)); | 		uprintf("Note: '%s' has nested timestamp %s", (path==NULL)?mpath:path, TimestampToHumanReadable(nested_timestamp)); | ||||||
|  |  | ||||||
|  | @ -610,7 +610,7 @@ static DWORD WINAPI SearchProcessThread(LPVOID param) | ||||||
| 		if (!bGotCmdLine) | 		if (!bGotCmdLine) | ||||||
| 			bGotCmdLine = (GetModuleFileNameExU(processHandle, 0, cmdline, MAX_PATH - 1) != 0); | 			bGotCmdLine = (GetModuleFileNameExU(processHandle, 0, cmdline, MAX_PATH - 1) != 0); | ||||||
| 
 | 
 | ||||||
| 		// The above may not work on Windows 7, so try QueryFullProcessImageName (Vista or later)
 | 		// The above may not work on all Windows version, so fall back to QueryFullProcessImageName
 | ||||||
| 		if (!bGotCmdLine) { | 		if (!bGotCmdLine) { | ||||||
| 			bGotCmdLine = (QueryFullProcessImageNameW(processHandle, 0, wexe_path, &size) != FALSE); | 			bGotCmdLine = (QueryFullProcessImageNameW(processHandle, 0, wexe_path, &size) != FALSE); | ||||||
| 			if (bGotCmdLine) | 			if (bGotCmdLine) | ||||||
|  |  | ||||||
|  | @ -3325,7 +3325,7 @@ FARPROC WINAPI dllDelayLoadHook(unsigned dliNotify, PDelayLoadInfo pdli) | ||||||
| { | { | ||||||
| 	if (dliNotify == dliNotePreLoadLibrary) { | 	if (dliNotify == dliNotePreLoadLibrary) { | ||||||
| 		// Windows 7 without KB2533623 does not support the LOAD_LIBRARY_SEARCH_SYSTEM32 flag.
 | 		// Windows 7 without KB2533623 does not support the LOAD_LIBRARY_SEARCH_SYSTEM32 flag.
 | ||||||
| 		// That is is OK, because the delay load handler will interrupt the NULL return value
 | 		// That is OK, because the delay load handler will interrupt the NULL return value
 | ||||||
| 		// to mean that it should perform a normal LoadLibrary.
 | 		// to mean that it should perform a normal LoadLibrary.
 | ||||||
| 		return (FARPROC)LoadLibraryExA(pdli->szDll, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32); | 		return (FARPROC)LoadLibraryExA(pdli->szDll, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32); | ||||||
| 	} | 	} | ||||||
|  | @ -3685,8 +3685,7 @@ skip_args_processing: | ||||||
| 		nWindowsVersion = forced_windows_version; | 		nWindowsVersion = forced_windows_version; | ||||||
| 
 | 
 | ||||||
| 	// ...and nothing of value was lost
 | 	// ...and nothing of value was lost
 | ||||||
| 	// TODO: Set to <= for 3.23
 | 	if (nWindowsVersion <= WINDOWS_7) { | ||||||
| 	if (nWindowsVersion < WINDOWS_7) { |  | ||||||
| 		// Load the translation before we print the error
 | 		// Load the translation before we print the error
 | ||||||
| 		get_loc_data_file(loc_file, selected_locale); | 		get_loc_data_file(loc_file, selected_locale); | ||||||
| 		right_to_left_mode = ((selected_locale->ctrl_id) & LOC_RIGHT_TO_LEFT); | 		right_to_left_mode = ((selected_locale->ctrl_id) & LOC_RIGHT_TO_LEFT); | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								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.22.2009" | CAPTION "Rufus 3.23.2010" | ||||||
| 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 | ||||||
|  | @ -392,8 +392,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 3,22,2009,0 |  FILEVERSION 3,23,2010,0 | ||||||
|  PRODUCTVERSION 3,22,2009,0 |  PRODUCTVERSION 3,23,2010,0 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -411,13 +411,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.22.2009" |             VALUE "FileVersion", "3.23.2010" | ||||||
|             VALUE "InternalName", "Rufus" |             VALUE "InternalName", "Rufus" | ||||||
|             VALUE "LegalCopyright", "© 2011-2023 Pete Batard (GPL v3)" |             VALUE "LegalCopyright", "© 2011-2023 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.22.exe" |             VALUE "OriginalFilename", "rufus-3.23.exe" | ||||||
|             VALUE "ProductName", "Rufus" |             VALUE "ProductName", "Rufus" | ||||||
|             VALUE "ProductVersion", "3.22.2009" |             VALUE "ProductVersion", "3.23.2010" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  |  | ||||||
|  | @ -1351,7 +1351,7 @@ LONG GetEntryWidth(HWND hDropDown, const char *entry) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Windows 7 taskbar icon handling (progress bar overlay, etc) |  * Windows taskbar icon handling (progress bar overlay, etc) | ||||||
|  */ |  */ | ||||||
| static ITaskbarList3* ptbl = NULL; | static ITaskbarList3* ptbl = NULL; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -636,7 +636,7 @@ char* GetExistingMountPoint(const char* image, int index) | ||||||
| 	return (path[0] == 0) ? NULL: path; | 	return (path[0] == 0) ? NULL: path; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Extract a file from a WIM image using wimgapi.dll (Windows 7 or later)
 | // Extract a file from a WIM image using wimgapi.dll
 | ||||||
| // NB: if you want progress from a WIM callback, you must run the WIM API call in its own thread
 | // NB: if you want progress from a WIM callback, you must run the WIM API call in its own thread
 | ||||||
| // (which we don't do here) as it won't work otherwise. Thanks go to Erwan for figuring this out!
 | // (which we don't do here) as it won't work otherwise. Thanks go to Erwan for figuring this out!
 | ||||||
| BOOL WimExtractFile_API(const char* image, int index, const char* src, const char* dst, BOOL bSilent) | BOOL WimExtractFile_API(const char* image, int index, const char* src, const char* dst, BOOL bSilent) | ||||||
|  | @ -857,7 +857,7 @@ out: | ||||||
| 	return r; | 	return r; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Apply a WIM image using wimgapi.dll (Windows 7 or later)
 | // Apply a WIM image using wimgapi.dll
 | ||||||
| // https://docs.microsoft.com/en-us/previous-versions/msdn10/dd851944(v=msdn.10)
 | // https://docs.microsoft.com/en-us/previous-versions/msdn10/dd851944(v=msdn.10)
 | ||||||
| // To get progress, we must run this call within its own thread
 | // To get progress, we must run this call within its own thread
 | ||||||
| static DWORD WINAPI WimApplyImageThread(LPVOID param) | static DWORD WINAPI WimApplyImageThread(LPVOID param) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue