mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[wue] improve Windows version reporting from ISO/.wim
* Pick the version and build number directly from the install[.wim|.esd] XML index. This forces us to mount the ISO during scan, but it's the only way to get an accurate Build number... * Also drop linking to version.dll (along with the whole version.dll delay-loading shenanigans).
This commit is contained in:
		
							parent
							
								
									4d6c8b72d8
								
							
						
					
					
						commit
						8814944c35
					
				
					 11 changed files with 147 additions and 102 deletions
				
			
		|  | @ -19,7 +19,7 @@ TARGET        := $(word 1,$(subst -, ,$(TUPLE))) | |||
| DEF_SUFFIX    := $(if $(TARGET:x86_64=),.def,.def64) | ||||
| 
 | ||||
| .PHONY: all | ||||
| all: dwmapi-delaylib.lib version-delaylib.lib wintrust-delaylib.lib | ||||
| all: dwmapi-delaylib.lib wintrust-delaylib.lib | ||||
| 
 | ||||
| %.def64: %.def | ||||
| 	$(AM_V_SED) "s/@.*//" $< >$@ | ||||
|  |  | |||
|  | @ -367,7 +367,7 @@ uninstall-am: | |||
| 
 | ||||
| 
 | ||||
| .PHONY: all | ||||
| all: dwmapi-delaylib.lib version-delaylib.lib wintrust-delaylib.lib | ||||
| all: dwmapi-delaylib.lib wintrust-delaylib.lib | ||||
| 
 | ||||
