[Bug 27364] Osu! fails to install (ole32.IIDFromString returns unexpected error code)
wine-bugs at winehq.org
wine-bugs at winehq.org
Sat Feb 8 17:06:57 CST 2014
https://bugs.winehq.org/show_bug.cgi?id=27364
Anastasius Focht <focht at gmx.net> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |dotnet
CC| |focht at gmx.net
Component|-unknown |ole32
Hardware|x86-64 |x86
Version|unspecified |1.3.21
Summary|osu! crashes upon install. |Osu! fails to install
| |(ole32.IIDFromString
| |returns unexpected error
| |code)
--- Comment #8 from Anastasius Focht <focht at gmx.net> ---
Hello folks,
confirming, the installer still fails.
The original issue has most likely evolved/was fixed a long time ago.
Prerequisite: 'winetricks -q dotnet35sp1'
--- snip ---
$ WINEDEBUG=+tid,+seh,+relay wine ./osu\!install.exe >>log.txt 2>&1
...
0024:Call ole32.IIDFromString(03357728
L"{C:\\users\\focht\\Temp\\{7DCAD80E-DDB2-42DC-92F9-92E9AE2D561C}\\osu!.msi}",0033e4a4)
ret=004530b2
...
0024:Call
ntdll.NtCreateKey(0033e1c4,02000000,0033e1ac,00000000,00000000,00000000,00000000)
ret=7e5ae0a0
0024:Ret ntdll.NtCreateKey() retval=00000000 ret=7e5ae0a0
0024:Call ntdll.RtlInitUnicodeString(0033e230,0014cd98
L"{C:\\users\\focht\\Temp\\{7DCAD80E-DDB2-42DC-92F9-92E9AE2D561C}\\osu!.msi}\\CLSID")
ret=7e5ae507
0024:Ret ntdll.RtlInitUnicodeString() retval=0033e230 ret=7e5ae507
0024:Call ntdll.NtOpenKey(0033e288,02000000,0033e238) ret=7e5ae523
0024:Ret ntdll.NtOpenKey() retval=c0000034 ret=7e5ae523
0024:Call ntdll.RtlNtStatusToDosError(c0000034) ret=7e5ae52e
0024:Ret ntdll.RtlNtStatusToDosError() retval=00000002 ret=7e5ae52e
0024:Call ntdll.RtlFreeHeap(00110000,00000000,0014cd98) ret=7e5b2ac2
0024:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7e5b2ac2
0024:Ret ole32.IIDFromString() retval=800401f3 ret=004530b2
...
0024:Call
KERNEL32.FormatMessageW(00001100,00000000,800401f3,00000400,0033e288,00000000,00000000)
ret=0041a52d
0024:Ret KERNEL32.FormatMessageW() retval=00000000 ret=0041a52d
...
0024:Call KERNEL32.WideCharToMultiByte(00000000,00000000,03357d68 L"0x800401f3
- Error in
::IIDFromString('C:\\users\\focht\\Temp\\{7DCAD80E-DDB2-42DC-92F9-92E9AE2D561C}\\osu!.msi'):
0x800401f3",ffffffff,00000000,00000000,00000000,00000000) ret=00416855
0024:Ret KERNEL32.WideCharToMultiByte() retval=00000079 ret=00416855
...
0024:Call KERNEL32.RaiseException(e06d7363,00000001,00000003,0033e370)
ret=0048ff02
0024:trace:seh:raise_exception code=e06d7363 flags=1 addr=0x7b83a97b
ip=7b83a97b tid=0024
0024:trace:seh:raise_exception info[0]=19930520
0024:trace:seh:raise_exception info[1]=0033e494
0024:trace:seh:raise_exception info[2]=004f7698
0024:trace:seh:raise_exception eax=7b8269e1 ebx=7b8bb000 ecx=19930520
edx=0033e2b4 esi=0033e35c edi=0033e320
0024:trace:seh:raise_exception ebp=0033e2f8 esp=0033e294 cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00200283
--- snip ---
IIDFromString() failure is expected.
The error code 0x800401f3 -> CO_E_CLASSSTRING returned by Wine is something the
installer doesn't expect.
MSDN:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms687262%28v=vs.85%29.aspx
--- quote ---
IIDFromString function
Converts a string generated by the StringFromIID function back into the
original interface identifier (IID).
...
Return value
This function can return the standard return values E_INVALIDARG,
E_OUTOFMEMORY, and S_OK.
...
--- quote ---
The installer (caller) code disassembly reveals it only handles E_INVALIDARG
and CO_E_IIDSTRING:
--- snip ---
...
004530AA 51 PUSH ECX
004530AB 50 PUSH EAX
004530AC FF15 94264D00 CALL DWORD PTR DS:[<&ole32.IIDFromString>
004530B2 6A 00 PUSH 0
004530B4 6A 01 PUSH 1
004530B6 8D75 B4 LEA ESI,DWORD PTR SS:[EBP-4C]
004530B9 8BF8 MOV EDI,EAX
004530BB E8 F144FBFF CALL osu!inst.004075B1
004530C0 81FF F4010480 CMP EDI,800401F4 ; CO_E_IIDSTRING
004530C6 0F84 CF000000 JE osu!inst.0045319B
004530CC 81FF 57000780 CMP EDI,80070057 ; E_INVALIDARG
004530D2 0F84 C3000000 JE osu!inst.0045319B
004530D8 85FF TEST EDI,EDI
004530DA 0F84 B7000000 JE osu!inst.00453197
004530E0 0F8D B5000000 JGE osu!inst.0045319B
...
--- snip ---
The problem can be attributed to Wine's code sharing in this place.
CLSIDFromString() and IIDFromString() share the same implementation
(IIDFromString forwards to CLSIDFromString).
CLSIDFromString() can return more/different error codes than IIDFromString() as
documented in MSDN.
Source:
http://source.winehq.org/git/wine.git/blob/62d9b5a0e079b6db8c16444d92fe85cfa8e10f41:/dlls/ole32/compobj.c#l2068
$ sha1sum osu\!install.exe
876bfc53a7bbd1948c44b0e58ed09e93fd8fcffe osu!install.exe
$ du -sh osu\!install.exe
48M osu!install.exe
$ wine --version
wine-1.7.12
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