Skip to content

Instantly share code, notes, and snippets.

@u130b8
Created May 4, 2024 19:11
Show Gist options
  • Save u130b8/dd4fa4c9084a7a4c0749c54d44af3a7c to your computer and use it in GitHub Desktop.
Save u130b8/dd4fa4c9084a7a4c0749c54d44af3a7c to your computer and use it in GitHub Desktop.
#define IUnknown_Parent(_type) \
HRESULT(STDMETHODCALLTYPE* QueryInterface)(_type* self, const GUID* riid, void** object); \
ULONG(STDMETHODCALLTYPE* AddRef)(_type* self); \
ULONG(STDMETHODCALLTYPE* Release)(_type* self)
typedef struct IPolicyConfig IPolicyConfig;
typedef struct IPolicyConfigVista IPolicyConfigVista;
DEFINE_GUID(IID_IPolicyConfig, 0xf8679f50, 0x850a, 0x41cf, 0x9c, 0x72, 0x43, 0x0f, 0x29, 0x02, 0x90, 0xc8);
DEFINE_GUID(CLSID_PolicyConfigClient, 0x870af99c, 0x171d, 0x4f9e, 0xaf, 0x0d, 0xe6, 0x3d, 0xf4, 0x0c, 0x2b, 0xc9);
DEFINE_GUID(IID_IPolicyConfigVista, 0x568b9108, 0x44bf, 0x40b4, 0x90, 0x06, 0x86, 0xaf, 0xe5, 0xb5, 0xa6, 0x20);
DEFINE_GUID(CLSID_PolicyConfigClientVista, 0x294935CE, 0xF637, 0x4E7C, 0xA4, 0x1B, 0xAB, 0x25, 0x54, 0x60, 0xB8, 0x62);
struct IPolicyConfigVtbl {
IUnknown_Parent(IPolicyConfig);
HRESULT(STDMETHODCALLTYPE* GetMixFormat)(IPolicyConfig* this, PCWSTR id, WAVEFORMATEX** format);
HRESULT(STDMETHODCALLTYPE* GetDeviceFormat)(IPolicyConfig* this, PCWSTR id, BOOL is_default, WAVEFORMATEX** format);
HRESULT(STDMETHODCALLTYPE* ResetDeviceFormat)(IPolicyConfig* this, PCWSTR id);
HRESULT(STDMETHODCALLTYPE* SetDeviceFormat)(IPolicyConfig* this, PCWSTR id, WAVEFORMATEX* endpoint_format, WAVEFORMATEX* mix_format);
HRESULT(STDMETHODCALLTYPE* GetProcessingPeriod)(IPolicyConfig* this, PCWSTR id, BOOL is_default, PINT64 default_period, PINT64 minimum_period);
HRESULT(STDMETHODCALLTYPE* SetProcessingPeriod)(IPolicyConfig* this, PCWSTR id, PINT64 period);
HRESULT(STDMETHODCALLTYPE* GetShareMode)(IPolicyConfig* this, PCWSTR id, struct DeviceShareMode * mode);
HRESULT(STDMETHODCALLTYPE* SetShareMode)(IPolicyConfig* this, PCWSTR id, struct DeviceShareMode * mode);
HRESULT(STDMETHODCALLTYPE* GetPropertyValue)(IPolicyConfig* this, PCWSTR id, PROPERTYKEY* key, PROPVARIANT* value);
HRESULT(STDMETHODCALLTYPE* SetPropertyValue)(IPolicyConfig* this, PCWSTR id, PROPERTYKEY* key, PROPVARIANT* value);
HRESULT(STDMETHODCALLTYPE* SetDefaultEndpoint)(IPolicyConfig* this, PCWSTR id, ERole role);
HRESULT(STDMETHODCALLTYPE* SetEndpointVisibility)(IPolicyConfig* this, PCWSTR id, BOOL is_visible);
};
struct IPolicyConfig { const struct IPolicyConfigVtbl* vtbl; };
#define IPolicyConfig_GetMixFormat(this, id, format) this->vtbl->GetMixFormat(this, id, format)
#define IPolicyConfig_GetDeviceFormat(this, id, is_default, format) this->vtbl->GetDeviceFormat(this, id, is_default, format)
#define IPolicyConfig_ResetDeviceFormat(this, id) this->vtbl->ResetDeviceFormat(this, id)
#define IPolicyConfig_SetDeviceFormat(this, id, endpoint_format, mix_format) this->vtbl->SetDeviceFormat(this, id, endpoint_format, mix_format)
#define IPolicyConfig_GetProcessingPeriod(this, id, is_default, default_period, minimum_period) this->vtbl->GetProcessingPeriod(this, id, is_default, default_period, minimum_period)
#define IPolicyConfig_SetProcessingPeriod(this, id, period) this->vtbl->SetProcessingPeriod(this, id, period)
#define IPolicyConfig_GetShareMode(this, id, mode) this->vtbl->GetShareMode(this, id, mode)
#define IPolicyConfig_SetShareMode(this, id, mode) this->vtbl->SetShareMode(this, id, mode)
#define IPolicyConfig_GetPropertyValue(this, id, key, value) this->vtbl->GetPropertyValue(this, id, key, value)
#define IPolicyConfig_SetPropertyValue(this, id, key, value) this->vtbl->SetPropertyValue(this, id, key, value)
#define IPolicyConfig_SetDefaultEndpoint(this, id, role) this->vtbl->SetDefaultEndpoint(this, id, role)
#define IPolicyConfig_SetEndpointVisibility(this, id, is_visible) this->vtbl->SetEndpointVisibility(this, id, is_visible)
struct IPolicyConfigVistaVtbl {
IUnknown_Parent(IPolicyConfigVista);
HRESULT(STDMETHODCALLTYPE* GetMixFormat)(IPolicyConfigVista* this, PCWSTR id, WAVEFORMATEX** format);
HRESULT(STDMETHODCALLTYPE* GetDeviceFormat)(IPolicyConfigVista* this, PCWSTR id, BOOL is_default, WAVEFORMATEX** format);
HRESULT(STDMETHODCALLTYPE* SetDeviceFormat)(IPolicyConfigVista* this, PCWSTR id, WAVEFORMATEX* endpoint_format, WAVEFORMATEX* mix_format);
HRESULT(STDMETHODCALLTYPE* GetProcessingPeriod)(IPolicyConfigVista* this, PCWSTR id, BOOL is_default, PINT64 default_period, PINT64 minimum_period);
HRESULT(STDMETHODCALLTYPE* SetProcessingPeriod)(IPolicyConfigVista* this, PCWSTR id, PINT64 period);
HRESULT(STDMETHODCALLTYPE* GetShareMode)(IPolicyConfigVista* this, PCWSTR id, struct DeviceShareMode * mode);
HRESULT(STDMETHODCALLTYPE* SetShareMode)(IPolicyConfigVista* this, PCWSTR id, struct DeviceShareMode * mode);
HRESULT(STDMETHODCALLTYPE* GetPropertyValue)(IPolicyConfigVista* this, PCWSTR id, PROPERTYKEY* key, PROPVARIANT* value);
HRESULT(STDMETHODCALLTYPE* SetPropertyValue)(IPolicyConfigVista* this, PCWSTR id, PROPERTYKEY* key, PROPVARIANT* value);
HRESULT(STDMETHODCALLTYPE* SetDefaultEndpoint)(IPolicyConfigVista* this, PCWSTR id, ERole role);
HRESULT(STDMETHODCALLTYPE* SetEndpointVisibility)(IPolicyConfigVista* this, PCWSTR id, BOOL visible);
};
struct IPolicyConfigVista { const struct IPolicyConfigVistaVtbl* vtbl; };
#define IPolicyConfigVista_GetMixFormat(this, id, format) this->vtbl->GetMixFormat(this, id, format)
#define IPolicyConfigVista_GetDeviceFormat(this, id, is_default, format) this->vtbl->GetDeviceFormat(this, id, is_default, format)
#define IPolicyConfigVista_SetDeviceFormat(this, id, endpoint_format, mix_format) this->vtbl->SetDeviceFormat(this, id, endpoint_format, mix_format)
#define IPolicyConfigVista_GetProcessingPeriod(this, id, is_default, default_period, minimum_period) this->vtbl->GetProcessingPeriod(this, id, is_default, default_period, minimum_period)
#define IPolicyConfigVista_SetProcessingPeriod(this, id, period) this->vtbl->SetProcessingPeriod(this, id, period)
#define IPolicyConfigVista_GetShareMode(this, id, mode) this->vtbl->GetShareMode(this, id, mode)
#define IPolicyConfigVista_SetShareMode(this, id, mode) this->vtbl->SetShareMode(this, id, mode)
#define IPolicyConfigVista_GetPropertyValue(this, id, key, value) this->vtbl->GetPropertyValue(this, id, key, value)
#define IPolicyConfigVista_SetPropertyValue(this, id, key, value) this->vtbl->SetPropertyValue(this, id, key, value)
#define IPolicyConfigVista_SetDefaultEndpoint(this, id, role) this->vtbl->SetDefaultEndpoint(this, id, role)
#define IPolicyConfigVista_SetEndpointVisibility(this, id, is_visible) this->vtbl->SetEndpointVisibility(this, id, is_visible)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment