From 98a42a235f67f6e535b6ab07c23bd4eb5f8ba770 Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Sat, 5 Oct 2024 20:00:40 +0100 Subject: [PATCH] [wue] add setup wrapper project for Windows 11 24H2 in-place upgrades --- .github/workflows/setup.yml | 52 ++++++ res/icons/license.txt | 5 + res/icons/setup.ico | Bin 0 -> 31354 bytes res/icons/setup.svg | 11 ++ res/setup/.editorconfig | 9 ++ res/setup/readme.txt | 29 ++++ res/setup/resource.h | 16 ++ res/setup/setup.c | 125 +++++++++++++++ res/setup/setup.rc | 116 ++++++++++++++ res/setup/setup.sln | 37 +++++ res/setup/setup.vcxproj | 272 ++++++++++++++++++++++++++++++++ res/setup/setup.vcxproj.filters | 27 ++++ src/rufus.rc | 12 +- 13 files changed, 705 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/setup.yml create mode 100644 res/icons/setup.ico create mode 100644 res/icons/setup.svg create mode 100644 res/setup/.editorconfig create mode 100644 res/setup/readme.txt create mode 100644 res/setup/resource.h create mode 100644 res/setup/setup.c create mode 100644 res/setup/setup.rc create mode 100644 res/setup/setup.sln create mode 100644 res/setup/setup.vcxproj create mode 100644 res/setup/setup.vcxproj.filters diff --git a/.github/workflows/setup.yml b/.github/workflows/setup.yml new file mode 100644 index 00000000000..98c62dc3d70 --- /dev/null +++ b/.github/workflows/setup.yml @@ -0,0 +1,52 @@ +name: setup +run-name: Windows setup wrapper build + +on: + workflow_dispatch: + branches: [ master ] + +env: + SOLUTION_FILE_PATH: ./res/setup/setup.sln + BUILD_CONFIGURATION: Release + +jobs: + VS2022-Build: + runs-on: windows-latest + + strategy: + matrix: + TARGET_PLATFORM: [x64, arm64] + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Add MSBuild to PATH + uses: microsoft/setup-msbuild@v2 + with: + msbuild-architecture: x64 + + - name: Build + shell: cmd + run: | + msbuild ${{ env.SOLUTION_FILE_PATH }} /m /p:Configuration=${{ env.BUILD_CONFIGURATION }},Platform=${{ matrix.TARGET_PLATFORM }} + move .\res\setup\${{ matrix.TARGET_PLATFORM }}\Release\setup.exe .\setup_${{ matrix.TARGET_PLATFORM }}.exe + + - name: Display SHA-256 + run: sha256sum ./setup_${{ matrix.TARGET_PLATFORM }}.exe + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.TARGET_PLATFORM }} + path: ./*.exe + + Extra-Step-To-Merge-Artifacts-Thanks-To-Upload-Artifact-v4-Breaking-Backwards-Compatibility: + runs-on: windows-latest + needs: VS2022-Build + steps: + - name: Merge Artifacts + uses: actions/upload-artifact/merge@v4 + with: + name: setup + delete-merged: true diff --git a/res/icons/license.txt b/res/icons/license.txt index 4d78ab299ab..cd9f039c16b 100644 --- a/res/icons/license.txt +++ b/res/icons/license.txt @@ -8,6 +8,11 @@ o hash-*.png, info-*.png, lang-*.png, log-*.png, save-*.png, settings-*.png CC BY-ND 4.0 when used as native resolution bitmaps, Commercial License otherwise See https://www.axialis.com/icongenerator/iconset-license.html#free +o setup.ico + Base SVG from https://tablericons.com/ + No attribution required. + With arrow overlay from Axialis Icon Set. + NB: To be on the safe side with regards to icon use and redistribution, we did purchase a Commercial License for the Axialis icons. If you are planning to use these icons outside of this project, you may diff --git a/res/icons/setup.ico b/res/icons/setup.ico new file mode 100644 index 0000000000000000000000000000000000000000..fcfba3ec3259ddabc4e69d216f9558cf7536940a GIT binary patch literal 31354 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 ARR910 literal 0 HcmV?d00001 diff --git a/res/icons/setup.svg b/res/icons/setup.svg new file mode 100644 index 00000000000..0d500c4f787 --- /dev/null +++ b/res/icons/setup.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/res/setup/.editorconfig b/res/setup/.editorconfig new file mode 100644 index 00000000000..12383cacede --- /dev/null +++ b/res/setup/.editorconfig @@ -0,0 +1,9 @@ +# indicate this is the root of the project +root = true + +[*] +indent_style = tab +indent_size = 4 +trim_trailing_whitespace = true +insert_final_newline = true +charset = utf-8 diff --git a/res/setup/readme.txt b/res/setup/readme.txt new file mode 100644 index 00000000000..74622688f51 --- /dev/null +++ b/res/setup/readme.txt @@ -0,0 +1,29 @@ +Rufus: The Reliable USB Formatting Utility - Windows 11 setup.exe wrapper + +# Description + +This small executable aims at solving the issue of Windows 11 24H2 having made the +bypass requirements for in-place upgrades more difficult to enact. + +Basically, per https://github.com/pbatard/rufus/issues/2568#issuecomment-2387934171, +and if the user chose to apply the hardware requirement bypasses in Rufus, you want +to apply a set of registry key creation and deletion *before* setup.exe is run. + +While we could obviously provide a simple batch file to accomplish this, the fact +that the registry commands require elevation, combined with expectations of just +being able double click setup.exe to upgrade makes us want to accomplish this in +a more user-friendly manner. + +Our solution then is to have Rufus rename the original 'setup.exe' to 'setup.dll' +insert a small 'setup.exe' that'll perform elevation, add the registry key, and +launch the original setup, which is exactly what this project does. + +Now, obviously, the fact that we "inject" a setup executable may leave people +uncomfortable about the possibility that we might use this as a malware vector, +which is also why we make sure that the one we sign and embed in Rufus does get +built using GitHub Actions and can be validated to not have been tampered through +SHA-256 validation (Since we produce SHA-256 hashes during the build process per: +https://github.com/pbatard/rufus/blob/master/.github/workflows/setup.yml). + +Also note that, since these are the only platforms Windows 11 supports, we only +build for x64 and ARM64. diff --git a/res/setup/resource.h b/res/setup/resource.h new file mode 100644 index 00000000000..75aac6a490a --- /dev/null +++ b/res/setup/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by setup.rc +// +#define IDI_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/res/setup/setup.c b/res/setup/setup.c new file mode 100644 index 00000000000..1ad736b581c --- /dev/null +++ b/res/setup/setup.c @@ -0,0 +1,125 @@ +/* + * Setup - Wrapper around Microsoft's setup.exe that adds registry + * bypasses for in-place Windows 11 upgrade. + * + * Copyright © 2024 Pete Batard + * + * 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#define WIN32_LEAN_AND_MEAN +#include +#include +#include + +static BOOL RegDeleteNodeRecurse(HKEY hKeyRoot, CHAR* lpSubKey) +{ + CHAR* lpEnd; + LONG lResult; + DWORD dwSize; + CHAR szName[MAX_PATH]; + HKEY hKey; + FILETIME ftWrite; + + // First, see if we can delete the key without having to recurse. + if (RegDeleteKeyA(hKeyRoot, lpSubKey) == ERROR_SUCCESS) + return TRUE; + + lResult = RegOpenKeyExA(hKeyRoot, lpSubKey, 0, KEY_READ, &hKey); + if (lResult != ERROR_SUCCESS) + return (lResult == ERROR_FILE_NOT_FOUND); + + // Check for an ending slash and add one if it is missing. + lpEnd = lpSubKey + strlen(lpSubKey); + if (*(lpEnd - 1) != '\\') { + *lpEnd++ = '\\'; + *lpEnd = '\0'; + } + + // Enumerate the keys + dwSize = MAX_PATH; + if (RegEnumKeyExA(hKey, 0, szName, &dwSize, NULL, NULL, NULL, &ftWrite) == ERROR_SUCCESS) { + do { + *lpEnd = '\0'; + strcat_s(lpSubKey, MAX_PATH, szName); + if (!RegDeleteNodeRecurse(hKeyRoot, lpSubKey)) + break; + dwSize = MAX_PATH; + lResult = RegEnumKeyExA(hKey, 0, szName, &dwSize, NULL, NULL, NULL, &ftWrite); + } while (lResult == ERROR_SUCCESS); + } + + *--lpEnd = '\0'; + RegCloseKey(hKey); + + // Try again to delete the key. + return (RegDeleteKeyA(hKeyRoot, lpSubKey) == ERROR_SUCCESS); +} + +static BOOL RegDeleteNode(HKEY hKeyRoot, CHAR* lpSubKey) +{ + CHAR szDelKey[MAX_PATH]; + + strcpy_s(szDelKey, MAX_PATH, lpSubKey); + return RegDeleteNodeRecurse(hKeyRoot, szDelKey); +} + +static BOOL RegWriteKey(HKEY hKeyRoot, CHAR* lpKeyParent, CHAR* lpKeyName, DWORD dwType, LPBYTE lpData, DWORD dwDataSize) +{ + BOOL r = FALSE; + HKEY hRoot = NULL, hApp = NULL; + DWORD dwDisp; + HKEY hKey; + + if (RegCreateKeyExA(hKeyRoot, lpKeyParent, 0, NULL, 0, KEY_SET_VALUE | KEY_QUERY_VALUE, NULL, &hKey, &dwDisp) != ERROR_SUCCESS) + return FALSE; + + r = (RegSetValueExA(hKey, lpKeyName, 0, dwType, lpData, dwDataSize) == ERROR_SUCCESS); + RegCloseKey(hKey); + + return r; +} + +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) +{ + CHAR lpBypasses[] = "SQ_SecureBootCapable=TRUE\0SQ_SecureBootEnabled=TRUE\0SQ_TpmVersion=2\0SQ_RamMB=8192\0"; + DWORD dwUpgrade = 1, dwAttrib; + STARTUPINFOA si = { 0 }; + PROCESS_INFORMATION pi = { 0 }; + SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; + + // Make sure we have 'setup.dll' in the same directory + dwAttrib = GetFileAttributesA("setup.dll"); + if (dwAttrib == INVALID_FILE_ATTRIBUTES || dwAttrib & FILE_ATTRIBUTE_DIRECTORY) + MessageBoxA(NULL, "ERROR: 'setup.dll' was not found", "Windows setup error", MB_OK | MB_ICONWARNING); + + // Apply the registry bypasses to enable Windows 11 24H2 in-place upgrade + RegDeleteNode(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\CompatMarkers"); + RegDeleteNode(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Shared"); + RegDeleteNode(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\TargetVersionUpgradeExperienceIndicators"); + RegWriteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\HwReqChk", + "HwReqChkVars", REG_MULTI_SZ, lpBypasses, sizeof(lpBypasses)); + RegWriteKey(HKEY_LOCAL_MACHINE, "SYSTEM\\Setup\\MoSetup", "AllowUpgradesWithUnsupportedTPMOrCPU", + REG_DWORD, (LPBYTE)&dwUpgrade, sizeof(dwUpgrade)); + + // Launch the original 'setup.exe' (that was renamed to 'setup.dll') + si.cb = sizeof(si); + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_SHOWNORMAL; + CreateProcessA("setup.dll", NULL, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + + return GetLastError(); +} diff --git a/res/setup/setup.rc b/res/setup/setup.rc new file mode 100644 index 00000000000..0be07642278 --- /dev/null +++ b/res/setup/setup.rc @@ -0,0 +1,116 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#ifndef _USING_V110_SDK71_ +#define _USING_V110_SDK71_ +#endif +#include +#ifndef IDC_STATIC +#define IDC_STATIC -1 +#endif + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (Neutral) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1252) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON ICON "../icons/setup.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", "Akeo Consulting" + VALUE "FileDescription", "Windows Setup Wrapper" + VALUE "FileVersion", "1.0" + VALUE "InternalName", "Setup" + VALUE "LegalCopyright", "© 2024 Pete Batard (GPL v3)" + VALUE "LegalTrademarks", "https://rufus.ie/setup" + VALUE "OriginalFilename", "setup.exe" + VALUE "ProductName", "Setup" + VALUE "ProductVersion", "1.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END + +#endif // English (Neutral) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/res/setup/setup.sln b/res/setup/setup.sln new file mode 100644 index 00000000000..dc034893b6e --- /dev/null +++ b/res/setup/setup.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29926.136 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "setup", "setup.vcxproj", "{6C2BED99-5A0A-42A2-AEBE-66717FA92232}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|arm64 = Debug|arm64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|arm64 = Release|arm64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6C2BED99-5A0A-42A2-AEBE-66717FA92232}.Debug|arm64.ActiveCfg = Debug|ARM64 + {6C2BED99-5A0A-42A2-AEBE-66717FA92232}.Debug|arm64.Build.0 = Debug|ARM64 + {6C2BED99-5A0A-42A2-AEBE-66717FA92232}.Debug|x64.ActiveCfg = Debug|x64 + {6C2BED99-5A0A-42A2-AEBE-66717FA92232}.Debug|x64.Build.0 = Debug|x64 + {6C2BED99-5A0A-42A2-AEBE-66717FA92232}.Debug|x86.ActiveCfg = Debug|Win32 + {6C2BED99-5A0A-42A2-AEBE-66717FA92232}.Debug|x86.Build.0 = Debug|Win32 + {6C2BED99-5A0A-42A2-AEBE-66717FA92232}.Release|arm64.ActiveCfg = Release|ARM64 + {6C2BED99-5A0A-42A2-AEBE-66717FA92232}.Release|arm64.Build.0 = Release|ARM64 + {6C2BED99-5A0A-42A2-AEBE-66717FA92232}.Release|x64.ActiveCfg = Release|x64 + {6C2BED99-5A0A-42A2-AEBE-66717FA92232}.Release|x64.Build.0 = Release|x64 + {6C2BED99-5A0A-42A2-AEBE-66717FA92232}.Release|x86.ActiveCfg = Release|Win32 + {6C2BED99-5A0A-42A2-AEBE-66717FA92232}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {7994FC0C-9D7C-4AD7-855B-C3525FD8709A} + EndGlobalSection +EndGlobal diff --git a/res/setup/setup.vcxproj b/res/setup/setup.vcxproj new file mode 100644 index 00000000000..b4043bc7a0e --- /dev/null +++ b/res/setup/setup.vcxproj @@ -0,0 +1,272 @@ + + + + + Debug + ARM64 + + + Debug + Win32 + + + Release + ARM64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {6C2BED99-5A0A-42A2-AEBE-66717FA92232} + Win32Proj + baseconsole + + + + Application + true + Unicode + v143 + + + Application + false + true + Unicode + v143 + + + Application + true + Unicode + v143 + + + Application + true + Unicode + v143 + + + Application + false + true + Unicode + v143 + + + Application + false + true + Unicode + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)arm64\$(Configuration)\ + $(SolutionDir)arm64\$(Configuration)\$(ProjectName)\ + $(SolutionDir)arm64\$(Configuration)\ + $(SolutionDir)arm64\$(Configuration)\$(ProjectName)\ + $(SolutionDir)x86\$(Configuration)\ + $(SolutionDir)x86\$(Configuration)\$(ProjectName)\ + $(SolutionDir)x86\$(Configuration)\ + $(SolutionDir)x86\$(Configuration)\$(ProjectName)\ + $(SolutionDir)x64\$(Configuration)\ + $(SolutionDir)x64\$(Configuration)\$(ProjectName)\ + $(SolutionDir)x64\$(Configuration)\ + $(SolutionDir)x64\$(Configuration)\$(ProjectName)\ + false + false + false + false + false + false + + + true + + + true + + + true + + + false + + + false + + + false + + + + /DAPP_VERSION=$(AppVersion) %(AdditionalOptions) + + + + + /DAPP_FILE_VERSION=$(AppFileVersion) %(AdditionalOptions) + + + + + /DAPP_COMMENTS="$(AppComments)" %(AdditionalOptions) + + + + + Level3 + WIN32;_DEBUG;%(PreprocessorDefinitions) + false + CompileAsC + MultiThreadedDebug + + + + + Windows + true + RequireAdministrator + + + + + Level3 + _DEBUG;%(PreprocessorDefinitions) + false + CompileAsC + MultiThreadedDebug + + + + + Windows + true + RequireAdministrator + + + + + Level3 + _DEBUG;%(PreprocessorDefinitions) + false + CompileAsC + MultiThreadedDebug + + + + + Windows + true + RequireAdministrator + + + + + Level3 + WIN32;NDEBUG;%(PreprocessorDefinitions) + false + CompileAsC + MultiThreaded + + + MinSpace + Size + + + Windows + true + true + true + RequireAdministrator + + + + + Level3 + NDEBUG;%(PreprocessorDefinitions) + false + CompileAsC + MultiThreaded + + + MinSpace + Size + + + Windows + true + true + true + RequireAdministrator + + + + + Level3 + NDEBUG;%(PreprocessorDefinitions) + false + CompileAsC + MultiThreaded + + + MinSpace + Size + + + Windows + true + true + true + RequireAdministrator + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/setup/setup.vcxproj.filters b/res/setup/setup.vcxproj.filters new file mode 100644 index 00000000000..31d4927c846 --- /dev/null +++ b/res/setup/setup.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {e9f75410-9e5d-4ea8-b75a-0c45bb23e331} + + + + + Source Files + + + + + Resources + + + + + Source Files + + + \ No newline at end of file diff --git a/src/rufus.rc b/src/rufus.rc index ffba8ce100a..9c702576631 100644 --- a/src/rufus.rc +++ b/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 4.6.2198" +CAPTION "Rufus 4.6.2199" FONT 9, "Segoe UI Symbol", 400, 0, 0x0 BEGIN LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP @@ -397,8 +397,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,6,2198,0 - PRODUCTVERSION 4,6,2198,0 + FILEVERSION 4,6,2199,0 + PRODUCTVERSION 4,6,2199,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -416,13 +416,13 @@ BEGIN VALUE "Comments", "https://rufus.ie" VALUE "CompanyName", "Akeo Consulting" VALUE "FileDescription", "Rufus" - VALUE "FileVersion", "4.6.2198" + VALUE "FileVersion", "4.6.2199" VALUE "InternalName", "Rufus" - VALUE "LegalCopyright", "� 2011-2024 Pete Batard (GPL v3)" + VALUE "LegalCopyright", "© 2011-2024 Pete Batard (GPL v3)" VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" VALUE "OriginalFilename", "rufus-4.6.exe" VALUE "ProductName", "Rufus" - VALUE "ProductVersion", "4.6.2198" + VALUE "ProductVersion", "4.6.2199" END END BLOCK "VarFileInfo"