diff --git a/.mingw/Makefile.am b/.mingw/Makefile.am
index c5ad8d7c21b..32c0b48b7b0 100644
--- a/.mingw/Makefile.am
+++ b/.mingw/Makefile.am
@@ -19,7 +19,7 @@ TARGET := $(word 1,$(subst -, ,$(TUPLE)))
DEF_SUFFIX := $(if $(TARGET:x86_64=),.def,.def64)
.PHONY: all
-all: dwmapi-delaylib.lib wintrust-delaylib.lib
+all: dwmapi-delaylib.lib virtdisk-delaylib.lib wintrust-delaylib.lib
%.def64: %.def
$(AM_V_SED) "s/@.*//" $< >$@
@@ -29,4 +29,3 @@ all: dwmapi-delaylib.lib wintrust-delaylib.lib
clean:
$(RM) -rf *.lib
-
\ No newline at end of file
diff --git a/.mingw/Makefile.in b/.mingw/Makefile.in
index 0af7e49cbfc..fbdc2ce66b2 100644
--- a/.mingw/Makefile.in
+++ b/.mingw/Makefile.in
@@ -367,7 +367,7 @@ uninstall-am:
.PHONY: all
-all: dwmapi-delaylib.lib wintrust-delaylib.lib
+all: dwmapi-delaylib.lib virtdisk-delaylib.lib wintrust-delaylib.lib
%.def64: %.def
$(AM_V_SED) "s/@.*//" $< >$@
diff --git a/.mingw/virtdisk.def b/.mingw/virtdisk.def
new file mode 100644
index 00000000000..5b727b9d439
--- /dev/null
+++ b/.mingw/virtdisk.def
@@ -0,0 +1,5 @@
+EXPORTS
+ AttachVirtualDisk@24
+ GetVirtualDiskPhysicalPath@12
+ DetachVirtualDisk@12
+ OpenVirtualDisk@24
diff --git a/.vs/rufus.vcxproj b/.vs/rufus.vcxproj
index d3af1c2e221..effde61ec3d 100644
--- a/.vs/rufus.vcxproj
+++ b/.vs/rufus.vcxproj
@@ -133,12 +133,12 @@
/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)
- advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;%(AdditionalDependencies)
+ advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;virtdisk.lib;%(AdditionalDependencies)
RequireAdministrator
true
Windows
MachineX86
- advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;%(DelayLoadDLLs)
+ advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;virtdisk.dll;%(DelayLoadDLLs)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
@@ -162,12 +162,12 @@
/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)
- 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)
+ advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;virtdisk.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)
RequireAdministrator
true
Windows
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\um\arm
- 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)
+ advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;virtdisk.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
@@ -193,12 +193,12 @@
/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)
- 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)
+ advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;virtdisk.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)
RequireAdministrator
true
Windows
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\arm64
- 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)
+ advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;virtdisk.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
@@ -229,12 +229,12 @@
/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)
- advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;%(AdditionalDependencies)
+ advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;virtdisk.lib;%(AdditionalDependencies)
RequireAdministrator
true
Windows
MachineX64
- advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;%(DelayLoadDLLs)
+ advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;virtdisk.dll;%(DelayLoadDLLs)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
@@ -260,13 +260,13 @@
true
- advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;%(AdditionalDependencies)
+ advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;virtdisk.lib;%(AdditionalDependencies)
RequireAdministrator
false
Windows
MachineX86
/BREPRO %(AdditionalOptions)
- advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;%(DelayLoadDLLs)
+ advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;virtdisk.dll;%(DelayLoadDLLs)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
@@ -292,13 +292,13 @@
true
- 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)
+ advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;virtdisk.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)
RequireAdministrator
false
Windows
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\um\arm
/BREPRO %(AdditionalOptions)
- 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)
+ advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;virtdisk.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
@@ -326,13 +326,13 @@
true
- 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)
+ advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;virtdisk.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)
RequireAdministrator
false
Windows
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\arm64
/BREPRO %(AdditionalOptions)
- 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)
+ advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;virtdisk.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
@@ -363,13 +363,13 @@
true
- advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;%(AdditionalDependencies)
+ advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;virtdisk.lib;%(AdditionalDependencies)
RequireAdministrator
false
Windows
MachineX64
/BREPRO %(AdditionalOptions)
- advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;%(DelayLoadDLLs)
+ advapi32.dll;comctl32.dll;comdlg32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;wintrust.dll;virtdisk.dll;%(DelayLoadDLLs)
_UNICODE;UNICODE;%(PreprocessorDefinitions)
diff --git a/src/Makefile.am b/src/Makefile.am
index 68f0c10eded..b04205e3ee0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -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 -lwintrust-delaylib
+VULNERABLE_LIBS = -ldwmapi-delaylib -lvirtdisk-delaylib -lwintrust-delaylib
noinst_PROGRAMS = rufus
diff --git a/src/Makefile.in b/src/Makefile.in
index 2465d1af9e5..493c4dbef88 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -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 -lwintrust-delaylib
+VULNERABLE_LIBS = -ldwmapi-delaylib -lvirtdisk-delaylib -lwintrust-delaylib
AM_V_WINDRES_0 = @echo " RC $@";$(WINDRES)
AM_V_WINDRES_1 = $(WINDRES)
AM_V_WINDRES_ = $(AM_V_WINDRES_$(AM_DEFAULT_VERBOSITY))
diff --git a/src/iso.c b/src/iso.c
index 3ff9b49ef2e..b667555b114 100644
--- a/src/iso.c
+++ b/src/iso.c
@@ -1698,14 +1698,6 @@ BOOL DumpFatDir(const char* path, int32_t cluster)
return ret;
}
-// VirtDisk API Prototypes - Only available for Windows 8 or later
-PF_TYPE_DECL(WINAPI, DWORD, OpenVirtualDisk, (PVIRTUAL_STORAGE_TYPE, PCWSTR,
- VIRTUAL_DISK_ACCESS_MASK, OPEN_VIRTUAL_DISK_FLAG, POPEN_VIRTUAL_DISK_PARAMETERS, PHANDLE));
-PF_TYPE_DECL(WINAPI, DWORD, AttachVirtualDisk, (HANDLE, PSECURITY_DESCRIPTOR,
- ATTACH_VIRTUAL_DISK_FLAG, ULONG, PATTACH_VIRTUAL_DISK_PARAMETERS, LPOVERLAPPED));
-PF_TYPE_DECL(WINAPI, DWORD, DetachVirtualDisk, (HANDLE, DETACH_VIRTUAL_DISK_FLAG, ULONG));
-PF_TYPE_DECL(WINAPI, DWORD, GetVirtualDiskPhysicalPath, (HANDLE, PULONG, PWSTR));
-
static char physical_path[128] = "";
static HANDLE mounted_handle = INVALID_HANDLE_VALUE;
@@ -1719,14 +1711,10 @@ char* MountISO(const char* path)
wconvert(path);
char* ret = NULL;
- PF_INIT_OR_OUT(OpenVirtualDisk, VirtDisk);
- PF_INIT_OR_OUT(AttachVirtualDisk, VirtDisk);
- PF_INIT_OR_OUT(GetVirtualDiskPhysicalPath, VirtDisk);
-
if ((mounted_handle != NULL) && (mounted_handle != INVALID_HANDLE_VALUE))
UnMountISO();
- r = pfOpenVirtualDisk(&vtype, wpath, VIRTUAL_DISK_ACCESS_READ | VIRTUAL_DISK_ACCESS_GET_INFO,
+ r = OpenVirtualDisk(&vtype, wpath, VIRTUAL_DISK_ACCESS_READ | VIRTUAL_DISK_ACCESS_GET_INFO,
OPEN_VIRTUAL_DISK_FLAG_NONE, NULL, &mounted_handle);
if (r != ERROR_SUCCESS) {
SetLastError(r);
@@ -1735,7 +1723,7 @@ char* MountISO(const char* path)
}
vparams.Version = ATTACH_VIRTUAL_DISK_VERSION_1;
- r = pfAttachVirtualDisk(mounted_handle, NULL, ATTACH_VIRTUAL_DISK_FLAG_READ_ONLY |
+ r = AttachVirtualDisk(mounted_handle, NULL, ATTACH_VIRTUAL_DISK_FLAG_READ_ONLY |
ATTACH_VIRTUAL_DISK_FLAG_NO_DRIVE_LETTER, 0, &vparams, NULL);
if (r != ERROR_SUCCESS) {
SetLastError(r);
@@ -1743,7 +1731,7 @@ char* MountISO(const char* path)
goto out;
}
- r = pfGetVirtualDiskPhysicalPath(mounted_handle, &size, wtmp);
+ r = GetVirtualDiskPhysicalPath(mounted_handle, &size, wtmp);
if (r != ERROR_SUCCESS) {
SetLastError(r);
uprintf("Could not obtain physical path for mounted ISO '%s': %s", path, WindowsErrorString());
@@ -1761,12 +1749,10 @@ char* MountISO(const char* path)
void UnMountISO(void)
{
- PF_INIT_OR_OUT(DetachVirtualDisk, VirtDisk);
-
if ((mounted_handle == NULL) || (mounted_handle == INVALID_HANDLE_VALUE))
goto out;
- pfDetachVirtualDisk(mounted_handle, DETACH_VIRTUAL_DISK_FLAG_NONE, 0);
+ DetachVirtualDisk(mounted_handle, DETACH_VIRTUAL_DISK_FLAG_NONE, 0);
safe_closehandle(mounted_handle);
out:
physical_path[0] = 0;
diff --git a/src/rufus.c b/src/rufus.c
index 3db818b5d4a..336cd1c9390 100755
--- a/src/rufus.c
+++ b/src/rufus.c
@@ -3337,7 +3337,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
char *tmp, *locale_name = NULL, **argv = NULL;
wchar_t **wenv, **wargv;
PF_TYPE_DECL(CDECL, int, __wgetmainargs, (int*, wchar_t***, wchar_t***, int, int*));
- PF_TYPE_DECL(WINAPI, BOOL, SetDefaultDllDirectories, (DWORD));
HANDLE mutex = NULL, hogmutex = NULL, hFile = NULL;
HWND hDlg = NULL;
HDC hDC;
@@ -3366,14 +3365,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
// 'somelib.dll;%(DelayLoadDLLs)' must be added to the 'Delay Loaded Dlls' option of
// the linker properties in Visual Studio (which means this won't work with MinGW).
// For all other DLLs, use SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32).
- // Finally, we need to perform the whole gymkhana below, where we can't call on
- // SetDefaultDllDirectories() directly, because Windows 7 doesn't have the API exposed.
- // Also, no, Coverity, we never need to care about freeing kernel32 as a library.
- // coverity[leaked_storage]
- pfSetDefaultDllDirectories = (SetDefaultDllDirectories_t)
- GetProcAddress(LoadLibraryW(L"kernel32.dll"), "SetDefaultDllDirectories");
- if (pfSetDefaultDllDirectories != NULL)
- pfSetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32);
+ SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32);
uprintf("*** " APPLICATION_NAME " init ***\n");
its_a_me_mario = GetUserNameA((char*)(uintptr_t)&u, &size) && (u == 7104878);
diff --git a/src/rufus.h b/src/rufus.h
index 78f966ecf90..cc260b3dac6 100644
--- a/src/rufus.h
+++ b/src/rufus.h
@@ -540,6 +540,7 @@ typedef struct {
DWORD Major;
DWORD Minor;
DWORD BuildNumber;
+ DWORD Ubr;
DWORD Edition;
USHORT Arch;
char VersionStr[128];
@@ -774,11 +775,6 @@ static __inline HMODULE GetLibraryHandle(char* szLibraryName) {
goto out;
}
h = LoadLibraryExW(wszLibraryName, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
- // Some Windows 7 platforms (most likely the ones missing KB2533623 per the
- // official LoadLibraryEx doc) can return ERROR_INVALID_PARAMETER when using
- // the Ex() version. If that's the case, fallback to using LoadLibraryW().
- if ((h == NULL) && (SCODE_CODE(GetLastError()) == ERROR_INVALID_PARAMETER))
- h = LoadLibraryW(wszLibraryName);
if (h != NULL)
OpenedLibrariesHandle[OpenedLibrariesHandleSize++] = h;
else
diff --git a/src/rufus.rc b/src/rufus.rc
index bb0d4f57f4c..a424cd0f1f9 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.0.2036"
+CAPTION "Rufus 4.0.2037"
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
BEGIN
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
@@ -392,8 +392,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 4,0,2036,0
- PRODUCTVERSION 4,0,2036,0
+ FILEVERSION 4,0,2037,0
+ PRODUCTVERSION 4,0,2037,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -411,13 +411,13 @@ BEGIN
VALUE "Comments", "https://rufus.ie"
VALUE "CompanyName", "Akeo Consulting"
VALUE "FileDescription", "Rufus"
- VALUE "FileVersion", "4.0.2036"
+ VALUE "FileVersion", "4.0.2037"
VALUE "InternalName", "Rufus"
VALUE "LegalCopyright", "© 2011-2023 Pete Batard (GPL v3)"
VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html"
VALUE "OriginalFilename", "rufus-4.0.exe"
VALUE "ProductName", "Rufus"
- VALUE "ProductVersion", "4.0.2036"
+ VALUE "ProductVersion", "4.0.2037"
END
END
BLOCK "VarFileInfo"
diff --git a/src/stdfn.c b/src/stdfn.c
index 5e38ee2bf11..0472791739a 100644
--- a/src/stdfn.c
+++ b/src/stdfn.c
@@ -441,17 +441,15 @@ void GetWindowsVersion(windows_version_t* windows_version)
windows_version->Edition = (int)dwProductType;
- // Add the build number (including UBR if available) for Windows 8.0 and later
+ // Add the build number (including UBR if available)
windows_version->BuildNumber = vi.dwBuildNumber;
- if (windows_version->Version >= WINDOWS_8) {
- int nUbr = ReadRegistryKey32(REGKEY_HKLM, "Software\\Microsoft\\Windows NT\\CurrentVersion\\UBR");
- vptr = &windows_version->VersionStr[safe_strlen(windows_version->VersionStr)];
- vlen = sizeof(windows_version->VersionStr) - safe_strlen(windows_version->VersionStr) - 1;
- if (nUbr > 0)
- safe_sprintf(vptr, vlen, " (Build %lu.%d)", windows_version->BuildNumber, nUbr);
- else
- safe_sprintf(vptr, vlen, " (Build %lu)", windows_version->BuildNumber);
- }
+ windows_version->Ubr = ReadRegistryKey32(REGKEY_HKLM, "Software\\Microsoft\\Windows NT\\CurrentVersion\\UBR");
+ vptr = &windows_version->VersionStr[safe_strlen(windows_version->VersionStr)];
+ vlen = sizeof(windows_version->VersionStr) - safe_strlen(windows_version->VersionStr) - 1;
+ if (windows_version->Ubr != 0)
+ safe_sprintf(vptr, vlen, " (Build %lu.%lu)", windows_version->BuildNumber, windows_version->Ubr);
+ else
+ safe_sprintf(vptr, vlen, " (Build %lu)", windows_version->BuildNumber);
}
/*
diff --git a/src/stdlg.c b/src/stdlg.c
index 443cdacb520..1bb4e090c1d 100644
--- a/src/stdlg.c
+++ b/src/stdlg.c
@@ -52,8 +52,7 @@ static char* szMessageText = NULL;
static char* szMessageTitle = NULL;
static char **szDialogItem;
static int nDialogItems;
-static HWND hBrowseEdit, hUpdatesDlg;
-static WNDPROC pOrgBrowseWndproc;
+static HWND hUpdatesDlg;
static const SETTEXTEX friggin_microsoft_unicode_amateurs = { ST_DEFAULT, CP_UTF8 };
static BOOL notification_is_question;
static const notification_info* notification_more_info;
@@ -84,160 +83,6 @@ void SetDialogFocus(HWND hDlg, HWND hCtrl)
SendMessage(hDlg, WM_NEXTDLGCTL, (WPARAM)hCtrl, TRUE);
}
-/*
- * We need a sub-callback to read the content of the edit box on exit and update
- * our path, else if what the user typed does match the selection, it is discarded.
- * Talk about a convoluted way of producing an intuitive folder selection dialog
- */
-INT CALLBACK BrowseDlgCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch(message) {
- case WM_DESTROY:
- GetWindowTextU(hBrowseEdit, szFolderPath, sizeof(szFolderPath));
- break;
- }
- return (INT)CallWindowProc(pOrgBrowseWndproc, hDlg, message, wParam, lParam);
-}
-
-/*
- * Main BrowseInfo callback to set the initial directory and populate the edit control
- */
-INT CALLBACK BrowseInfoCallback(HWND hDlg, UINT message, LPARAM lParam, LPARAM pData)
-{
- char dir[MAX_PATH];
- wchar_t* wpath;
- LPITEMIDLIST pidl;
-
- switch(message) {
- case BFFM_INITIALIZED:
- pOrgBrowseWndproc = (WNDPROC)SetWindowLongPtr(hDlg, GWLP_WNDPROC, (LONG_PTR)BrowseDlgCallback);
- // Windows hides the full path in the edit box by default, which is bull.
- // Get a handle to the edit control to fix that
- hBrowseEdit = FindWindowExA(hDlg, NULL, "Edit", NULL);
- SetWindowTextU(hBrowseEdit, szFolderPath);
- SetDialogFocus(hDlg, hBrowseEdit);
- // On Windows 7, MinGW only properly selects the specified folder when using a pidl
- wpath = utf8_to_wchar(szFolderPath);
- pidl = SHSimpleIDListFromPath(wpath);
- safe_free(wpath);
- // NB: see http://connect.microsoft.com/VisualStudio/feedback/details/518103/bffm-setselection-does-not-work-with-shbrowseforfolder-on-windows-7
- // for details as to why we send BFFM_SETSELECTION twice.
- SendMessageW(hDlg, BFFM_SETSELECTION, (WPARAM)FALSE, (LPARAM)pidl);
- Sleep(100);
- PostMessageW(hDlg, BFFM_SETSELECTION, (WPARAM)FALSE, (LPARAM)pidl);
- break;
- case BFFM_SELCHANGED:
- // Update the status
- if (SHGetPathFromIDListU((LPITEMIDLIST)lParam, dir)) {
- SendMessageLU(hDlg, BFFM_SETSTATUSTEXT, 0, dir);
- SetWindowTextU(hBrowseEdit, dir);
- }
- break;
- }
- return 0;
-}
-
-/*
- * Browse for a folder and update the folder edit box
- */
-void BrowseForFolder(void) {
-
- BROWSEINFOW bi;
- LPITEMIDLIST pidl;
- WCHAR *wpath;
- size_t i;
- HRESULT hr;
- IShellItem *psi = NULL;
- IShellItem *si_path = NULL; // Automatically freed
- IFileOpenDialog *pfod = NULL;
- WCHAR *fname;
- char* tmp_path = NULL;
-
- dialog_showing++;
- hr = CoCreateInstance(&CLSID_FileOpenDialog, NULL, CLSCTX_INPROC,
- &IID_IFileOpenDialog, (LPVOID)&pfod);
- if (FAILED(hr) || pfod == NULL) {
- uprintf("CoCreateInstance for FileOpenDialog failed: error %X\n", hr);
- if (pfod != NULL) {
- IFileOpenDialog_Release(pfod);
- pfod = NULL; // Just in case
- }
- goto fallback;
- }
- hr = IFileOpenDialog_SetOptions(pfod, FOS_PICKFOLDERS);
- if (FAILED(hr)) {
- uprintf("Failed to set folder option for FileOpenDialog: error %X\n", hr);
- goto fallback;
- }
- // Set the initial folder (if the path is invalid, will simply use last)
- wpath = utf8_to_wchar(szFolderPath);
- // The new IFileOpenDialog makes us split the path
- fname = NULL;
- if ((wpath != NULL) && (wcslen(wpath) >= 1)) {
- for (i = wcslen(wpath) - 1; i != 0; i--) {
- if (wpath[i] == L'\\') {
- wpath[i] = 0;
- fname = &wpath[i + 1];
- break;
- }
- }
- }
-
- hr = SHCreateItemFromParsingName(wpath, NULL, &IID_IShellItem, (LPVOID)&si_path);
- if (SUCCEEDED(hr) && pfod != NULL) {
- if (wpath != NULL) {
- IFileOpenDialog_SetFolder(pfod, si_path);
- }
- if (fname != NULL) {
- IFileOpenDialog_SetFileName(pfod, fname);
- }
- }
- safe_free(wpath);
-
- hr = IFileOpenDialog_Show(pfod, hMainDialog);
- if (SUCCEEDED(hr) && pfod != NULL) {
- hr = IFileOpenDialog_GetResult(pfod, &psi);
- if (SUCCEEDED(hr)) {
- IShellItem_GetDisplayName(psi, SIGDN_FILESYSPATH, &wpath);
- tmp_path = wchar_to_utf8(wpath);
- CoTaskMemFree(wpath);
- if (tmp_path == NULL) {
- uprintf("Could not convert path\n");
- } else {
- static_strcpy(szFolderPath, tmp_path);
- safe_free(tmp_path);
- }
- } else {
- uprintf("Failed to set folder option for FileOpenDialog: error %X\n", hr);
- }
- } else if ((hr & 0xFFFF) != ERROR_CANCELLED) {
- // If it's not a user cancel, assume the dialog didn't show and fallback
- uprintf("Could not show FileOpenDialog: error %X\n", hr);
- goto fallback;
- }
- IFileOpenDialog_Release(pfod);
- dialog_showing--;
- return;
-fallback:
- if (pfod != NULL) {
- IFileOpenDialog_Release(pfod);
- }
-
- memset(&bi, 0, sizeof(BROWSEINFOW));
- bi.hwndOwner = hMainDialog;
- bi.lpszTitle = utf8_to_wchar(lmprintf(MSG_106));
- bi.lpfn = BrowseInfoCallback;
- // BIF_NONEWFOLDERBUTTON = 0x00000200 is unknown on MinGW
- bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS |
- BIF_DONTGOBELOWDOMAIN | BIF_EDITBOX | 0x00000200;
- pidl = SHBrowseForFolderW(&bi);
- if (pidl != NULL) {
- CoTaskMemFree(pidl);
- }
- safe_free(bi.lpszTitle);
- dialog_showing--;
-}
-
/*
* Return the UTF8 path of a file selected through a load or save dialog
* All string parameters are UTF-8
@@ -1626,7 +1471,6 @@ void SetFidoCheck(void)
// - Powershell being installed
// - Rufus running in AppStore mode or update check being enabled
// - URL for the script being reachable
- // - Windows version being Windows 8.0 or later
if ((ReadRegistryKey32(REGKEY_HKLM, "Software\\Microsoft\\PowerShell\\1\\Install") <= 0) &&
(ReadRegistryKey32(REGKEY_HKLM, "Software\\Microsoft\\PowerShell\\3\\Install") <= 0)) {
ubprintf("Notice: The ISO download feature has been deactivated because "
@@ -1640,12 +1484,6 @@ void SetFidoCheck(void)
return;
}
- if (WindowsVersion.Version < WINDOWS_8) {
- ubprintf("Notice: The ISO download feature has been deactivated because "
- "your version of Windows is too old.");
- return;
- }
-
CreateThread(NULL, 0, CheckForFidoThread, NULL, 0, NULL);
}
diff --git a/src/ui.c b/src/ui.c
index 103adf13cdd..09d158ceac2 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -1053,7 +1053,7 @@ void CreateAdditionalControls(HWND hDlg)
hDll = GetLibraryHandle("ComDlg32");
hIconDown = (HICON)LoadImage(hDll, MAKEINTRESOURCE(577), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
hIconUp = (HICON)LoadImage(hDll, MAKEINTRESOURCE(578), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
- // Fallback to using Shell32 if we can't locate the icons we want in ComDlg32
+ // Fallback to using Shell32 if we can't locate the icons we want in ComDlg32 (Windows 8)
hDll = GetLibraryHandle("Shell32");
if (hIconUp == NULL)
hIconUp = (HICON)LoadImage(hDll, MAKEINTRESOURCE(16749), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
@@ -1082,9 +1082,6 @@ void CreateAdditionalControls(HWND hDlg)
GetWindowRect(GetDlgItem(hDlg, IDC_ADVANCED_DRIVE_PROPERTIES), &rc);
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
SendMessage(hAdvancedDeviceToolbar, TB_GETIDEALSIZE, (WPARAM)FALSE, (LPARAM)&sz);
- // Yeah, so, like, TB_GETIDEALSIZE totally super doesn't work on Windows 7, for low zoom factor and when compiled with MSVC...
- if (sz.cx < 16)
- sz.cx = fw;
SetWindowPos(hAdvancedDeviceToolbar, hTargetSystem, rc.left + toolbar_dx, rc.top, sz.cx, rc.bottom - rc.top, 0);
SetAccessibleName(hAdvancedDeviceToolbar, lmprintf(MSG_119));
@@ -1104,8 +1101,6 @@ void CreateAdditionalControls(HWND hDlg)
GetWindowRect(GetDlgItem(hDlg, IDC_ADVANCED_FORMAT_OPTIONS), &rc);
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
SendMessage(hAdvancedFormatToolbar, TB_GETIDEALSIZE, (WPARAM)FALSE, (LPARAM)&sz);
- if (sz.cx < 16)
- sz.cx = fw;
SetWindowPos(hAdvancedFormatToolbar, hClusterSize, rc.left + toolbar_dx, rc.top, sz.cx, rc.bottom - rc.top, 0);
SetAccessibleName(hAdvancedFormatToolbar, lmprintf(MSG_120));