| %.def64: %.def | ||||
| 	$(AM_V_SED) "s/@.*//" $< >$@ | ||||
|  |  | |||
|  | @ -1,4 +0,0 @@ | |||
| EXPORTS | ||||
|   GetFileVersionInfoW@16 | ||||
|   GetFileVersionInfoSizeW@8 | ||||
|   VerQueryValueA@16 | ||||
|  | @ -133,12 +133,12 @@ | |||
|       <AdditionalOptions>/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <UACExecutionLevel>RequireAdministrator</UACExecutionLevel> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <TargetMachine>MachineX86</TargetMachine> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;version.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|     </Link> | ||||
|     <ResourceCompile> | ||||
|       <PreprocessorDefinitions>_UNICODE;UNICODE;RUFUS_LOC;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|  | @ -158,12 +158,12 @@ | |||
|       <AdditionalOptions>/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;version.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <UACExecutionLevel>RequireAdministrator</UACExecutionLevel> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <AdditionalLibraryDirectories>C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\um\arm</AdditionalLibraryDirectories> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;version.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|     </Link> | ||||
|     <ResourceCompile> | ||||
|       <PreprocessorDefinitions>_UNICODE;UNICODE;RUFUS_LOC;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|  | @ -185,12 +185,12 @@ | |||
|       <AdditionalOptions>/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;version.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <UACExecutionLevel>RequireAdministrator</UACExecutionLevel> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <AdditionalLibraryDirectories>C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\arm64</AdditionalLibraryDirectories> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;version.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|     </Link> | ||||
|     <ResourceCompile> | ||||
|       <PreprocessorDefinitions>_UNICODE;UNICODE;RUFUS_LOC;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|  | @ -217,12 +217,12 @@ | |||
|       <AdditionalOptions>/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <UACExecutionLevel>RequireAdministrator</UACExecutionLevel> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <TargetMachine>MachineX64</TargetMachine> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;version.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|     </Link> | ||||
|     <ResourceCompile> | ||||
|       <PreprocessorDefinitions>_UNICODE;UNICODE;RUFUS_LOC;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|  | @ -244,13 +244,13 @@ | |||
|       <StringPooling>true</StringPooling> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <UACExecutionLevel>RequireAdministrator</UACExecutionLevel> | ||||
|       <GenerateDebugInformation>false</GenerateDebugInformation> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <TargetMachine>MachineX86</TargetMachine> | ||||
|       <AdditionalOptions>/BREPRO %(AdditionalOptions)</AdditionalOptions> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;version.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|     </Link> | ||||
|     <ResourceCompile> | ||||
|       <PreprocessorDefinitions>_UNICODE;UNICODE;RUFUS_LOC;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|  | @ -272,13 +272,13 @@ | |||
|       <StringPooling>true</StringPooling> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;version.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <UACExecutionLevel>RequireAdministrator</UACExecutionLevel> | ||||
|       <GenerateDebugInformation>false</GenerateDebugInformation> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <AdditionalLibraryDirectories>C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\um\arm</AdditionalLibraryDirectories> | ||||
|       <AdditionalOptions>/BREPRO %(AdditionalOptions)</AdditionalOptions> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;version.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|     </Link> | ||||
|     <ResourceCompile> | ||||
|       <PreprocessorDefinitions>_UNICODE;UNICODE;RUFUS_LOC;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|  | @ -302,13 +302,13 @@ | |||
|       <StringPooling>true</StringPooling> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;version.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <UACExecutionLevel>RequireAdministrator</UACExecutionLevel> | ||||
|       <GenerateDebugInformation>false</GenerateDebugInformation> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <AdditionalLibraryDirectories>C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\arm64</AdditionalLibraryDirectories> | ||||
|       <AdditionalOptions>/BREPRO %(AdditionalOptions)</AdditionalOptions> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;version.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|     </Link> | ||||
|     <ResourceCompile> | ||||
|       <PreprocessorDefinitions>_UNICODE;UNICODE;RUFUS_LOC;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|  | @ -335,13 +335,13 @@ | |||
|       <StringPooling>true</StringPooling> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <UACExecutionLevel>RequireAdministrator</UACExecutionLevel> | ||||
|       <GenerateDebugInformation>false</GenerateDebugInformation> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <TargetMachine>MachineX64</TargetMachine> | ||||
|       <AdditionalOptions>/BREPRO %(AdditionalOptions)</AdditionalOptions> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;version.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|       <DelayLoadDLLs>advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs> | ||||
|     </Link> | ||||
|     <ResourceCompile> | ||||
|       <PreprocessorDefinitions>_UNICODE;UNICODE;RUFUS_LOC;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ SUBDIRS = ../.mingw bled ext2fs ms-sys syslinux/libfat syslinux/libinstaller sys | |||
| # As far as I can tell, the following libraries are *not* vulnerable to side-loading, so we link using their regular version: | ||||
| NONVULNERABLE_LIBS = -lsetupapi -lole32 -lgdi32 -lshlwapi -lcrypt32 -lcomdlg32 -lcomctl32 -luuid | ||||
| # The following libraries are vulnerable (or have an unknown vulnerability status), so we link using our delay-loaded replacement: | ||||
| VULNERABLE_LIBS = -ldwmapi-delaylib -lversion-delaylib -lwintrust-delaylib | ||||
| VULNERABLE_LIBS = -ldwmapi-delaylib -lwintrust-delaylib | ||||
| 
 | ||||
| noinst_PROGRAMS = rufus | ||||
| 
 | ||||
|  |  | |||
|  | @ -276,7 +276,7 @@ SUBDIRS = ../.mingw bled ext2fs ms-sys syslinux/libfat syslinux/libinstaller sys | |||
| # As far as I can tell, the following libraries are *not* vulnerable to side-loading, so we link using their regular version:
 | ||||
| NONVULNERABLE_LIBS = -lsetupapi -lole32 -lgdi32 -lshlwapi -lcrypt32 -lcomdlg32 -lcomctl32 -luuid | ||||
| # The following libraries are vulnerable (or have an unknown vulnerability status), so we link using our delay-loaded replacement:
 | ||||
