On Fri Aug 29 11:58:10 2025 +0000, Nikolay Sivov wrote:
It's already implemented afaict.
It looks like it checks if `ISystemMediaTransportControls` is NULL.
Setting `*value = (void *)0xdeadbeef;` causes a crash:
fixme:msvcrt:_set_abort_behavior _WRITE_CALL_REPORTFAULT unhandled
Implementation that caused it to call `vccorlib140.dll.?Allocate@Heap@Details@Platform@@SAPAXII@Z`
``` static HRESULT get_system_media_transport_controls( HWND *window, ISystemMediaTransportControls **controls ) { static const WCHAR *media_control_statics_name = L"Windows.Media.SystemMediaTransportControls"; ISystemMediaTransportControlsInterop *media_control_interop_statics = NULL; IActivationFactory *factory = NULL; HSTRING str = NULL; HRESULT hr;
if (!(*window = GetActiveWindow())) return E_FAIL;
hr = WindowsCreateString( media_control_statics_name, wcslen( media_control_statics_name ), &str ); if (SUCCEEDED(hr)) hr = RoGetActivationFactory( str, &IID_IActivationFactory, (void **)&factory ); if (SUCCEEDED(hr)) hr = IActivationFactory_QueryInterface( factory, &IID_ISystemMediaTransportControlsInterop, (void **)&media_control_interop_statics ); if (SUCCEEDED(hr)) hr = ISystemMediaTransportControlsInterop_GetForWindow( media_control_interop_statics, *window, &IID_ISystemMediaTransportControls, (void **)controls );
if (media_control_interop_statics) ISystemMediaTransportControlsInterop_Release( media_control_interop_statics ); if (factory) IActivationFactory_Release( factory ); WindowsDeleteString( str ); return hr; }
static HRESULT WINAPI media_player2_get_SystemMediaTransportControls( IMediaPlayer2 *iface, ISystemMediaTransportControls **value ) { struct media_player *impl = impl_from_IMediaPlayer2( iface ); HRESULT hr;
TRACE( "iface %p, value %p\n", iface, value );
if (!impl->controls && FAILED(hr = get_system_media_transport_controls( &impl->window, &impl->controls ))) { *value = NULL; return hr; }
*value = impl->controls; ISystemMediaTransportControls_AddRef( *value ); return S_OK; } ```