[Bug 32588] Macrium Reflect v5.1 installer crashes with WinVer set to 'Windows XP'

WineHQ Bugzilla wine-bugs at winehq.org
Sun Dec 15 13:25:50 CST 2019


https://bugs.winehq.org/show_bug.cgi?id=32588

Anastasius Focht <focht at 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 at 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/bcdedit-command-line-options

--- 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

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.


More information about the wine-bugs mailing list