| VULNERABLE_LIBS = -ldwmapi-delaylib -lversion-delaylib -lwintrust-delaylib | ||||
| VULNERABLE_LIBS = -ldwmapi-delaylib -lwintrust-delaylib | ||||
| AM_V_WINDRES_0 = @echo "  RC     $@";$(WINDRES) | ||||
| AM_V_WINDRES_1 = $(WINDRES) | ||||
| AM_V_WINDRES_ = $(AM_V_WINDRES_$(AM_DEFAULT_VERBOSITY)) | ||||
|  |  | |||
							
								
								
									
										35
									
								
								src/iso.c
									
										
									
									
									
								
							
							
						
						
									
										35
									
								
								src/iso.c
									
										
									
									
									
								
							|  | @ -104,7 +104,6 @@ static const char* wininst_name[] = { "install.wim", "install.esd", "install.swm | |||
| // If the disc was mastered properly, GRUB/EFI will take care of itself
 | ||||
| static const char* grub_dirname[] = { "/boot/grub/i386-pc", "/boot/grub2/i386-pc" }; | ||||
| static const char* grub_cfg[] = { "grub.cfg", "loopback.cfg" }; | ||||
| static const char* compatresources_dll = "compatresources.dll"; | ||||
| static const char* menu_cfg = "menu.cfg"; | ||||
| // NB: Do not alter the order of the array below without validating hardcoded indexes in check_iso_props
 | ||||
| static const char* syslinux_cfg[] = { "isolinux.cfg", "syslinux.cfg", "extlinux.conf", "txt.cfg" }; | ||||
|  | @ -290,9 +289,6 @@ static BOOL check_iso_props(const char* psz_dirname, int64_t file_length, const | |||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				// Check for "compatresources.dll" in "###/sources/"
 | ||||
| 				if (safe_stricmp(psz_basename, compatresources_dll) == 0) | ||||
| 					img_report.has_compatresources_dll = TRUE; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
|  | @ -1164,37 +1160,6 @@ out: | |||
| 				img_report.has_grub2 = 0; | ||||
| 			} | ||||
| 		} | ||||
| 		if (img_report.has_compatresources_dll) { | ||||
| 			// So that we don't have to extract the XML index from boot/install.wim
 | ||||
| 			// to find if we're dealing with Windows 11, we isolate the version from
 | ||||
| 			// sources/compatresources.dll, which is much faster...
 | ||||
| 			VS_FIXEDFILEINFO* ver_info = NULL; | ||||
| 			DWORD ver_handle = 0, ver_size; | ||||
| 			UINT value_len = 0; | ||||
| 			// coverity[swapped_arguments]
 | ||||
| 			if (GetTempFileNameU(temp_dir, APPLICATION_NAME, 0, path) != 0) { | ||||
| 				// NB: Calling the GetFileVersion/VerQueryValue APIs create DLL sideloading issues.
 | ||||
| 				// So make sure you delay-load 'version.dll' in your application if you use these.
 | ||||
| 				size = (size_t)ExtractISOFile(src_iso, "sources/compatresources.dll", path, FILE_ATTRIBUTE_NORMAL); | ||||
| 				ver_size = GetFileVersionInfoSizeU(path, &ver_handle); | ||||
| 				if (ver_size != 0) { | ||||
| 					buf = malloc(ver_size); | ||||
| 					if ((buf != NULL) && GetFileVersionInfoU(path, ver_handle, ver_size, buf) && | ||||
| 						VerQueryValueA(buf, "\\", (LPVOID)&ver_info, &value_len) && (value_len != 0)) { | ||||
| 						if (ver_info->dwSignature == VS_FFI_SIGNATURE) { | ||||
| 							img_report.win_version.major = HIWORD(ver_info->dwFileVersionMS); | ||||
| 							img_report.win_version.minor = LOWORD(ver_info->dwFileVersionMS); | ||||
| 							img_report.win_version.build = HIWORD(ver_info->dwFileVersionLS); | ||||
| 							img_report.win_version.revision = LOWORD(ver_info->dwFileVersionLS); | ||||
| 							if ((img_report.win_version.major == 10) && (img_report.win_version.build > 20000)) | ||||
| 								img_report.win_version.major = 11; | ||||
| 						} | ||||
| 					} | ||||
| 					free(buf); | ||||
| 				} | ||||
| 				DeleteFileU(path); | ||||
| 			} | ||||
| 		} | ||||
| 		StrArrayDestroy(&config_path); | ||||
| 		StrArrayDestroy(&isolinux_path); | ||||
| 		SendMessage(hMainDialog, UM_PROGRESS_EXIT, 0, 0); | ||||
|  |  | |||
							
								
								
									
										34
									
								
								src/rufus.c
									
										
									
									
									
								
							
							
						
						
									
										34
									
								
								src/rufus.c
									
										
									
									
									
								
							|  | @ -1274,7 +1274,7 @@ DWORD WINAPI ImageScanThread(LPVOID param) | |||
