[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