[Bug 45365] New: Multiple .NET XNA 3.x/ 4.x games using Microsoft.Xna.Framework.Media classes crash due to IWMPCore3 ::newMedia stub

wine-bugs at winehq.org wine-bugs at winehq.org
Sat Jun 23 08:42:12 CDT 2018


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

            Bug ID: 45365
           Summary: Multiple .NET XNA 3.x/4.x games using
                    Microsoft.Xna.Framework.Media classes crash due to
                    IWMPCore3::newMedia stub
           Product: Wine
           Version: 3.10
          Hardware: x86-64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: wmp&wmvcore
          Assignee: wine-bugs at winehq.org
          Reporter: focht at gmx.net
      Distribution: ---

Hello folks,

A.R.E.S. Extinction Agenda 1.x (.NET 2.0, XNA 3.1 game):
https://www.fileplanet.com/217883/download/A.R.E.S:-Extinction-Agenda-Demo

After working around 34622 ("Multiple games need CLSID_DMOWrapperFilter/DMO
Wrapper Filter '{94297043-bd82-4dfd-b0de-8177739c6d20}', 'qasf.dll'") the game
runs into this:

--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files/ARES - Demo

$ file *.{dll,exe}
AssetLoader.dll: PE32 executable (DLL) (console) Intel 80386 Mono/.Net
assembly, for MS Windows
FlatRedBall.dll: PE32 executable (DLL) (console) Intel 80386 Mono/.Net
assembly, for MS Windows
X10.FRB.dll:     PE32 executable (DLL) (console) Intel 80386 Mono/.Net
assembly, for MS Windows
ARES.exe:        PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS
Windows
unins000.exe:    PE32 executable (GUI) Intel 80386, for MS Windows

$ wine ./ARES.exe

...
Unhandled Exception: System.NotImplementedException: The method or operation is
not implemented.
   at Microsoft.Xna.Framework.Media.Song..ctor(String name, String filename,
Int32 duration)
   at Microsoft.Xna.Framework.Content.SongReader.Read(ContentReader input, Song
existingInstance)
   at
Microsoft.Xna.Framework.Content.ContentReader.InvokeReader[T](ContentTypeReader
reader, Object existingInstance)
   at
Microsoft.Xna.Framework.Content.ContentReader.ReadObjectInternal[T](Object
existingInstance)
   at Microsoft.Xna.Framework.Content.ContentReader.ReadObject[T]()
   at Microsoft.Xna.Framework.Content.ContentReader.ReadAsset[T]()
   at Microsoft.Xna.Framework.Content.ContentManager.ReadAsset[T](String
assetName, Action`1 recordDisposableObject)
   at Microsoft.Xna.Framework.Content.ContentManager.Load[T](String assetName)
   at FlatRedBall.Content.ContentManager.LoadFromProject[T](String assetName)
   at FlatRedBall.Content.ContentManager.Load[T](String assetName)
   at FlatRedBall.FlatRedBallServices.Load[T](String assetName, String
contentManagerName)
   at FlatRedBall.FlatRedBallServices.Load[T](String assetName)
   at Trashman.SoundLibrary.LoadMusic(String filename)
   at Trashman.Screens.SplashScreen.LoadContent()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,
ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
wine: Unhandled exception 0xe0434f4d in thread 43 at address 0x7b446fe6 (thread
0043), starting debugger...
--- snip ---

Trace log:

--- snip ---
$ WINEDEBUG=+seh,+relay,+wmp,+quartz wine ./ARES.exe >>log.txt 2>&1
...
003d:Call KERNEL32.LoadLibraryExW(09cdf0ce
L"C:\\windows\\system32\\wmp.dll",00000000,00000008) ret=7e183052
003d:Call PE DLL (proc=0x7b00567d,module=0x7aff0000
L"wmp.dll",reason=PROCESS_ATTACH,res=(nil))
003d:trace:wmp:DllMain (0x7aff0000 1 (nil))
...
003d:Call wmp.DllGetClassObject(09cdf438,7e264488,09cdf448) ret=7e18523f
003d:trace:wmp:DllGetClassObject (CLSID_WindowsMediaPlayer
{00000001-0000-0000-c000-000000000046} 0x9cdf448)
003d:trace:wmp:ClassFactory_QueryInterface (0x7b01f120)->(IID_IClassFactory
0x9cdf448)
003d:trace:wmp:ClassFactory_AddRef (0x7b01f120)
003d:Ret  wmp.DllGetClassObject() retval=00000000 ret=7e18523f
...
003d:trace:wmp:WMPFactory_CreateInstance ((nil)
{6c497d62-8919-413c-82db-e935fb3ec584} 0x9cdf44c)
...
003d:trace:wmp:OleObject_QueryInterface (0x70c1d60)->(IID_IWMPPlayer4
0x9cdf44c)
003d:trace:wmp:OleObject_AddRef (0x70c1d60) ref=2
003d:trace:wmp:OleObject_Release (0x70c1d60) ref=1
003d:trace:wmp:ClassFactory_Release (0x7b01f120)
003d:Ret  ole32.CoCreateInstance() retval=00000000 ret=031c26e6
...
003d:trace:wmp:WMPPlayer4_get_settings (0x70c1d60)->(0x9cdf600)
003d:trace:wmp:OleObject_AddRef (0x70c1d60) ref=2
003d:trace:wmp:WMPPlayer4_get_controls (0x70c1d60)->(0x9cdf604)
003d:trace:wmp:OleObject_AddRef (0x70c1d60) ref=3
003d:fixme:wmp:WMPSettings_put_enableErrorDialogs (0x70c1d60)->(0) 
...
003d:Ret  window proc 0x1002a270
(hwnd=0x20096,msg="Microsoft.Xna.Framework.Media.WmpProxyThread",wp=00000000,lp=00000000)
retval=00000000 
...
003d:Call oleaut32.SysAllocStringLen(00df76f8 L"c:\\program files\\ares -
demo\\content\\aud\\menu.wma",00000031) ret=031c38b9 
...
003d:fixme:wmp:WMPPlayer4_newMedia (0x70c1d60)->(0x9cdf650) 
...
0044:trace:seh:raise_exception code=e0434f4d flags=1 addr=0x7b446fe6
ip=7b446fe6 tid=0044
0044:trace:seh:raise_exception  info[0]=80004001
0044:trace:seh:raise_exception  eax=7b4356b1 ebx=06f56a68 ecx=00000000
edx=0d4ff2a0 esi=0d4ff2a0 edi=0d4ff260
0044:trace:seh:raise_exception  ebp=0d4ff238 esp=0d4ff1d4 cs=d4f0023 ds=d4f002b
es=f7bd002b fs=f7bd0063 gs=f7bd006b flags=00000216
0044:trace:seh:call_stack_handlers calling handler at 0x79f9a3c8 code=e0434f4d
flags=1
0044:Call
msvcr80._except_handler4_common(7a381240,79e717fb,0d4ff1e0,0d4ff2d8,0d4feefc,0d4fedec)
ret=79f9a3e7
0044:trace:seh:_except_handler4_common exception e0434f4d flags=1 at 0x7b446fe6
handler=0x79f9a3c8 0xd4feefc 0xd4fedec cookie=2a1f6232 scope table=0x79f97080
cookies=-2/0,-72/0
0044:trace:seh:_except_handler4_common level 0 prev -2 filter 0x79f9709c
0044:trace:seh:_except_handler4_common filter returned CONTINUE_SEARCH
0044:trace:seh:_except_handler4_common reached -2, returning
ExceptionContinueSearch 
...
--- snip ---

NOTE: the exception is on a different thread by design. XNA media framework
uses a proxy thread ('Microsoft.Xna.Framework.Media.WmpProxyThread') for
Windows Media player, calling into unmanaged code and communicates via windows
messages to the other threads which handle the errors/raise exceptions.

Source:

https://source.winehq.org/git/wine.git/blob/HEAD:/dlls/wmp/player.c#l346

--- snip ---
 346 static HRESULT WINAPI WMPPlayer4_newMedia(IWMPPlayer4 *iface, BSTR url,
IWMPMedia **ppMedia)
 347 {
 348     WindowsMediaPlayer *This = impl_from_IWMPPlayer4(iface);
 349     FIXME("(%p)->(%p)\n", This, ppMedia);
 350     return E_NOTIMPL;
 351 }
--- snip ---

$ sha1sum ARES_Demo_setup.exe 
042abbabd5f6b1bbe7418acba7c4cdd9d9df34f6  ARES_Demo_setup.exe

$ du -sh ARES_Demo_setup.exe 
118M    ARES_Demo_setup.exe

$ wine --version
wine-3.11

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