From 33f3d8216fce7d75f7688ed03258cc986fbc3135 Mon Sep 17 00:00:00 2001 From: Hane Date: Fri, 10 May 2024 19:51:48 +0200 Subject: [PATCH] change defaults poc --- qtest.pro | 2 +- src/back/backlasses.cpp | 14 ++- src/back/backlasses.h | 1 + src/back/ipolicyconfig.h | 241 +++++++++++++++++++++++++++++---------- src/back/msinclude.h | 2 +- 5 files changed, 195 insertions(+), 65 deletions(-) diff --git a/qtest.pro b/qtest.pro index 707ff2d..4677fd8 100644 --- a/qtest.pro +++ b/qtest.pro @@ -1,6 +1,6 @@ QMAKE_CXXFLAGS += --target=x86_64-w64-mingw32 -g -gcodeview QMAKE_LFLAGS += --target=x86_64-w64-mingw32 -g -Wl,-pdb= -v -LIBS += -LC:/capybara/libclang/x86_64-w64-mingw32/lib -lWinmm -lodbc32 -lodbccp32 -luuid -loleaut32 -lole32 -lshell32 -ladvapi32 -lcomdlg32 -lwinspool -lgdi32 -luser32 -lkernel32 -lpropsys +LIBS += -LC:/capybara/libclang/x86_64-w64-mingw32/lib -lWinmm -lodbc32 -lodbccp32 -luuid -loleaut32 -lole32 -lshell32 -ladvapi32 -lcomdlg32 -lwinspool -lgdi32 -luser32 -lkernel32 -lpropsys #"kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" -luuid -loleaut32 -lole32 -lshell32 -ladvapi32 -lcomdlg32 -lwinspool -lgdi32 -luser32 -lkernel32 DEFINES += DEBUG QT_LOGGING_TO_CONSOLE=1 WIN32_LEAN_AND_MEAN CONFIG += debug diff --git a/src/back/backlasses.cpp b/src/back/backlasses.cpp index f5b4fa7..cf53962 100644 --- a/src/back/backlasses.cpp +++ b/src/back/backlasses.cpp @@ -569,8 +569,10 @@ void Overseer::initCOMLibrary() { //todo: wtf? why is it working? floats are ptrs... this->guid = GUIDToNGuid(&tempGuid); - //if(FAILED(CoCreateInstance(__uuidof(CPolicyConfigClient), - // NULL, CLSCTX_ALL, __uuidof(IPolicyConfig10), (LPVOID *)&policyConfig))) {exit(-1);} + HRESULT hre = CoCreateInstance(__uuidof(CPolicyConfigClient), + NULL, CLSCTX_ALL, + __uuidof(IPolicyConfig7), (LPVOID *)&policyConfig); + if (hre != S_OK) exit(-1); //TODO: Release lpguid? //TODO: Uninitialize COM @@ -606,6 +608,14 @@ void Overseer::reloadEndpoints(Flows flow) { } deviceCollection->Release(); + //IPolicyConfig7 test + deviceEnumerator->GetDefaultAudioEndpoint(MSflow, ERole::eCommunications, &temp); + LPWSTR tempString = nullptr; + temp->GetId(&tempString); + HRESULT hre = policyConfig->SetDefaultEndpoint( + tempString, + ERole::eMultimedia + ); /* * Discerning default endpoints per role diff --git a/src/back/backlasses.h b/src/back/backlasses.h index f2c0199..0cee06e 100644 --- a/src/back/backlasses.h +++ b/src/back/backlasses.h @@ -136,6 +136,7 @@ class Overseer { std::vector playbackDevices; std::vector captureDevices; void initCOMLibrary(); + IPolicyConfig7* policyConfig; //IMMDeviceCollection *deviceCollection; //int numCaptureEndpoints; //std::vector *captureDevices; diff --git a/src/back/ipolicyconfig.h b/src/back/ipolicyconfig.h index 2e10aab..7b474bb 100644 --- a/src/back/ipolicyconfig.h +++ b/src/back/ipolicyconfig.h @@ -1,47 +1,42 @@ -// ---------------------------------------------------------------------------- -// PolicyConfig.h -// Undocumented COM-interface IPolicyConfig. -// Use for set default audio render endpoint -// @author EreTIk -// ---------------------------------------------------------------------------- +#pragma once + +#ifndef __IPolicyConfig7_FWD_DEFINED__ +#define __IPolicyConfig7_FWD_DEFINED__ +typedef interface IPolicyConfig7 IPolicyConfig7; +#ifdef __cplusplus +interface IPolicyConfig7; +#endif +#endif /* __IPolicyConfig7_FWD_DEFINED__ */ + +#ifndef __CPolicyConfigClient_FWD_DEFINED__ +#define __CPolicyConfigClient_FWD_DEFINED__ +typedef class CPolicyConfigClient CPolicyConfigClient; +#endif /* __CPolicyConfigClient_FWD_DEFINED__ */ + +/***************************************************************************** + * CPolicyConfigClient coclass + */ + +DEFINE_GUID(CLSID_CPolicyConfigClient, 0x870af99c, 0x171d, 0x4f9e, 0xaf,0x0d, 0xe6,0x3d,0xf4,0x0c,0x2b,0xc9); +#ifdef __cplusplus +class DECLSPEC_UUID("870af99c-171d-4f9e-af0d-e63df40c2bc9") CPolicyConfigClient; +#ifdef __CRT_UUID_DECL +__CRT_UUID_DECL(CPolicyConfigClient, 0x870af99c, 0x171d, 0x4f9e, 0xaf,0x0d, 0xe6,0x3d,0xf4,0x0c,0x2b,0xc9) +#endif +#endif -#pragma once - - -interface DECLSPEC_UUID("CA286FC3-91FD-42C3-8E9B-CAAFA66242E3") -IPolicyConfig10; - -interface DECLSPEC_UUID("00000000-0000-0000-C000-000000000046") -IPolicyConfig10_1; - -interface DECLSPEC_UUID("F8679F50-850A-41CF-9C72-430F290290C8") -IPolicyConfig7; - -/* interface DECLSPEC_UUID("568B9108-44BF-40B4-9006-86AFE5B5A620") */ -/* IPolicyConfigVista; */ - -interface DECLSPEC_UUID("f8679f50-850a-41cf-9c72-430f290290c8") -IPolicyConfig; -class DECLSPEC_UUID("870af99c-171d-4f9e-af0d-e63df40c2bc9") -CPolicyConfigClient; -// ---------------------------------------------------------------------------- -// class CPolicyConfigClient -// {870af99c-171d-4f9e-af0d-e63df40c2bc9} -// -// interface IPolicyConfig -// {f8679f50-850a-41cf-9c72-430f290290c8} -// -// Query interface: -// CComPtr PolicyConfig; -// PolicyConfig.CoCreateInstance(__uuidof(CPolicyConfigClient)); -// -// @compatible: Windows 7 and Later -// ---------------------------------------------------------------------------- -interface IPolicyConfig : public IUnknown -{ +/***************************************************************************** + * IPolicyConfig7 interface + */ +#ifndef __IPolicyConfig7_INTERFACE_DEFINED__ +#define __IPolicyConfig7_INTERFACE_DEFINED__ +DEFINE_GUID(IID_IPolicyConfig7, 0xf8679f50, 0x850a, 0x41cf, 0x9c,0x72, 0x43,0x0f,0x29,0x02,0x90,0xc8); +#if defined(__cplusplus) && !defined(CINTERFACE) +MIDL_INTERFACE("f8679f50-850a-41cf-9c72-430f290290c8") +IPolicyConfig7 : public IUnknown { + public: - virtual HRESULT GetMixFormat( PCWSTR, WAVEFORMATEX ** @@ -107,32 +102,69 @@ public: INT ); }; +#ifdef __CRT_UUID_DECL +__CRT_UUID_DECL(IPolicyConfig7, 0xf8679f50, 0x850a, 0x41cf, 0x9c,0x72, 0x43,0x0f,0x29,0x02,0x90,0xc8) +#endif + +#endif + + +#endif /* __IPolicyConfig7_INTERFACE_DEFINED__ */ + + + + +/* __CRT_UUID_DECL(IPolicyConfig10, 0xca286fc3, 0x91fd, 0x42c3, 0x8e,0x9b, 0xca,0xaf,0xa6,0x62,0x42,0xe3) */ +/* __CRT_UUID_DECL(CPolicyConfigClient, 0x870af99c, 0x171d, 0x4f9e, 0xaf,0x0d, 0xe6,0x3d,0xf4,0x0c,0x2b,0xc9) */ + -/* interface DECLSPEC_UUID("568b9108-44bf-40b4-9006-86afe5b5a620") */ -/* IPolicyConfigVista; */ -/* class DECLSPEC_UUID("294935CE-F637-4E7C-A41B-AB255460B862") */ -/* CPolicyConfigVistaClient; */ /* // ---------------------------------------------------------------------------- */ -/* // class CPolicyConfigVistaClient */ -/* // {294935CE-F637-4E7C-A41B-AB255460B862} */ +/* // PolicyConfig.h */ +/* // Undocumented COM-interface IPolicyConfig. */ +/* // Use for set default audio render endpoint */ +/* // @author EreTIk */ +/* // ---------------------------------------------------------------------------- */ + +/* #pragma once */ + +/* interface DECLSPEC_UUID("CA286FC3-91FD-42C3-8E9B-CAAFA66242E3") */ +/* IPolicyConfig10; */ + +/* interface DECLSPEC_UUID("00000000-0000-0000-C000-000000000046") */ +/* IPolicyConfig10_1; */ + +/* interface DECLSPEC_UUID("F8679F50-850A-41CF-9C72-430F290290C8") */ +/* IPolicyConfig7; */ + +/* /\* interface DECLSPEC_UUID("568B9108-44BF-40B4-9006-86AFE5B5A620") *\/ */ +/* /\* IPolicyConfigVista; *\/ */ + +/* interface DECLSPEC_UUID("f8679f50-850a-41cf-9c72-430f290290c8") */ +/* IPolicyConfig; */ + +/* class DECLSPEC_UUID("870af99c-171d-4f9e-af0d-e63df40c2bc9") */ +/* CPolicyConfigClient; */ +/* // ---------------------------------------------------------------------------- */ +/* // class CPolicyConfigClient */ +/* // {870af99c-171d-4f9e-af0d-e63df40c2bc9} */ /* // */ -/* // interface IPolicyConfigVista */ -/* // {568b9108-44bf-40b4-9006-86afe5b5a620} */ +/* // interface IPolicyConfig */ +/* // {f8679f50-850a-41cf-9c72-430f290290c8} */ /* // */ /* // Query interface: */ -/* // CComPtr PolicyConfig; */ -/* // PolicyConfig.CoCreateInstance(__uuidof(CPolicyConfigVistaClient)); */ +/* // CComPtr PolicyConfig; */ +/* // PolicyConfig.CoCreateInstance(__uuidof(CPolicyConfigClient)); */ /* // */ -/* // @compatible: Windows Vista and Later */ +/* // @compatible: Windows 7 and Later */ /* // ---------------------------------------------------------------------------- */ -/* interface IPolicyConfigVista : public IUnknown */ +/* interface IPolicyConfig : public IUnknown */ /* { */ /* public: */ /* virtual HRESULT GetMixFormat( */ /* PCWSTR, */ /* WAVEFORMATEX ** */ -/* ); // not available on Windows 7, use method from IPolicyConfig */ +/* ); */ /* virtual HRESULT STDMETHODCALLTYPE GetDeviceFormat( */ /* PCWSTR, */ @@ -140,6 +172,10 @@ public: /* WAVEFORMATEX ** */ /* ); */ +/* virtual HRESULT STDMETHODCALLTYPE ResetDeviceFormat( */ +/* PCWSTR */ +/* ); */ + /* virtual HRESULT STDMETHODCALLTYPE SetDeviceFormat( */ /* PCWSTR, */ /* WAVEFORMATEX *, */ @@ -151,22 +187,22 @@ public: /* INT, */ /* PINT64, */ /* PINT64 */ -/* ); // not available on Windows 7, use method from IPolicyConfig */ +/* ); */ /* virtual HRESULT STDMETHODCALLTYPE SetProcessingPeriod( */ /* PCWSTR, */ /* PINT64 */ -/* ); // not available on Windows 7, use method from IPolicyConfig */ +/* ); */ /* virtual HRESULT STDMETHODCALLTYPE GetShareMode( */ /* PCWSTR, */ /* struct DeviceShareMode * */ -/* ); // not available on Windows 7, use method from IPolicyConfig */ +/* ); */ /* virtual HRESULT STDMETHODCALLTYPE SetShareMode( */ /* PCWSTR, */ /* struct DeviceShareMode * */ -/* ); // not available on Windows 7, use method from IPolicyConfig */ +/* ); */ /* virtual HRESULT STDMETHODCALLTYPE GetPropertyValue( */ /* PCWSTR, */ @@ -181,12 +217,95 @@ public: /* ); */ /* virtual HRESULT STDMETHODCALLTYPE SetDefaultEndpoint( */ -/* __in PCWSTR wszDeviceId, */ -/* __in ERole eRole */ +/* PCWSTR wszDeviceId, */ +/* ERole eRole */ /* ); */ /* virtual HRESULT STDMETHODCALLTYPE SetEndpointVisibility( */ /* PCWSTR, */ /* INT */ -/* ); // not available on Windows 7, use method from IPolicyConfig */ +/* ); */ /* }; */ + +/* /\* interface DECLSPEC_UUID("568b9108-44bf-40b4-9006-86afe5b5a620") *\/ */ +/* /\* IPolicyConfigVista; *\/ */ +/* /\* class DECLSPEC_UUID("294935CE-F637-4E7C-A41B-AB255460B862") *\/ */ +/* /\* CPolicyConfigVistaClient; *\/ */ +/* /\* // ---------------------------------------------------------------------------- *\/ */ +/* /\* // class CPolicyConfigVistaClient *\/ */ +/* /\* // {294935CE-F637-4E7C-A41B-AB255460B862} *\/ */ +/* /\* // *\/ */ +/* /\* // interface IPolicyConfigVista *\/ */ +/* /\* // {568b9108-44bf-40b4-9006-86afe5b5a620} *\/ */ +/* /\* // *\/ */ +/* /\* // Query interface: *\/ */ +/* /\* // CComPtr PolicyConfig; *\/ */ +/* /\* // PolicyConfig.CoCreateInstance(__uuidof(CPolicyConfigVistaClient)); *\/ */ +/* /\* // *\/ */ +/* /\* // @compatible: Windows Vista and Later *\/ */ +/* /\* // ---------------------------------------------------------------------------- *\/ */ +/* /\* interface IPolicyConfigVista : public IUnknown *\/ */ +/* /\* { *\/ */ +/* /\* public: *\/ */ + +/* /\* virtual HRESULT GetMixFormat( *\/ */ +/* /\* PCWSTR, *\/ */ +/* /\* WAVEFORMATEX ** *\/ */ +/* /\* ); // not available on Windows 7, use method from IPolicyConfig *\/ */ + +/* /\* virtual HRESULT STDMETHODCALLTYPE GetDeviceFormat( *\/ */ +/* /\* PCWSTR, *\/ */ +/* /\* INT, *\/ */ +/* /\* WAVEFORMATEX ** *\/ */ +/* /\* ); *\/ */ + +/* /\* virtual HRESULT STDMETHODCALLTYPE SetDeviceFormat( *\/ */ +/* /\* PCWSTR, *\/ */ +/* /\* WAVEFORMATEX *, *\/ */ +/* /\* WAVEFORMATEX * *\/ */ +/* /\* ); *\/ */ + +/* /\* virtual HRESULT STDMETHODCALLTYPE GetProcessingPeriod( *\/ */ +/* /\* PCWSTR, *\/ */ +/* /\* INT, *\/ */ +/* /\* PINT64, *\/ */ +/* /\* PINT64 *\/ */ +/* /\* ); // not available on Windows 7, use method from IPolicyConfig *\/ */ + +/* /\* virtual HRESULT STDMETHODCALLTYPE SetProcessingPeriod( *\/ */ +/* /\* PCWSTR, *\/ */ +/* /\* PINT64 *\/ */ +/* /\* ); // not available on Windows 7, use method from IPolicyConfig *\/ */ + +/* /\* virtual HRESULT STDMETHODCALLTYPE GetShareMode( *\/ */ +/* /\* PCWSTR, *\/ */ +/* /\* struct DeviceShareMode * *\/ */ +/* /\* ); // not available on Windows 7, use method from IPolicyConfig *\/ */ + +/* /\* virtual HRESULT STDMETHODCALLTYPE SetShareMode( *\/ */ +/* /\* PCWSTR, *\/ */ +/* /\* struct DeviceShareMode * *\/ */ +/* /\* ); // not available on Windows 7, use method from IPolicyConfig *\/ */ + +/* /\* virtual HRESULT STDMETHODCALLTYPE GetPropertyValue( *\/ */ +/* /\* PCWSTR, *\/ */ +/* /\* const PROPERTYKEY &, *\/ */ +/* /\* PROPVARIANT * *\/ */ +/* /\* ); *\/ */ + +/* /\* virtual HRESULT STDMETHODCALLTYPE SetPropertyValue( *\/ */ +/* /\* PCWSTR, *\/ */ +/* /\* const PROPERTYKEY &, *\/ */ +/* /\* PROPVARIANT * *\/ */ +/* /\* ); *\/ */ + +/* /\* virtual HRESULT STDMETHODCALLTYPE SetDefaultEndpoint( *\/ */ +/* /\* __in PCWSTR wszDeviceId, *\/ */ +/* /\* __in ERole eRole *\/ */ +/* /\* ); *\/ */ + +/* /\* virtual HRESULT STDMETHODCALLTYPE SetEndpointVisibility( *\/ */ +/* /\* PCWSTR, *\/ */ +/* /\* INT *\/ */ +/* /\* ); // not available on Windows 7, use method from IPolicyConfig *\/ */ +/* /\* }; *\/ */ diff --git a/src/back/msinclude.h b/src/back/msinclude.h index 9911165..16216f6 100644 --- a/src/back/msinclude.h +++ b/src/back/msinclude.h @@ -23,10 +23,10 @@ //#include #include #include -#include "ipolicyconfig.h" #include #include +#include "ipolicyconfig.h" #include "audiometerinfo.h" // IAudioMeterInformation