https://bugs.winehq.org/show_bug.cgi?id=46005
Bug ID: 46005 Summary: Multiple games and applications fail due to missing interface proxy information in registry (oleautomation/dual interfaces referenced in coclass section) Product: Wine Version: 3.18 Hardware: x86-64 OS: Linux Status: NEW Severity: normal Priority: P2 Component: tools Assignee: wine-bugs@winehq.org Reporter: focht@gmx.net Distribution: ---
Hello folks,
split off from bug 34711
See my comment https://bugs.winehq.org/show_bug.cgi?id=34711#c3 where I stated my surprise about the interface proxies not being registered.
Zebediah's comment https://www.winehq.org/pipermail/wine-devel/2018-October/133648.html convinced me to create a new ticket to target this problem in general.
--- quote --- I don't think this is the right solution to this problem. On Windows only the coclass declaration is inside the library declaration, so I think we should fix widl to also register dependent interfaces. --- quote ---
Copy/pasta from https://bugs.winehq.org/show_bug.cgi?id=34711
---
Download:
http://wc3dota.persiangig.com/.Srl0nxC6Ke/Terraria/terraria-server-12031.zip
New version:
http://terraria.org/system/dedicated_servers/archives/000/000/032/original/t...
It crashes. Running under managed CLR debugger shows:
--- snip --- ... 0035:trace:loaddll:load_builtin_dll Loaded L"C:\windows\system32\hnetcfg.dll" at 0x7d060000: builtin 0035:fixme:hnetcfg:hnetcfg_cf_QueryInterface interface {00000003-0000-0000-c000-000000000046} not implemented 0035:fixme:hnetcfg:hnetcfg_cf_QueryInterface interface {00000019-0000-0000-c000-000000000046} not implemented 0035:fixme:hnetcfg:hnetcfg_cf_QueryInterface interface {b196b28f-bab4-101a-b69c-00aa00341d07} not implemented 0035:err:ole:marshal_object Failed to create an IRpcStubBuffer from IPSFactory for {b196b28f-bab4-101a-b69c-00aa00341d07} with error 0x80004002 0032:err:ole:ClientIdentity_QueryMultipleInterfaces IRemUnknown_RemQueryInterface failed with error 0x80004002 0035:fixme:hnetcfg:upnpnat_QueryInterface interface {00000003-0000-0000-c000-000000000046} not implemented 0035:fixme:hnetcfg:upnpnat_QueryInterface interface {00000003-0000-0000-c000-000000000046} not implemented 0035:fixme:hnetcfg:upnpnat_QueryInterface interface {00000019-0000-0000-c000-000000000046} not implemented 0035:fixme:hnetcfg:upnpnat_QueryInterface interface {c3fcc19e-a970-11d2-8b5a-00a0c9b7c9c4} not implemented 0035:fixme:hnetcfg:upnpnat_QueryInterface interface {c3fcc19e-a970-11d2-8b5a-00a0c9b7c9c4} not implemented 0032:err:ole:ClientIdentity_QueryMultipleInterfaces IRemUnknown_RemQueryInterface failed with error 0x80004002 0035:fixme:hnetcfg:upnpnat_QueryInterface interface {b196b283-bab4-101a-b69c-00aa00341d07} not implemented 0035:err:ole:marshal_object Failed to create an IRpcStubBuffer from IPSFactory for {b196b283-bab4-101a-b69c-00aa00341d07} with error 0x80004002 0032:err:ole:ClientIdentity_QueryMultipleInterfaces IRemUnknown_RemQueryInterface failed with error 0x80004002 0035:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000144-0000-0000-c000-000000000046} 0032:err:ole:ClientIdentity_QueryMultipleInterfaces IRemUnknown_RemQueryInterface failed with error 0x80004002 0035:err:ole:marshal_object couldn't get IPSFactory buffer for interface {b171c812-cc76-485a-94d8-b6b3a2794e99} 0032:err:ole:ClientIdentity_QueryMultipleInterfaces IRemUnknown_RemQueryInterface failed with error 0x80004002 0035:err:ole:marshal_object couldn't get IPSFactory buffer for interface {b171c812-cc76-485a-94d8-b6b3a2794e99} 0032:err:ole:ClientIdentity_QueryMultipleInterfaces IRemUnknown_RemQueryInterface failed with error 0x80004002 (31.32): C++ EH exception - code e06d7363 (first chance) 0030:fixme:ntdll:RtlGetUnloadEventTrace stub! 0030:trace:loaddll:load_builtin_dll Loaded L"C:\windows\system32\wtsapi32.dll" at 0xf7df0000: builtin 0030:trace:loaddll:load_native_dll Loaded L"C:\windows\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll" at 0x7a820000: native There is no current managed exception on this thread OS Thread Id: 0x32 (0) Child SP IP Call Site 0033d664 7b43c87b [HelperMethodFrame_1OBJ: 0033d664] 0033d6c0 0389014c Terraria.Netplay..cctor() 0033d928 791421db [GCFrame: 0033d928] 0033f30c 791421db [PrestubMethodFrame: 0033f30c] Terraria.ProgramServer.Main(System.String[]) 0033f548 791421db [GCFrame: 0033f548] 0032:fixme:ntdll:EtwRegisterTraceGuidsW (0xc405ba, (nil), {8e9f5090-2d75-4d03-8a81-e5afbf85daf1}, 1, 0x33b930, (null), (null), 0xfb2d64): stub 0032:fixme:ntdll:EtwRegisterTraceGuidsW register trace class {8e9f5090-2d75-4d03-8a81-e5afbf85daf1} (31.32): CLR exception - code e0434352 (first chance) Exception object: 00f9d5e4 Exception type: System.InvalidCastException Message: Unable to cast COM object of type 'System.__ComObject' to interface type 'NATUPNPLib.UPnPNAT'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{B171C812-CC76-485A-94D8-B6B3A2794E99}' failed due to the following error: Exception from HRESULT: 0x80004002 (E_NOINTERFACE). InnerException: <none> StackTrace (generated): <none> StackTraceString: <none> HResult: 80004002 OS Thread Id: 0x32 (0) Child SP IP Call Site 0033d664 7b43c87b [HelperMethodFrame_1OBJ: 0033d664] 0033d6c0 0389014c Terraria.Netplay..cctor() 0033d928 791421db [GCFrame: 0033d928] 0033f30c 791421db [PrestubMethodFrame: 0033f30c] Terraria.ProgramServer.Main(System.String[]) 0033f548 791421db [GCFrame: 0033f548] First chance exceptions are reported before any exception handling. This exception may be expected and handled. --- snip ---
"Unable to cast COM object of type 'System.__ComObject' to interface type 'NATUPNPLib.UPnPNAT'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{B171C812-CC76-485A-94D8-B6B3A2794E99}' failed due to the following error: Exception from HRESULT: 0x80004002 (E_NOINTERFACE)."
Cross-thread marshalling doesn't work here. Each thread must have access to the type information (registry) that describes the COM object to be able to unmarshal the object from the source thread.
Wine source:
https://source.winehq.org/git/wine.git/blob/HEAD:/include/natupnp.idl#l205
--- snip --- 187 [ 188 object, 189 uuid(b171c812-cc76-485a-94d8-b6b3a2794e99), 190 dual, 191 pointer_default(unique) 192 ] 193 interface IUPnPNAT : IDispatch 194 { 195 [propget, id(1)] 196 HRESULT StaticPortMappingCollection ([out, retval] IStaticPortMappingCollection **collection); 197 198 [propget, id(2)] 199 HRESULT DynamicPortMappingCollection ([out, retval] IDynamicPortMappingCollection **collection); 200 201 [propget, id(3)] 202 HRESULT NATEventManager ([out, retval] INATEventManager **manager); 203 }; 204 205 [ 206 id(2), 207 uuid(1c565858-f302-471e-b409-f180aa4abec6), 208 version(1.0) 209 ] 210 library NATUPNPLib 211 { 212 importlib("stdole2.tlb"); 213 214 [ 215 vi_progid("HNetCfg.NATUPnP"), 216 progid("HNetCfg.NATUPnP.1"), 217 threading(apartment), 218 uuid(ae1e00aa-3fd5-403c-8a27-2bbdc30cd0e1) 219 ] 220 coclass UPnPNAT 221 { 222 [default] interface IUPnPNAT; 223 }; 224 }; --- snip ---
It seems for Wine's MIDL the interface in question needs to be defined *inside* the 'library' block and have 'oleautomation' attribute. Otherwise it's not getting registered under 'HKEY_CLASSES_ROOT\Interface\{IID}\...' (proxy/stub).
I was surprised about that behaviour since the interface was referenced by the coclass within the library block and had 'dual' attribute.
http://diranieh.com/IDL/Structure.htm
--- quote --- Interface location [oleautomation]/ [dual] defined
Inside library block Interface uses Universal Marshaler Interface appears in type library
Outside library block Interface uses Universal Marshaler Interface does not appear in type library (unless referenced, perhaps in the coclass section)
---
Interface location [oleautomation]/ [dual] not defined
Inside library block AVOID. NO INTERCEPTION CODE GENERATED!
Outside library block Interface does not use Universal Marshaler. Need to build proxy/stub DLL. Interface does not appear in type library (unless referenced, perhaps in the coclass section) --- quote ---
$ wine --version wine-3.18-75-ge55aca8f49
Regards
https://bugs.winehq.org/show_bug.cgi?id=46005
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |dotnet, download URL| |http://wc3dota.persiangig.c | |om/.Srl0nxC6Ke/Terraria/ter | |raria-server-12031.zip See Also| |https://bugs.winehq.org/sho | |w_bug.cgi?id=34711
https://bugs.winehq.org/show_bug.cgi?id=46005
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|Multiple games and |Multiple games and |applications fail due to |applications fail due to |missing interface proxy |missing interface proxy |information in registry |information in registry |(oleautomation/dual |(oleautomation/dual |interfaces referenced in |interfaces referenced in |coclass section) |coclass section inside of | |library block)
https://bugs.winehq.org/show_bug.cgi?id=46005
Alistair Leslie-Hughes leslie_alistair@hotmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |leslie_alistair@hotmail.com
https://bugs.winehq.org/show_bug.cgi?id=46005
Don Pobanz dpobanz@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |dpobanz@gmail.com
https://bugs.winehq.org/show_bug.cgi?id=46005
elr elrender+winehq@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |elrender+winehq@gmail.com
--- Comment #1 from elr elrender+winehq@gmail.com --- Dears,
This is still valid in latest stable version (as looked at the code probably also in latest dev):
# wine --version wine-4.0.2
Last week was a release of a new version Terraria for mobile (1.3.0.7), download available from (no login required): https://forums.terraria.org/index.php?attachments/terrariaserver-zip.225967/
Requirements: Windows 7/8/10 x64 only .Net >=4.6.1 xna = 4.0
As I contacted Terraria's forum Admin, he stated that devs had problems porting this server to Linux/mono, so the only viable option right now would be Wine.
I tried "wine TerrariaServer.exe" with fresh wineprefix (win7) + dotnet48 + xna40. Got exactly the same error as Anastasius reported and it prevents to run the server:
--- quote --- Unable to cast COM object of type 'System.__ComObject' to interface type 'NATUPNPLib.UPnPNAT'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{B171C812-CC76-485A-94D8-B6B3A2794E99}' failed due to the following error: Exception from HRESULT: 0x80004002 (E_NOINTERFACE). --- quote ---
Reporting as due to the new mobile Terraria more people could be interested in this.
Kind Regards.
https://bugs.winehq.org/show_bug.cgi?id=46005
Zebediah Figura z.figura12@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |FIXED CC| |z.figura12@gmail.com Fixed by SHA1| |56995dd3223c59340037d33a607 | |3a42bdbba1d3f Component|tools |rpc
--- Comment #2 from Zebediah Figura z.figura12@gmail.com --- Fixed by https://source.winehq.org/git/wine.git/commitdiff/56995dd3223c59340037d33a6073a42bdbba1d3f.
https://bugs.winehq.org/show_bug.cgi?id=46005
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #3 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 5.1.
https://bugs.winehq.org/show_bug.cgi?id=46005
Michael Stefaniuc mstefani@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |5.0.x
https://bugs.winehq.org/show_bug.cgi?id=46005
Michael Stefaniuc mstefani@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|5.0.x |---
--- Comment #4 from Michael Stefaniuc mstefani@winehq.org --- Removing the 5.0.x milestone from bug fixes included in 5.0.1.
https://bugs.winehq.org/show_bug.cgi?id=46005
Carsten carsten.friedrich@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |carsten.friedrich@gmail.com
--- Comment #5 from Carsten carsten.friedrich@gmail.com --- I don't think this fix actually fixes the underlying problem. I came here experiencing the same problem with the Terraria Mobile server.
Based on this bug report I upgraded to Wine 5.0.1 and tried again. The error message is now slightly different, but it still crashes on start-up:
0009:fixme:advapi:ReportEventW (0xcafe4242,0x0001,0x0000,0x00000402,(nil),0x0001,0x00000000,0x32dbb8,(nil)): stub 0009:err:eventlog:ReportEventW L"Application: TerrariaServer.exe\nFramework Version: v4.0.30319\nDescription: The process was terminated due to an unhandled exception.\nException Info: System.NotImplementedException\n at NATUPNPLib.IUPnPNAT.get_StaticPortMappingCollection()\n at Terraria.Netplay..cctor()\n\nException"... 0009:fixme:advapi:DeregisterEventSource (0xcafe4242) stub
Unhandled Exception: System.TypeInitializationException: The type initializer for 'Terraria.Main' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Terraria.Netplay' threw an exception. ---> System.NotImplementedException: The method or operation is not implemented. at NATUPNPLib.IUPnPNAT.get_StaticPortMappingCollection() at Terraria.Netplay..cctor() --- End of inner exception stack trace --- at Terraria.Main..cctor() --- End of inner exception stack trace --- at Terraria.Main..ctor() at Terraria.Program.LaunchGame(String[] args) at Terraria.WindowsLaunch.Main(String[] args) wine: Unhandled exception 0xe0434352 in thread 9 at address 7B00DFA2 (thread 0009), starting debugger...
https://bugs.winehq.org/show_bug.cgi?id=46005
--- Comment #6 from Anastasius Focht focht@gmx.net --- Hello Carsten,
--- quote --- I don't think this fix actually fixes the underlying problem. I came here experiencing the same problem with the Terraria Mobile server.
Based on this bug report I upgraded to Wine 5.0.1 and tried again. The error message is now slightly different, but it still crashes on start-up: --- quote ---
Your problem is a different, albeit valid, issue. This bug report is about an issue that appears *before* your issue. You wouldn't be able to get to your current crash without fixing that issue before.
There can be multiple (chained) issues that prevent an application/game from working. Just because this bug was resolved 'fixed' doesn't mean the affected apps/games are fully working. It just means they pass the point of original failure. Having apps still crashing, running into next problem is not uncommon. Meta-bugs "make app X to work" (fixing all issues) shall be avoided.
I've created bug 49449 ("Terraria Server (.NET 4.x) crashes with System.NotImplementedException NATUPNPLib.IUPnPNAT.get_StaticPortMappingCollection()") to track your issue.
Regards
https://bugs.winehq.org/show_bug.cgi?id=46005
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- URL|http://wc3dota.persiangig.c |https://web.archive.org/web |om/.Srl0nxC6Ke/Terraria/ter |/20141007075154/http://terr |raria-server-12031.zip |aria.org/system/dedicated_s | |ervers/archives/000/000/002 | |/original/terraria-server-1 | |241.zip?1410586550