| 	}; | ||||
| 	int i, len; | ||||
| 	uint8_t arch; | ||||
| 	char tmp_path[MAX_PATH]; | ||||
| 	char tmp_path[MAX_PATH], tmp_str[64]; | ||||
| 
 | ||||
| 	if (image_path == NULL) | ||||
| 		goto out; | ||||
|  | @ -1284,6 +1284,8 @@ DWORD WINAPI ImageScanThread(LPVOID param) | |||
| 	memset(&img_report, 0, sizeof(img_report)); | ||||
| 	img_report.is_iso = (BOOLEAN)ExtractISO(image_path, "", TRUE); | ||||
| 	img_report.is_bootable_img = IsBootableImage(image_path); | ||||
| 	if (img_report.wininst_index > 0 || img_report.is_windows_img) | ||||
| 		PopulateWindowsVersion(); | ||||
| 	ComboBox_ResetContent(hImageOption); | ||||
| 	imop_win_sel = 0; | ||||
| 
 | ||||
|  | @ -1327,7 +1329,16 @@ DWORD WINAPI ImageScanThread(LPVOID param) | |||
| 			} | ||||
| 			DeleteFileU(tmp_path); | ||||
| 		} | ||||
| 		uprintf("  Image is %sa UEFI bootable Windows installation image", img_report.has_efi ? "" : "NOT "); | ||||
| 		tmp_str[0] = 0; | ||||
| 		if (img_report.win_version.major != 0) { | ||||
| 			if (img_report.win_version.minor == 0) | ||||
| 				static_sprintf(tmp_str, " %d (Build %d.%d)", img_report.win_version.major, | ||||
| 					img_report.win_version.build, img_report.win_version.revision); | ||||
| 			else | ||||
| 				static_sprintf(tmp_str, " %d.%d (Build %d.%d)", img_report.win_version.major, | ||||
| 					img_report.win_version.minor, img_report.win_version.build, img_report.win_version.revision); | ||||
| 		} | ||||
| 		uprintf("  Image is a %sUEFI bootable Windows%s installation image", img_report.has_efi ? "" : "NON-", tmp_str); | ||||
| 	} else if (IS_DD_BOOTABLE(img_report)) { | ||||
| 		if (img_report.is_bootable_img == 2) | ||||
| 			uprintf("  Image is a FORCED non-bootable image"); | ||||
|  | @ -2254,24 +2265,6 @@ out: | |||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| #ifdef RUFUS_TEST | ||||
| extern BOOL ApplyWindowsCustomization(char drive_letter); | ||||
| 
 | ||||
| static DWORD WINAPI TestThread(LPVOID param) | ||||
| { | ||||
| 	static BOOL processing = FALSE; | ||||
| 
 | ||||
| 	if (processing) { | ||||
| 		uprintf("Test thread is already in progress!"); | ||||
| 		ExitThread(1); | ||||
| 	} | ||||
| 	processing = TRUE; | ||||
| 	ApplyWindowsCustomization('B'); | ||||
| 	processing = FALSE; | ||||
| 	ExitThread(0); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Main dialog callback | ||||
|  */ | ||||
|  | @ -2308,7 +2301,6 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | |||
| 	case WM_COMMAND: | ||||
| #ifdef RUFUS_TEST | ||||
| 		if (LOWORD(wParam) == IDC_TEST) { | ||||
| 			CreateThread(NULL, 0, TestThread, NULL, 0, NULL); | ||||
| 			break; | ||||
| 		} | ||||
| #endif | ||||
|  |  | |||
							
								
								
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | |||
| IDD_DIALOG DIALOGEX 12, 12, 232, 326 | ||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||
| EXSTYLE WS_EX_ACCEPTFILES | ||||
| CAPTION "Rufus 3.21.1936" | ||||
| CAPTION "Rufus 3.21.1937" | ||||
| FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||
| BEGIN | ||||
|     LTEXT           "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP | ||||
|  | @ -395,8 +395,8 @@ END | |||
| // | ||||
| 
 | ||||
| VS_VERSION_INFO VERSIONINFO | ||||
|  FILEVERSION 3,21,1936,0 | ||||
|  PRODUCTVERSION 3,21,1936,0 | ||||
|  FILEVERSION 3,21,1937,0 | ||||
|  PRODUCTVERSION 3,21,1937,0 | ||||
|  FILEFLAGSMASK 0x3fL | ||||
| #ifdef _DEBUG | ||||
|  FILEFLAGS 0x1L | ||||
|  | @ -414,13 +414,13 @@ BEGIN | |||
|             VALUE "Comments", "https://rufus.ie" | ||||
|             VALUE "CompanyName", "Akeo Consulting" | ||||
|             VALUE "FileDescription", "Rufus" | ||||
|             VALUE "FileVersion", "3.21.1936" | ||||
|             VALUE "FileVersion", "3.21.1937" | ||||
|             VALUE "InternalName", "Rufus" | ||||
|             VALUE "LegalCopyright", "© 2011-2022 Pete Batard (GPL v3)" | ||||
|             VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" | ||||
|             VALUE "OriginalFilename", "rufus-3.21.exe" | ||||
|             VALUE "ProductName", "Rufus" | ||||
|             VALUE "ProductVersion", "3.21.1936" | ||||
|             VALUE "ProductVersion", "3.21.1937" | ||||
|         END | ||||
|     END | ||||
|     BLOCK "VarFileInfo" | ||||
|  |  | |||
							
								
								
									
										125
									
								
								src/wue.c
									
										
									
									
									
								
							
							
						
						
									
										125
									
								
								src/wue.c
									
										
									
									
									
								
							|  | @ -352,6 +352,110 @@ out: | |||
| 	return r; | ||||
| } | ||||
| 
 | ||||
| /// <summary>
 | ||||
| /// Populate the img_report Window version from an install[.wim|.esd] XML index
 | ||||
| /// </summary>
 | ||||
| /// <param name="xml_file">The path of the extracted index XML.</param>
 | ||||
| /// <param name="index">The index of the occurrence to look for.</param>
 | ||||
| static void PopulateWindowsVersionFromXml(const char* xml_file, int index) | ||||
| { | ||||
| 	char* val; | ||||
| 
 | ||||
| 	val = get_token_data_file_indexed("MAJOR", xml_file, index); | ||||
| 	img_report.win_version.major = (uint16_t)safe_atoi(val); | ||||
| 	free(val); | ||||
| 	val = get_token_data_file_indexed("MINOR", xml_file, index); | ||||
| 	img_report.win_version.minor = (uint16_t)safe_atoi(val); | ||||
| 	free(val); | ||||
| 	val = get_token_data_file_indexed("BUILD", xml_file, index); | ||||
| 	img_report.win_version.build = (uint16_t)safe_atoi(val); | ||||
| 	free(val); | ||||
| 	val = get_token_data_file_indexed("SPBUILD", xml_file, index); | ||||
| 	img_report.win_version.revision = (uint16_t)safe_atoi(val); | ||||
| 	free(val); | ||||
| 	// Adjust versions so that we produce a more accurate report in the log
 | ||||
| 	// (and yeah, I know we won't properly report Server, but I don't care)
 | ||||
| 	if (img_report.win_version.major <= 5) { | ||||
| 		// Don't want to support XP or earlier
 | ||||
| 		img_report.win_version.major = 0; | ||||
| 		img_report.win_version.minor = 0; | ||||
| 	} else if (img_report.win_version.major == 6) { | ||||
| 		// Don't want to support Vista
 | ||||
| 		if (img_report.win_version.minor == 0) { | ||||
| 			img_report.win_version.major = 0; | ||||
| 		} else if (img_report.win_version.minor == 1) { | ||||
| 			img_report.win_version.major = 7; | ||||
| 			img_report.win_version.minor = 0; | ||||
| 		} else if (img_report.win_version.minor == 2) { | ||||
| 			img_report.win_version.major = 8; | ||||
| 			img_report.win_version.minor = 0; | ||||
| 		} else if (img_report.win_version.minor == 3) { | ||||
| 			img_report.win_version.major = 8; | ||||
| 			img_report.win_version.minor = 1; | ||||
| 		} else if (img_report.win_version.minor == 4) { | ||||
| 			img_report.win_version.major = 10; | ||||
| 			img_report.win_version.minor = 0; | ||||
| 		} | ||||
| 	} else if (img_report.win_version.major == 10) { | ||||
| 		if (img_report.win_version.build > 20000) | ||||
| 			img_report.win_version.major = 11; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| /// <summary>
 | ||||
| /// Populate the img_report Window version from an an install[.wim|.esd], mounting the
 | ||||
| /// ISO if needed. Requires Windows 8 or later.
 | ||||
| /// </summary>
 | ||||
| /// <param name="">(none)</param>
 | ||||
| /// <returns>TRUE on success, FALSE if we couldn't populate the version.</returns>
 | ||||
| BOOL PopulateWindowsVersion(void) | ||||
| { | ||||
| 	char *mounted_iso, mounted_image_path[128]; | ||||
| 	char xml_file[MAX_PATH] = ""; | ||||
| 
 | ||||
| 	img_report.win_version.major = 0; | ||||
| 	img_report.win_version.minor = 0; | ||||
| 	img_report.win_version.build = 0; | ||||
| 	img_report.win_version.revision = 0; | ||||
| 
 | ||||
| 	if ((nWindowsVersion < WINDOWS_8) || ((WimExtractCheck(TRUE) & 4) == 0)) | ||||
| 		return FALSE; | ||||
| 
 | ||||
| 	// If we're not using a straight install.wim, we need to mount the ISO to access it
 | ||||
| 	if (!img_report.is_windows_img) { | ||||
| 		mounted_iso = MountISO(image_path); | ||||
| 		if (mounted_iso == NULL) { | ||||
| 			uprintf("Could not mount Windows ISO for build number detection"); | ||||
| 			return FALSE; | ||||
| 		} | ||||
| 		static_sprintf(mounted_image_path, "%s%s", mounted_iso, &img_report.wininst_path[0][2]); | ||||
| 	} | ||||
| 
 | ||||
| 	// Now take a look at the XML file in install.wim to list our versions
 | ||||
| 	if ((GetTempFileNameU(temp_dir, APPLICATION_NAME, 0, xml_file) == 0) || (xml_file[0] == 0)) { | ||||
| 		// Last ditch effort to get a tmp file - just extract it to the current directory
 | ||||
| 		static_strcpy(xml_file, ".\\RufVXml.tmp"); | ||||
| 	} | ||||
| 	// GetTempFileName() may leave a file behind
 | ||||
| 	DeleteFileU(xml_file); | ||||
| 
 | ||||
| 	// Must use the Windows WIM API as 7z messes up the XML
 | ||||
| 	if (!WimExtractFile_API(img_report.is_windows_img ? image_path : mounted_image_path, | ||||
| 		0, "[1].xml", xml_file, TRUE)) { | ||||
| 		uprintf("Could not acquire WIM index"); | ||||
| 		goto out; | ||||
| 	} | ||||
| 
 | ||||
| 	PopulateWindowsVersionFromXml(xml_file, 1); | ||||
| 
 | ||||
| out: | ||||
| 	DeleteFileU(xml_file); | ||||
| 	if (!img_report.is_windows_img) | ||||
| 		UnMountISO(); | ||||
| 
 | ||||
| 	return (img_report.win_version.major != 0 && img_report.win_version.build != 0); | ||||
| } | ||||
| 
 | ||||
| /// <summary>
 | ||||
| /// Checks which versions of Windows are available in an install image
 | ||||
| /// to set our extraction index. Asks the user to select one if needed.
 | ||||
|  | @ -360,7 +464,7 @@ out: | |||
| /// <returns>-2 on user cancel, -1 on other error, >=0 on success.</returns>
 | ||||
| int SetWinToGoIndex(void) | ||||
| { | ||||
| 	char* mounted_iso, *val, mounted_image_path[128]; | ||||
| 	char* mounted_iso, mounted_image_path[128]; | ||||
| 	char xml_file[MAX_PATH] = ""; | ||||
| 	char* install_names[MAX_WININST]; | ||||
| 	StrArray version_name, version_index; | ||||
|  | @ -392,7 +496,7 @@ int SetWinToGoIndex(void) | |||
| 		mounted_iso = MountISO(image_path); | ||||
| 		if (mounted_iso == NULL) { | ||||
| 			uprintf("Could not mount ISO for Windows To Go selection"); | ||||
| 			return FALSE; | ||||
| 			return -1; | ||||
| 		} | ||||
| 		static_sprintf(mounted_image_path, "%s%s", mounted_iso, &img_report.wininst_path[wininst_index][2]); | ||||
| 	} | ||||
|  | @ -444,21 +548,8 @@ int SetWinToGoIndex(void) | |||
| 	else | ||||
| 		wintogo_index = atoi(version_index.String[i - 1]); | ||||
| 	if (i > 0) { | ||||
| 		// Get the version data from the XML index
 | ||||
| 		val = get_token_data_file_indexed("MAJOR", xml_file, i); | ||||
| 		img_report.win_version.major = (uint16_t)safe_atoi(val); | ||||
| 		free(val); | ||||
| 		val = get_token_data_file_indexed("MINOR", xml_file, i); | ||||
| 		img_report.win_version.minor = (uint16_t)safe_atoi(val); | ||||
| 		free(val); | ||||
| 		val = get_token_data_file_indexed("BUILD", xml_file, i); | ||||
| 		img_report.win_version.build = (uint16_t)safe_atoi(val); | ||||
| 		free(val); | ||||
| 		val = get_token_data_file_indexed("SPBUILD", xml_file, i); | ||||
| 		img_report.win_version.revision = (uint16_t)safe_atoi(val); | ||||
| 		free(val); | ||||
| 		if ((img_report.win_version.major == 10) && (img_report.win_version.build > 20000)) | ||||
| 			img_report.win_version.major = 11; | ||||
| 		// re-populate the version data from the selected XML index
 | ||||
| 		PopulateWindowsVersionFromXml(xml_file, i); | ||||
| 		// If we couldn't obtain the major and build, we have a problem
 | ||||
| 		if (img_report.win_version.major == 0 || img_report.win_version.build == 0) | ||||
| 			uprintf("Warning: Could not obtain version information from XML index (Nonstandard Windows image?)"); | ||||
|  |  | |||
|  | @ -30,3 +30,4 @@ BOOL ApplyWindowsCustomization(char drive_letter, int flags); | |||
| int SetWinToGoIndex(void); | ||||
| BOOL SetupWinPE(char drive_letter); | ||||
| BOOL SetupWinToGo(DWORD DriveIndex, const char* drive_name, BOOL use_esp); | ||||
| BOOL PopulateWindowsVersion(void); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue