Rémi Bernon (@rbernon) commented about dlls/windows.media.mediacontrol/main.c:
+ if (!IsEqualIID( riid, &IID_ISystemMediaTransportControls )) + { + FIXME( "%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid( riid ) ); + *control = NULL; + return E_NOINTERFACE; + } + + if (!(impl = calloc( 1, sizeof(*impl) ))) return E_OUTOFMEMORY; + + impl->ISystemMediaTransportControls_iface.lpVtbl = &media_control_vtbl; + impl->ref = 2; + impl->window = window; + + *control = &impl->ISystemMediaTransportControls_iface; + TRACE( "created ISystemMediaTransportControls %p.\n", *control ); + return S_OK; Some tests might say otherwise but in general these methods with IID parameter can and should be implemented with a pattern of `create - QueryInterface - Release`, so that you could specify any IID the created class implements:
```suggestion:-15+0 if (!(impl = calloc( 1, sizeof(*impl) ))) return E_OUTOFMEMORY; impl->ISystemMediaTransportControls_iface.lpVtbl = &media_control_vtbl; impl->ref = 1; impl->window = window; TRACE( "created ISystemMediaTransportControls %p.\n", *control ); hr = ISystemMediaTransportControls_QueryInterface( &impl->ISystemMediaTransportControls_iface, riid, control ); ISystemMediaTransportControls_Release( &impl->ISystemMediaTransportControls_iface ); return hr; ``` -- https://gitlab.winehq.org/wine/wine/-/merge_requests/3993#note_47393