diff options
| author | Adonais Romero González <[email protected]> | 2024-05-06 16:21:31 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-05-06 16:21:31 -0700 |
| commit | a74a241c664c4e1d7c0838287b34076c19d9858a (patch) | |
| tree | 6ff7562612967b122acf8acf8a69c4dcfd5905db /wpd/WpdServiceSampleDriver/WpdServiceCapabilities.cpp | |
| parent | def8e8e34ed2b7b1deb2fc9112ac4255f1a0f2ba (diff) | |
| parent | 15477ce52bbb6b42ca591ecdfb484cac089f89ab (diff) | |
Merge develop changes prior to upcoming WDK release (May 2024)
Diffstat (limited to 'wpd/WpdServiceSampleDriver/WpdServiceCapabilities.cpp')
| -rw-r--r-- | wpd/WpdServiceSampleDriver/WpdServiceCapabilities.cpp | 832 |
1 files changed, 0 insertions, 832 deletions
diff --git a/wpd/WpdServiceSampleDriver/WpdServiceCapabilities.cpp b/wpd/WpdServiceSampleDriver/WpdServiceCapabilities.cpp deleted file mode 100644 index 7f67e199..00000000 --- a/wpd/WpdServiceSampleDriver/WpdServiceCapabilities.cpp +++ /dev/null @@ -1,832 +0,0 @@ -#include "stdafx.h" - -#include "WpdServiceCapabilities.tmh" - -WpdServiceCapabilities::WpdServiceCapabilities() : m_pContactsService(NULL) -{ - -} - -WpdServiceCapabilities::~WpdServiceCapabilities() -{ - -} - -HRESULT WpdServiceCapabilities::Initialize(_In_ FakeContactsService* pContactsService) -{ - if (pContactsService == NULL) - { - return E_POINTER; - } - m_pContactsService = pContactsService; - return S_OK; -} - -HRESULT WpdServiceCapabilities::DispatchWpdMessage( - _In_ REFPROPERTYKEY Command, - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - HRESULT hr = S_OK; - if (Command.fmtid != WPD_CATEGORY_SERVICE_CAPABILITIES) - { - hr = E_INVALIDARG; - CHECK_HR(hr, "This object does not support this command category %ws",CComBSTR(Command.fmtid)); - return hr; - } - - if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_SUPPORTED_COMMANDS)) - { - hr = OnGetSupportedCommands(pParams, pResults); - CHECK_HR(hr, "Failed to get supported commands"); - } - else if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_COMMAND_OPTIONS)) - { - hr = OnGetCommandOptions(pParams, pResults); - CHECK_HR(hr, "Failed to get command options"); - } - else if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_SUPPORTED_METHODS)) - { - hr = OnGetSupportedMethods(pParams, pResults); - CHECK_HR(hr, "Failed to get supported methods"); - } - else if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_SUPPORTED_METHODS_BY_FORMAT)) - { - hr = OnGetSupportedMethodsByFormat(pParams, pResults); - CHECK_HR(hr, "Failed to get supported methods by format"); - } - else if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_METHOD_ATTRIBUTES)) - { - hr = OnGetMethodAttributes(pParams, pResults); - CHECK_HR(hr, "Failed to get method attributes"); - } - else if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_METHOD_PARAMETER_ATTRIBUTES)) - { - hr = OnGetMethodParameterAttributes(pParams, pResults); - CHECK_HR(hr, "Failed to get method parameter attributes"); - } - else if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_SUPPORTED_FORMATS)) - { - hr = OnGetSupportedFormats(pParams, pResults); - CHECK_HR(hr, "Failed to get supported formats"); - } - else if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_FORMAT_ATTRIBUTES)) - { - hr = OnGetFormatAttributes(pParams, pResults); - CHECK_HR(hr, "Failed to get format attributes"); - } - else if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_SUPPORTED_FORMAT_PROPERTIES)) - { - hr = OnGetSupportedFormatProperties(pParams, pResults); - CHECK_HR(hr, "Failed to get supported format properties"); - } - else if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_FORMAT_PROPERTY_ATTRIBUTES)) - { - hr = OnGetFormatPropertyAttributes(pParams, pResults); - CHECK_HR(hr, "Failed to get format property attributes"); - } - else if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_SUPPORTED_EVENTS)) - { - hr = OnGetSupportedEvents(pParams, pResults); - CHECK_HR(hr, "Failed to get supported events"); - } - else if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_EVENT_ATTRIBUTES)) - { - hr = OnGetEventAttributes(pParams, pResults); - CHECK_HR(hr, "Failed to get event attributes"); - } - else if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_EVENT_PARAMETER_ATTRIBUTES)) - { - hr = OnGetEventParameterAttributes(pParams, pResults); - CHECK_HR(hr, "Failed to get event parameter attributes"); - } - else if (IsEqualPropertyKey(Command, WPD_COMMAND_SERVICE_CAPABILITIES_GET_INHERITED_SERVICES)) - { - hr = OnGetInheritedServices(pParams, pResults); - CHECK_HR(hr, "Failed to get inherited services"); - } - else - { - hr = E_NOTIMPL; - CHECK_HR(hr, "This object does not support this command id %d", Command.pid); - } - - return hr; -} - - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_SUPPORTED_COMMANDS - * command. - * - * The parameters sent to us are: - * - none. - * - * The driver should: - * - Return all commands supported by this service as an - * IPortableDeviceKeyCollection in WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_COMMANDS. - * This includes custom commands, if any. - */ -HRESULT WpdServiceCapabilities::OnGetSupportedCommands( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - UNREFERENCED_PARAMETER(pParams); - HRESULT hr = S_OK; - CComPtr<IPortableDeviceKeyCollection> pCommands; - - // CoCreate a collection to store the supported commands. - if (hr == S_OK) - { - hr = CoCreateInstance(CLSID_PortableDeviceKeyCollection, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceKeyCollection, - (VOID**) &pCommands); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceKeyCollection"); - } - - // Add the supported commands to the collection. - if (hr == S_OK) - { - hr = m_pContactsService->GetSupportedCommands(pCommands); - CHECK_HR(hr, "Failed to get the supported commands"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_COMMANDS value in the results. - if (hr == S_OK) - { - hr = pResults->SetIUnknownValue(WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_COMMANDS, pCommands); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_COMMANDS"); - } - - return hr; -} - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_COMMAND_OPTIONS - * command. - * - * The parameters sent to us are: - * - WPD_PROPERTY_SERVICE_CAPABILITIES_COMMAND: a collection of property keys containing a single value, - * which identifies the specific command options are requested to return. - * - * The driver should: - * - Return an IPortableDeviceValues in WPD_PROPERTY_SERVICE_CAPABILITIES_COMMAND_OPTIONS, containing - * the relevant options. If no options are available for this command, the driver should - * return an IPortableDeviceValues with no elements in it. - */ -HRESULT WpdServiceCapabilities::OnGetCommandOptions( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - HRESULT hr = S_OK; - PROPERTYKEY Command = WPD_PROPERTY_NULL; - CComPtr<IPortableDeviceValues> pOptions; - - // Get the command whose options have been requested - if (hr == S_OK) - { - hr = pParams->GetKeyValue(WPD_PROPERTY_SERVICE_CAPABILITIES_COMMAND, &Command); - CHECK_HR(hr, "Missing value for WPD_PROPERTY_SERVICE_CAPABILITIES_COMMAND"); - } - - // CoCreate a collection to store the command options. - if (hr == S_OK) - { - hr = CoCreateInstance(CLSID_PortableDeviceValues, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValues, - (VOID**) &pOptions); - CHECK_HR(hr, "Failed to CoCreateInstance CLSID_PortableDeviceValues"); - } - - // Add command options to the collection - if (hr == S_OK) - { - hr = m_pContactsService->GetCommandOptions(Command, pOptions); - CHECK_HR(hr, "Failed to get the command options"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_COMMAND_OPTIONS value in the results. - if (hr == S_OK) - { - hr = pResults->SetIUnknownValue(WPD_PROPERTY_SERVICE_CAPABILITIES_COMMAND_OPTIONS, pOptions); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_COMMAND_OPTIONS"); - } - - return hr; -} - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_SUPPORTED_METHODS command. - * - * The parameters sent to us are: - * - none. - * - * The driver should: - * - Return all methods supported by this service as an - * IPortableDevicePropVariantCollection in WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_METHODS. - * If no methods are available for this service, the driver should return an IPortableDevicePropVariantCollection - * with no elements in it. - */ -HRESULT WpdServiceCapabilities::OnGetSupportedMethods( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - UNREFERENCED_PARAMETER(pParams); - - CComPtr<IPortableDevicePropVariantCollection> pMethods; - - // CoCreate a collection to store the supported methods. - HRESULT hr = CoCreateInstance(CLSID_PortableDevicePropVariantCollection, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDevicePropVariantCollection, - (VOID**) &pMethods); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDevicePropVariantCollection"); - - if (hr == S_OK) - { - hr = m_pContactsService->GetSupportedMethods(pMethods); - CHECK_HR(hr, "Failed to get the supported methods"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_METHODS value in the results. - if (hr == S_OK) - { - hr = pResults->SetIPortableDevicePropVariantCollectionValue(WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_METHODS, pMethods); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_METHODS"); - } - - return hr; -} - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_SUPPORTED_METHODS_BY_FORMAT command. - * - * The parameters sent to us are: - * - WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT: Identifies the format whose methods are being requested - * - * The driver should: - * - Return an IPortableDevicePropVariantCollection in WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_METHODS, - * containing the supported methods that apply to this format. If no methods are available for this format, - * the driver should return an IPortableDevicePropVariantCollection with no elements in it. - */ -HRESULT WpdServiceCapabilities::OnGetSupportedMethodsByFormat( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - HRESULT hr = S_OK; - GUID Format = GUID_NULL; - - CComPtr<IPortableDevicePropVariantCollection> pMethods; - - // Get the format parameter - hr = pParams->GetGuidValue(WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT, &Format); - CHECK_HR(hr, "Failed to get WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT"); - - if (hr == S_OK) - { - // CoCreate a collection to store the supported methods. - hr = CoCreateInstance(CLSID_PortableDevicePropVariantCollection, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDevicePropVariantCollection, - (VOID**) &pMethods); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDevicePropVariantCollection"); - } - - if (hr == S_OK) - { - hr = m_pContactsService->GetSupportedMethodsByFormat(Format, pMethods); - CHECK_HR(hr, "Failed to get the supported methods by format"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_METHODS value in the results. - if (hr == S_OK) - { - hr = pResults->SetIPortableDevicePropVariantCollectionValue(WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_METHODS, pMethods); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_METHODS"); - } - - return hr; -} - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_METHOD_ATTRIBUTES command. - * - * The parameters sent to us are: - * - WPD_PROPERTY_SERVICE_CAPABILITIES_METHOD: Identifies the method whose attributes are being requested - * - * The driver should: - * - Return an IPortableDeviceValues in WPD_PROPERTY_SERVICE_CAPABILITIES_METHOD_ATTRIBUTES, containing - * the method attributes. If no attributes are available for this method, the driver should - * return an IPortableDeviceValues with no elements in it. - */ -HRESULT WpdServiceCapabilities::OnGetMethodAttributes( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - HRESULT hr = S_OK; - GUID Method = GUID_NULL; - - CComPtr<IPortableDeviceValues> pAttributes; - - // Get the method - hr = pParams->GetGuidValue(WPD_PROPERTY_SERVICE_CAPABILITIES_METHOD, &Method); - CHECK_HR(hr, "Failed to get WPD_PROPERTY_SERVICE_CAPABILITIES_METHOD"); - - if (hr == S_OK) - { - // CoCreate a collection to store the method attributes. - hr = CoCreateInstance(CLSID_PortableDeviceValues, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValues, - (VOID**) &pAttributes); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceValues"); - } - - if (hr == S_OK) - { - hr = m_pContactsService->GetMethodAttributes(Method, pAttributes); - CHECK_HR(hr, "Failed to add method attributes"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_METHOD_ATTRIBUTES value in the results. - if (hr == S_OK) - { - hr = pResults->SetIPortableDeviceValuesValue(WPD_PROPERTY_SERVICE_CAPABILITIES_METHOD_ATTRIBUTES, pAttributes); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_METHODS"); - } - - return hr; -} - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_METHOD_PARAMETER_ATTRIBUTES command. - * - * The parameters sent to us are: - * - WPD_PROPERTY_SERVICE_CAPABILITIES_PARAMETER: Identifies the parameter whose attributes are being requested - * - * The driver should: - * - Return an IPortableDeviceValues in WPD_PROPERTY_SERVICE_CAPABILITIES_METHOD_PARAMETER_ATTRIBUTES, containing - * the parameter attributes. If no attributes are available for this parameter, the driver should - * return an IPortableDeviceValues with no elements in it. - */ -HRESULT WpdServiceCapabilities::OnGetMethodParameterAttributes( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - HRESULT hr = S_OK; - PROPERTYKEY Parameter = WPD_PROPERTY_NULL; - - CComPtr<IPortableDeviceValues> pAttributes; - - // Get the method - hr = pParams->GetKeyValue(WPD_PROPERTY_SERVICE_CAPABILITIES_PARAMETER, &Parameter); - CHECK_HR(hr, "Failed to get WPD_PROPERTY_SERVICE_CAPABILITIES_PARAMETER"); - - if (hr == S_OK) - { - // CoCreate a collection to store the parameter attributes. - hr = CoCreateInstance(CLSID_PortableDeviceValues, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValues, - (VOID**) &pAttributes); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceValues"); - } - - if (hr == S_OK) - { - hr = m_pContactsService->GetMethodParameterAttributes(Parameter, pAttributes); - CHECK_HR(hr, "Failed to get the method parameter attributes"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_PARAMETER_ATTRIBUTES value in the results. - if (hr == S_OK) - { - hr = pResults->SetIPortableDeviceValuesValue(WPD_PROPERTY_SERVICE_CAPABILITIES_PARAMETER_ATTRIBUTES, pAttributes); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_PARAMETER_ATTRIBUTES"); - } - - return hr; -} - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_SUPPORTED_FORMATS command. - * - * The parameters sent to us are: - * - None - * - * The driver should: - * - Return an IPortableDevicePropVariantCollection in WPD_PROPERTY_SERVICE_CAPABILITIES_FORMATS, containing - * the supported formats for the service. If no formats are supported by this service, the driver should - * return an IPortableDevicePropVariantCollection with no elements in it. - */ -HRESULT WpdServiceCapabilities::OnGetSupportedFormats( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - UNREFERENCED_PARAMETER(pParams); - - CComPtr<IPortableDevicePropVariantCollection> pFormats; - - // CoCreate a collection to store the formats. - HRESULT hr = CoCreateInstance(CLSID_PortableDevicePropVariantCollection, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDevicePropVariantCollection, - (VOID**) &pFormats); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDevicePropVariantCollection"); - - if (hr == S_OK) - { - hr = m_pContactsService->GetSupportedFormats(pFormats); - CHECK_HR(hr, "Failed to get the supported formats"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_FORMATS value in the results. - if (hr == S_OK) - { - hr = pResults->SetIPortableDevicePropVariantCollectionValue(WPD_PROPERTY_SERVICE_CAPABILITIES_FORMATS, pFormats); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_FORMATS"); - } - - return hr; -} - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_FORMAT_ATTRIBUTES command. - * - * The parameters sent to us are: - * - WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT: Identifies the format whose attributes are being requested - * - * The driver should: - * - Return an IPortableDeviceValues in WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT_ATTRIBUTES, containing - * the attributes for the format. If no attributes are supported by the format, the driver should - * return an IPortableDeviceValues with no elements in it. - */ -HRESULT WpdServiceCapabilities::OnGetFormatAttributes( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - HRESULT hr = S_OK; - GUID Format = GUID_NULL; - - CComPtr<IPortableDeviceValues> pAttributes; - - // Get the format - hr = pParams->GetGuidValue(WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT, &Format); - CHECK_HR(hr, "Failed to get WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT"); - - if (hr == S_OK) - { - // CoCreate a collection to store the attributes. - hr = CoCreateInstance(CLSID_PortableDeviceValues, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValues, - (VOID**) &pAttributes); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceValues"); - } - - if (hr == S_OK) - { - hr = m_pContactsService->GetFormatAttributes(Format, pAttributes); - CHECK_HR(hr, "Failed to add format attributes"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT_ATTRIBUTES value in the results. - if (hr == S_OK) - { - hr = pResults->SetIPortableDeviceValuesValue(WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT_ATTRIBUTES, pAttributes); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT_ATTRIBUTES"); - } - - return hr; -} - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_SUPPORTED_FORMAT_PROPERTIES command. - * This list is the super-set of all properties that will be supported by an object of the given format. - * Individual objects can be queried for their properties using WPD_COMMAND_OBJECT_PROPERTIES_GET_SUPPORTED. - * Note that this method is generally much quicker than calling WPD_COMMAND_OBJECT_PROPERTIES_GET_SUPPORTED, - * since the driver does not have to perform a dynamic lookup based on a specific object. - * - * The parameters sent to us are: - * - WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT: Identifies the format whose attributes are being requested - * - * The driver should: - * - Return an IPortableDeviceKeyCollection in WPD_PROPERTY_SERVICE_CAPABILITIES_PROPERTY_KEYS, containing - * the supported properties for the format. If no properties are supported by the format, the driver should - * return an IPortableDeviceKeyCollection with no elements in it. - */ -HRESULT WpdServiceCapabilities::OnGetSupportedFormatProperties( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - HRESULT hr = S_OK; - GUID Format = GUID_NULL; - - CComPtr<IPortableDeviceKeyCollection> pKeys; - - // Get the format - hr = pParams->GetGuidValue(WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT, &Format); - CHECK_HR(hr, "Failed to get WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT"); - - if (hr == S_OK) - { - // CoCreate a collection to store the attributes. - hr = CoCreateInstance(CLSID_PortableDeviceKeyCollection, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceKeyCollection, - (VOID**) &pKeys); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceKeyCollection"); - } - - if (hr == S_OK) - { - hr = m_pContactsService->GetSupportedFormatProperties(Format, pKeys); - CHECK_HR(hr, "Failed to add the supported format properties"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_PROPERTY_KEYS value in the results. - if (hr == S_OK) - { - hr = pResults->SetIPortableDeviceKeyCollectionValue(WPD_PROPERTY_SERVICE_CAPABILITIES_PROPERTY_KEYS, pKeys); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_PROPERTY_KEYS"); - } - - return hr; -} - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_FORMAT_PROPERTY_ATTRIBUTES command. - * Often, a driver treats objects of a given format the same. Many properties therefore will have attributes - * that are identical across all objects of that format. These can be returned here. There are some attributes - * which may be differ per object instance, which are not returned here. See WPD_COMMAND_OBJECT_PROPERTIES_GET_ATTRIBUTES. - * - * The parameters sent to us are: - * - WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT: Identifies the format whose property attributes are being requested - * - WPD_PROPERTY_SERVICE_CAPABILITIES_PROPERTY_KEYS: An IPortableDeviceKeyCollection containing a single value, - * which is the key identifying the specific property attributes the driver is requested to return. - * - * The driver should: - * - Return an IPortableDeviceValues in WPD_PROPERTY_SERVICE_CAPABILITIES_PROPERTY_ATTRIBUTES, containing - * the attributes for the property. If no attributes are supported by the property, the driver should - * return an IPortableDeviceValues with no elements in it. - */ -HRESULT WpdServiceCapabilities::OnGetFormatPropertyAttributes( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - HRESULT hr = S_OK; - GUID Format = GUID_NULL; - PROPERTYKEY Property = WPD_PROPERTY_NULL; - - CComPtr<IPortableDeviceValues> pAttributes; - - // Get the format - hr = pParams->GetGuidValue(WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT, &Format); - CHECK_HR(hr, "Failed to get WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT"); - - if (hr == S_OK) - { - // Get the property - hr = pParams->GetKeyValue(WPD_PROPERTY_SERVICE_CAPABILITIES_PROPERTY_KEYS, &Property); - CHECK_HR(hr, "Failed to get WPD_PROPERTY_SERVICE_CAPABILITIES_FORMAT"); - } - - if (hr == S_OK) - { - // CoCreate a collection to store the attributes. - hr = CoCreateInstance(CLSID_PortableDeviceValues, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValues, - (VOID**) &pAttributes); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceValues"); - } - - if (hr == S_OK) - { - hr = m_pContactsService->GetPropertyAttributes(Format, Property, pAttributes); - CHECK_HR(hr, "Failed to get the supported property attributes"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_PROPERTY_ATTRIBUTES value in the results. - if (hr == S_OK) - { - hr = pResults->SetIPortableDeviceValuesValue(WPD_PROPERTY_SERVICE_CAPABILITIES_PROPERTY_ATTRIBUTES, pAttributes); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_PROPERTY_ATTRIBUTES"); - } - - return hr; - -} - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_SUPPORTED_EVENTS command. - * - * The parameters sent to us are: - * - None - * - * The driver should: - * - Return an IPortableDevicePropVariantCollection in WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_EVENTS, containing - * the events for the service. If no events are supported by the service, the driver should - * return an IPortableDevicePropVariantCollection with no elements in it. - */ -HRESULT WpdServiceCapabilities::OnGetSupportedEvents( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - UNREFERENCED_PARAMETER(pParams); - - CComPtr<IPortableDevicePropVariantCollection> pEvents; - - // CoCreate a collection to store the supported events. - HRESULT hr = CoCreateInstance(CLSID_PortableDevicePropVariantCollection, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDevicePropVariantCollection, - (VOID**) &pEvents); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDevicePropVariantCollection"); - - // Add the supported events to the collection. - if (hr == S_OK) - { - hr = m_pContactsService->GetSupportedEvents(pEvents); - CHECK_HR(hr, "Failed to get the supported events"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_EVENTS value in the results. - if (hr == S_OK) - { - hr = pResults->SetIPortableDevicePropVariantCollectionValue(WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_EVENTS, pEvents); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_EVENTS"); - } - - return hr; - -} - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_EVENT_ATTRIBUTES command. - * - * The parameters sent to us are: - * - WPD_PROPERTY_SERVICE_CAPABILITIES_EVENT: Indicates the event the caller is interested in - * - * The driver should: - * - Return an IPortableDeviceValues in WPD_PROPERTY_SERVICE_CAPABILITIES_EVENT_ATTRIBUTES, containing - * the event attributes. If there are no attributes for that event, the driver should - * return an IPortableDeviceValues with no elements in it. - */ -HRESULT WpdServiceCapabilities::OnGetEventAttributes( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - HRESULT hr = S_OK; - GUID Event = GUID_NULL; - - CComPtr<IPortableDeviceValues> pAttributes; - - // Get the format - hr = pParams->GetGuidValue(WPD_PROPERTY_SERVICE_CAPABILITIES_EVENT, &Event); - CHECK_HR(hr, "Failed to get WPD_PROPERTY_SERVICE_CAPABILITIES_EVENT"); - - if (hr == S_OK) - { - // CoCreate a collection to store the attributes. - hr = CoCreateInstance(CLSID_PortableDeviceValues, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValues, - (VOID**) &pAttributes); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceValues"); - } - - if (hr == S_OK) - { - hr = m_pContactsService->GetEventAttributes(Event, pAttributes); - CHECK_HR(hr, "Failed to add event attributes"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_SUPPORTED_EVENTS value in the results. - if (hr == S_OK) - { - hr = pResults->SetIPortableDeviceValuesValue(WPD_PROPERTY_SERVICE_CAPABILITIES_EVENT_ATTRIBUTES, pAttributes); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_EVENT_ATTRIBUTES"); - } - - return hr; -} - - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_EVENT_PARAMETER_ATTRIBUTES command. - * - * The parameters sent to us are: - * - WPD_PROPERTY_SERVICE_CAPABILITIES_PARAMETER: Identifies the parameter whose attributes are being requested - * - * The driver should: - * - Return an IPortableDeviceValues in WPD_PROPERTY_SERVICE_CAPABILITIES_EVENT_PARAMETER_ATTRIBUTES, containing - * the parameter attributes. If no attributes are available for this parameter, the driver should - * return an IPortableDeviceValues with no elements in it. - */ -HRESULT WpdServiceCapabilities::OnGetEventParameterAttributes( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - HRESULT hr = S_OK; - PROPERTYKEY Parameter = WPD_PROPERTY_NULL; - - CComPtr<IPortableDeviceValues> pAttributes; - - // Get the method - hr = pParams->GetKeyValue(WPD_PROPERTY_SERVICE_CAPABILITIES_PARAMETER, &Parameter); - CHECK_HR(hr, "Failed to get WPD_PROPERTY_SERVICE_CAPABILITIES_PARAMETER"); - - if (hr == S_OK) - { - // CoCreate a collection to store the parameter attributes. - hr = CoCreateInstance(CLSID_PortableDeviceValues, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValues, - (VOID**) &pAttributes); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceValues"); - } - - if (hr == S_OK) - { - hr = m_pContactsService->GetEventParameterAttributes(Parameter, pAttributes); - CHECK_HR(hr, "Failed to get the event parameter attributes"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_PARAMETER_ATTRIBUTES value in the results. - if (hr == S_OK) - { - hr = pResults->SetIPortableDeviceValuesValue(WPD_PROPERTY_SERVICE_CAPABILITIES_PARAMETER_ATTRIBUTES, pAttributes); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_PARAMETER_ATTRIBUTES"); - } - - return hr; -} - -/** - * This method is called when we receive a WPD_COMMAND_SERVICE_CAPABILITIES_GET_INHERITED_SERVICES command. - * - * The parameters sent to us are: - * - WPD_PROPERTY_SERVICE_CAPABILITIES_INHERITANCE_TYPE: Indicates the inheritance type the caller is interested in - * Possible values are from the WPD_SERVICE_INHERITANCE_TYPES enumeration - * - * The driver should: - * - Return an IPortableDevicePropVariantCollection in WPD_PROPERTY_SERVICE_CAPABILITIES_INHERITED_SERVICES, containing - * the inherited services. For WPD_SERVICE_INHERITANCE_IMPLEMENTATION, this will be an - * IPortableDevicePropVariantCollection (of type VT_CLSID) containing the inherited service type GUIDs. - * If there are no inherited services, the driver should return an IPortableDevicePropVariantCollection with no elements in it. - */ -HRESULT WpdServiceCapabilities::OnGetInheritedServices( - _In_ IPortableDeviceValues* pParams, - _In_ IPortableDeviceValues* pResults) -{ - HRESULT hr = S_OK; - DWORD dwInheritanceType = 0; - - CComPtr<IPortableDevicePropVariantCollection> pServices; - - hr = pParams->GetUnsignedIntegerValue(WPD_PROPERTY_SERVICE_CAPABILITIES_INHERITANCE_TYPE, &dwInheritanceType); - CHECK_HR(hr, "Failed to get WPD_PROPERTY_SERVICE_CAPABILITIES_INHERITANCE_TYPE"); - - if (hr == S_OK) - { - // CoCreate a collection to store the attributes. - hr = CoCreateInstance(CLSID_PortableDevicePropVariantCollection, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDevicePropVariantCollection, - (VOID**) &pServices); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDevicePropVariantCollection"); - } - - if (hr == S_OK) - { - hr = m_pContactsService->GetInheritedServices(dwInheritanceType, pServices); - CHECK_HR(hr, "Failed to add inherited services"); - } - - // Set the WPD_PROPERTY_SERVICE_CAPABILITIES_INHERITED_SERVICES value in the results. - if (hr == S_OK) - { - hr = pResults->SetIPortableDevicePropVariantCollectionValue(WPD_PROPERTY_SERVICE_CAPABILITIES_INHERITED_SERVICES, pServices); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_SERVICE_CAPABILITIES_EVENT_ATTRIBUTES"); - } - - return hr; -} - |
