Thanks everyone for taking a look and for the pointers! I ran a few tests on Windows and indeed xaudio does not initialize COM, but it seems to require it, since CreateMasteringVoice() fails outright when the process has no apartment with CO_E_NOTINITIALIZED. However what it seems to initialize COM implicitly is CreateMasteringVoice() itself. I put the main thread in an STA, then checked the apartment from a new thread that never touched COM (so if I'm correct it should only report IMPLICIT_MTA if an MTA exists somewhere in the process) and after CreateMasteringVoice there does seem to be one. Windows reports CO_E_NOTINITIALIZED on that new thread before and right after XAudio2Create(), and then APTTYPE_MTA with APTTYPEQUALIFIER_IMPLICIT_MTA once the mastering voice has been created. The main thread stays in its STA the whole time, so native creates that MTA without touching the caller's apartment, which looks a lot more like CoIncrementMTAUsage() to me. Should I try drafting a solution using that? It's my first time working with COM so I might be missing something else... -- https://gitlab.winehq.org/wine/wine/-/merge_requests/11717#note_149530