From 4e88654b271ca88be0772cd6f5eb410c72d3e73f Mon Sep 17 00:00:00 2001 From: Rafael Rivera Date: Wed, 22 Jun 2016 19:45:39 -0700 Subject: [PATCH] Account for GUID changes in Windows 10. Again. --- EarTrumpet.Interop/AudioDeviceService.cpp | 16 +++++++++++----- EarTrumpet.Interop/PolicyConfig.h | 3 +++ EarTrumpet/Properties/AssemblyInfo.cs | 4 ++-- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/EarTrumpet.Interop/AudioDeviceService.cpp b/EarTrumpet.Interop/AudioDeviceService.cpp index 8b8d2b13c..f57280601 100644 --- a/EarTrumpet.Interop/AudioDeviceService.cpp +++ b/EarTrumpet.Interop/AudioDeviceService.cpp @@ -89,13 +89,19 @@ HRESULT AudioDeviceService::SetDefaultAudioDevice(LPWSTR deviceId) HRESULT AudioDeviceService::GetPolicyConfigClient(IPolicyConfig** client) { // - // The IPolicyConfig interface GUID changed multiple times between Windows 10 TH1 and RS1 - // breaking app compat along the way. We attempt CoCreateInstance twice with known valid GUIDs - // to cover all Windows 10 scenarios. + // The IPolicyConfig interface GUID keeps changing in Windows 10 for unknown reasons. + // We attempt CoCreateInstance with known IIDs cover all Windows 10 scenarios. // - if (FAILED(CoCreateInstance(CLSID_PolicyConfigClient, nullptr, CLSCTX_INPROC, IID_IPolicyConfig_TH2, reinterpret_cast(client)))) + // Pulled out of _ATL_INTMAP_ENTRYs found in AudioSes.dll + // (i.e. AudioSes!ATL::CComObject::QueryInterface) + // + + if (FAILED(CoCreateInstance(CLSID_PolicyConfigClient, nullptr, CLSCTX_INPROC, IID_IPolicyConfig_TH1, reinterpret_cast(client)))) { - FAST_FAIL(CoCreateInstance(CLSID_PolicyConfigClient, nullptr, CLSCTX_INPROC, IID_IPolicyConfig_TH1, reinterpret_cast(client))); + if (FAILED(CoCreateInstance(CLSID_PolicyConfigClient, nullptr, CLSCTX_INPROC, IID_IPolicyConfig_TH2, reinterpret_cast(client)))) + { + FAST_FAIL(CoCreateInstance(CLSID_PolicyConfigClient, nullptr, CLSCTX_INPROC, IID_IPolicyConfig_RS1, reinterpret_cast(client))); + } } return S_OK; diff --git a/EarTrumpet.Interop/PolicyConfig.h b/EarTrumpet.Interop/PolicyConfig.h index 885afe9cf..6580a9190 100644 --- a/EarTrumpet.Interop/PolicyConfig.h +++ b/EarTrumpet.Interop/PolicyConfig.h @@ -9,6 +9,9 @@ const GUID IID_IPolicyConfig_TH1 = { 0xCA286FC3, 0x91FD, 0x42C3, { 0x8E, // 6BE54BE8-A068-4875-A49D-0C2966473B11 const GUID IID_IPolicyConfig_TH2 = { 0x6BE54BE8, 0xA068, 0x4875, { 0xA4, 0x9D, 0x0C, 0x29, 0x66, 0x47, 0x3B, 0x11 } }; +// F8679F50-850A-41CF-9C72-430F290290C8 +const GUID IID_IPolicyConfig_RS1 = { 0xF8679F50, 0x850A, 0x41CF, { 0x9C, 0x72, 0x43, 0x0F, 0x29, 0x02, 0x90, 0xC8 } }; + interface IPolicyConfig : public IUnknown { public: diff --git a/EarTrumpet/Properties/AssemblyInfo.cs b/EarTrumpet/Properties/AssemblyInfo.cs index 46ff9dc34..c449efcae 100644 --- a/EarTrumpet/Properties/AssemblyInfo.cs +++ b/EarTrumpet/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -[assembly: AssemblyVersion("1.3.1.0")] -[assembly: AssemblyFileVersion("1.3.1.0")] +[assembly: AssemblyVersion("1.3.2.0")] +[assembly: AssemblyFileVersion("1.3.2.0")] [assembly: ComVisible(false)] [assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]