void AudioVolume::AddSession(std::map<DWORD, DWORD> &map, CComQIPtr<IAudioSessionControl> spAudioSessionControl) { HRESULT hr = S_OK; CComQIPtr<IAudioSessionControl2> spAudioSessionControl2; try { // Get AudioSessionControl2 spAudioSessionControl2 = spAudioSessionControl; if (spAudioSessionControl2 == NULL) { throw "Cannot get AudioSessionControl2!"; } // Check if it is the firfox's audio session DWORD dwProcessId; hr = spAudioSessionControl2->GetProcessId(&dwProcessId); if (FAILED(hr)) { throw "spAudioSessionControl2->GetProcessId failed!"; } LPWSTR pswSessionName = NULL; hr = spAudioSessionControl->GetDisplayName(&pswSessionName); if (FAILED(hr)) { throw "spAudioSessionControl->GetDisplayName failed!"; } if (IsDescendantProcess(map, dwProcessId) || IsQzoneMusicProcess(dwProcessId)) { LPWSTR pswInstanceId = NULL; if (SUCCEEDED(spAudioSessionControl2->GetSessionInstanceIdentifier(&pswInstanceId))) { m_mapSpAudioSessionControl2[CStringW(pswInstanceId)] = spAudioSessionControl; } CoTaskMemFree(pswInstanceId); } CoTaskMemFree(pswSessionName); } catch (LPCSTR szError) { TRACE("[MuterWin7] AudioVolume::AddSession: %s\n", szError); } }