https://bugs.winehq.org/show_bug.cgi?id=32588
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|Macrium Reflect: Crash at |Macrium Reflect v5.1 |the end of installation |installer crashes with | |WinVer set to 'Windows XP' URL|http://updates.macrium.com/ |https://web.archive.org/web |reflect/v5.0/v5.1.5496/refl |/20191215153316/http://upda |ect_setup_free.exe |tes.macrium.com/reflect/v5. | |0/v5.1.5496/reflect_setup_f | |ree.exe
--- Comment #7 from Anastasius Focht focht@gmx.net --- Hello folks,
confirming. The installer takes a different (legacy) code path on Windows < Vista, hence the crash.
--- snip --- $ WINEDEBUG=+seh,+relay,+msi,+server wine ./reflect_setup_free.exe >>log.txt 2>&1 ... 002b:trace:msi:HANDLE_CustomType1 Calling function L"GetPaths" from L"C:\users\focht\Temp\msi338f.tmp" ... 002b:Call KERNEL32.CreateProcessW(0063f1d2 L"C:\windows\system32\msiexec.exe",0063f3da L"C:\windows\system32\msiexec.exe -Embedding 42",00000000,00000000,00000000,00000000,00000000,00000000,0063f18c,0063f14c) ret=00670431 ... 002b:Ret KERNEL32.CreateProcessW() retval=00000001 ret=00670431 ... 002b:trace:msi:HANDLE_CustomType1 Calling function L"UninstallBootMenu" from L"C:\users\focht\Temp\msi338f.tmp" ... 002b:Call KERNEL32.CreateThread(00000000,00000000,00670630,00e41860,00000000,00000000) ret=006715ff ... 002b:Ret KERNEL32.CreateThread() retval=000000f8 ret=006715ff ... 004a: init_thread( unix_pid=13371, unix_tid=13400, debug_level=1, teb=7ffd0000, entry=00401870, reply_fd=14, wait_fd=16, cpu=x86 ) 004a: init_thread() = 0 { pid=002d, tid=004a, server_start=1d5b35db9de5dd6 (-24.3958530), info_size=0, version=595, all_cpus=00000001, suspend=0 } ... 004a:Ret PE DLL (proc=0x10059a78,module=0x10000000 L"msi338f.tmp",reason=PROCESS_ATTACH,res=(nil)) retval=1 ... 004a:Call KERNEL32.GetVersionExW(011df674) ret=1000681b 004a:Ret KERNEL32.GetVersionExW() retval=00000001 ret=1000681b ... 004a:Call KERNEL32.CreateProcessW(00000000,011f1330 L""c:\boot\macrium\boot\bcdedit.exe" /enum all",00000000,00000000,00000001,04000000,00000000,00000000,011df7cc,011df7bc) ret=1000349b ... 004a:Call ntdll.RtlGetExePath(00da0e60 L"c:\boot\macrium\boot\bcdedit.exe",011df19c) ret=7127e0dd 004a:Ret ntdll.RtlGetExePath() retval=00000000 ret=7127e0dd ... 004a:Call ntdll.RtlDoesFileExists_U(00da0e60 L"c:\boot\macrium\boot\bcdedit.exe") ret=7125638c 004a:Ret ntdll.RtlDoesFileExists_U() retval=00000000 ret=7125638c ... 004a:Ret KERNEL32.CreateProcessW() retval=00000000 ret=1000349b ... 004a:Call KERNEL32.GetLastError() ret=1006042a 004a:Ret KERNEL32.GetLastError() retval=00000002 ret=1006042a ... 004a:Call KERNEL32.IsDebuggerPresent() ret=100560c5 004a:Ret KERNEL32.IsDebuggerPresent() retval=00000000 ret=100560c5 004a:Call KERNEL32.SetUnhandledExceptionFilter(00000000) ret=100560cf 004a:Ret KERNEL32.SetUnhandledExceptionFilter() retval=00407400 ret=100560cf 004a:Call KERNEL32.UnhandledExceptionFilter(011dd220) ret=100560d9 ... wine: Unhandled exception 0xc000000d in thread 4a at address 10056141 (thread 004a), starting debugger... --- snip ---
I was first a bit fooled by the failing call to 'bcdedit' tool - one of the last Win32 API calls before EXCEPTION_INVALID_CRT_PARAMETER exception.
https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/bcdedi...
--- quote --- BCDEdit is included in the %WINDIR%\System32 folder. --- quote ---
https://neosmart.net/wiki/bcdedit/
--- quote -- BCDEdit on Windows XP
Windows XP doesn’t have a bcdedit.exe utility available, but the bootcfg.exe utility instead. Bootcfg.exe is part of the Windows XP’s Recovery Console.
To read about bootcfg, follow our guide: Bootcfg – Guide for Windows XP. --- quote --
Turns out it's not the red herring here. The failure is due to missing initialization of internal installer data. Earlier in the installer process (same custom action 'UninstallBootMenu'), various information is gathered from querying the disk(s) for device descriptor properties and other data, such as partition layout/Windows boot manager information.
--- snip --- ... 004a:Call KERNEL32.CreateFileW(011de3f8 L"\\.\PHYSICALDRIVE0",80000000,00000003,00000000,00000003,00000000,00000000) ret=100104ad ... 004a:Ret KERNEL32.CreateFileW() retval=000000f8 ret=100104ad ... 004a:Call KERNEL32.DeviceIoControl(000000f8,000700a0,00000000,00000000,011d0230,00000028,011d01f4,00000000) ret=1001050d ... 0025:fixme:mountmgr:harddisk_ioctl The DISK_PARTITION_INFO and DISK_DETECTION_INFO structures will not be filled ... 004a: get_async_result() = 0 { size=40, out_data={10,27,00,00,00,00,00,00,0c,00,00,00,ff,00,00,00,3f,00,00,00,00,02,00,00,00,20,a6,26,13,00,00,00,00,7b,ce,7b,27,79,ce,7b} } ... 004a:Ret KERNEL32.DeviceIoControl() retval=00000001 ret=1001050d ... 004a:Call KERNEL32.DeviceIoControl(000000f8,002d1400,011d025c,0000000c,011d0268,00002000,011d01ec,00000000) ret=1001059c ... 0025:fixme:mountmgr:query_property Faking StorageDeviceProperty data ... 004a: get_async_result() = 0 { size=40, out_data={28,00,00,00,28,00,00,00,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00} } ... 004a:Ret KERNEL32.DeviceIoControl() retval=00000001 ret=1001059c ... 004a:Call KERNEL32.CloseHandle(000000f8) ret=10010734 004a:Ret KERNEL32.CloseHandle() retval=00000001 ret=10010734 ... 004a:Call KERNEL32.CreateFileW(011de3f8 L"\\.\PHYSICALDRIVE0",80000000,00000003,011d2144,00000003,00000080,00000000) ret=10058da9 ... 004a:Ret KERNEL32.CreateFileW() retval=000000f8 ret=10058da9 ... 004a:Call KERNEL32.GetFileType(000000f8) ret=10058e27 ... 004a:Call ntdll.NtQueryVolumeInformationFile(000000f8,011d20e8,011d20e0,00000008,00000004) ret=71257c7e 004a: get_handle_fd( handle=00f8 ) 004a: get_handle_fd() = BAD_DEVICE_TYPE { type=0, cacheable=1, access=00000000, options=00000000 } 004a: get_volume_info( handle=00f8, info_class=00000004 ) 004a: get_volume_info() = OBJECT_TYPE_MISMATCH { data={} } 0025: set_irp_result( handle=0148, status=c0000010, size=0, data={} ) 004a:Ret ntdll.NtQueryVolumeInformationFile() retval=c0000024 ret=71257c7e 0025: set_irp_result() = 0 004a:Call ntdll.RtlNtStatusToDosError(c0000024) ret=71257cd9 004a:Ret ntdll.RtlNtStatusToDosError() retval=00000006 ret=71257cd9 ... 004a:Ret KERNEL32.GetFileType() retval=00000000 ret=10058e27 ... 004a:Call KERNEL32.GetLastError() ret=1006042a 004a:Ret KERNEL32.GetLastError() retval=00000006 ret=1006042a ... --- snip ---
Since 'GetFileType' fails for '\\.\PHYSICALDRIVE0' it doesn't bother with further queries. It likely expects success and 'FILE_TYPE_DISK' here.
$ sha1sum reflect_setup_free.exe 54937b86e5be6d3d45fb4022aa75a97344eab479 reflect_setup_free.exe
$ du -sh reflect_setup_free.exe 33M reflect_setup_free.exe
$ wine --version wine-5.0-rc1
Regards