http://bugs.winehq.org/show_bug.cgi?id=60081 Bug ID: 60081 Summary: setupapi: SetupDiGetDeviceInterfaceAlias is a stub, causes fatal abort in apps enumerating audio/HID device interfaces (breaks Elite Dangerous) Product: Wine Version: unspecified Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: major Priority: P2 Component: pnp Assignee: wine-bugs@list.winehq.org Reporter: amaranthine.dragon@gmail.com Target Milestone: --- Distribution: --- Created attachment 81597 --> http://bugs.winehq.org/attachment.cgi?id=81597 Verbose game log dlls/setupapi/setupapi.spec has: @ stub SetupDiGetDeviceInterfaceAlias Any application that calls this function crashes immediately, because Wine's stub handling aborts the process rather than returning an error (unimplemented functions called directly via the import table produce a fatal "wine: Call from ... to unimplemented function ..., aborting" rather than a normal failure return). Reproduced with Elite Dangerous (Epic Games Store version, run via Heroic Games Launcher / umu-launcher), which calls this function during its audio device enumeration on startup (PortAudio's WASAPI backend). The game crashes before reaching the main menu every time. Confirmed reproducible across multiple Proton/Wine-staging bases, ruling out a version-specific regression: - GE-Proton9-11 (wine-staging ~9.0) - GE-Proton10-20 (wine-staging ~10.0) - GE-Proton10-34 (wine-staging ~10.0) - GE-Proton11-3 (wine-staging ~11.0, testing/experimental) Full exception trace and backtrace (WINEDEBUG=+seh,+setupapi,+module): wine: Call from 00006FFFFFBBD977 to unimplemented function setupapi.dll.SetupDiGetDeviceInterfaceAlias, aborting Backtrace: kernelbase.dll (stub trampoline) setupapi.dll +0x24B45 setupapi.dll +0x2 01F portaudio_x64.dll +0x199ED portaudio_x64.dll +0x20428 portaudio_x64.dll +0x1DBA5 portaudio_x64.dll +0x35BB portaudio_x64.dll +0x3D57 EliteDangerous64.exe +0x4B6C4B4 EliteDangerous64.exe +0x80B8E2 EliteDangerous64.exe +0x54EDB6 EliteDangerous64.exe +0x55C7E6 kernel32.dll +0x11649 ntdll.dll +0x10E0F The call is preceded by normal SetupDi* device-interface enumeration (SetupDiGetClassDevsExW / SetupDiCreateDeviceInterface / SetupDiEnumDeviceInterfaces all succeed) for the HID class GUID {6994ad04-93ef-11d0-a3cc-00a0c9223196}; the process then aborts on the very next call, SetupDiGetDeviceInterfaceAlias, before the game can finish initializing audio and open its main window. Note: the underlying cfgmgr32 functionality already appears to be implemented and exported: @ stdcall CM_Get_Device_Interface_AliasA(...) cfgmgr32.CM_Get_Device_Interface_AliasA @ stdcall CM_Get_Device_Interface_AliasW(...) cfgmgr32.CM_Get_Device_Interface_AliasW On real Windows, SetupDiGetDeviceInterfaceAlias is a thin wrapper around CM_Get_Device_Interface_Alias, so implementing the setupapi.dll wrapper around the existing cfgmgr32 call may be a fairly small, self- contained fix rather than a new implementation from scratch. Steps to reproduce: 1. Install Elite Dangerous (Odyssey) via Heroic Games Launcher (Epic Games Store, legendary backend), Proton/GE-Proton compatibility layer. 2. Launch the game normally. 3. Game crashes shortly after the main game process starts, during audio initialization; Frontier's own WatchDog64.exe/CrashReporter.exe detect and report the crash. Expected result: game launches to the main menu. Actual result: Game consistently crashes at exact same spot during opening animation, never reaches main menu. -- 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.