From: Paul Gofman pgofman@codeweavers.com
--- dlls/mmdevapi/session.c | 20 ++++++++++++++++++-- dlls/mmdevapi/tests/render.c | 6 ++++++ 2 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/dlls/mmdevapi/session.c b/dlls/mmdevapi/session.c index d602859ffe5..9b97cef9df8 100644 --- a/dlls/mmdevapi/session.c +++ b/dlls/mmdevapi/session.c @@ -298,8 +298,24 @@ static HRESULT WINAPI control_GetSessionIdentifier(IAudioSessionControl2 *iface, static HRESULT WINAPI control_GetSessionInstanceIdentifier(IAudioSessionControl2 *iface, WCHAR **id) { struct audio_session_wrapper *This = impl_from_IAudioSessionControl2(iface); - FIXME("(%p)->(%p) - stub\n", This, id); - return E_NOTIMPL; + WCHAR *session_id, pid[16]; + HRESULT hr; + DWORD len; + + TRACE("(%p)->(%p).\n", This, id); + + if (FAILED(hr = control_GetSessionIdentifier(iface, &session_id))) + return hr; + + swprintf(pid, ARRAY_SIZE(pid), L"%lu", GetCurrentProcessId()); + len = wcslen(session_id) + 4 + wcslen(pid) + 1; + if (!(*id = CoTaskMemAlloc(len * sizeof(WCHAR)))) { + CoTaskMemFree(session_id); + return E_OUTOFMEMORY; + } + swprintf(*id, len, L"%s|1%%b%s", session_id, pid); + CoTaskMemFree(session_id); + return S_OK; }
static HRESULT WINAPI control_GetProcessId(IAudioSessionControl2 *iface, DWORD *pid) diff --git a/dlls/mmdevapi/tests/render.c b/dlls/mmdevapi/tests/render.c index b1272e88122..9d6436e042b 100644 --- a/dlls/mmdevapi/tests/render.c +++ b/dlls/mmdevapi/tests/render.c @@ -2167,6 +2167,12 @@ static void check_session_ids_(unsigned int line, IMMDevice *dev, const GUID *se ok_(__FILE__, line)(!wcscmp(str, expected), "got %s, expected %s.\n", debugstr_w(str), debugstr_w(expected)); CoTaskMemFree(str);
+ hr = IAudioSessionControl2_GetSessionInstanceIdentifier(ctl2, &str); + ok_(__FILE__, line)(hr == S_OK, "GetSessionInstanceIdentifier failed, hr %#lx.\n", hr); + wsprintfW(expected, L"%s|%s%%b%s|1%%b%lu", dev_id, exe_path, guidstr, GetCurrentProcessId()); + ok_(__FILE__, line)(!wcscmp(str, expected), "got %s, expected %s.\n", debugstr_w(str), debugstr_w(expected)); + CoTaskMemFree(str); + CoTaskMemFree(dev_id); IAudioSessionControl2_Release(ctl2); }