Retrieving a list of Supported Resources
When an application needs to retrieve a list of resources that are supported by a given object, it will call the IPortableDeviceResources::GetSupportedResources method and pass a string that specifies the identifier for the object in question. This API call, in turn, triggers the WpdObjectResources::OnGetSupportedResources command handler in the sample driver. This method creates an IPortableDeviceKeyCollection command into which it copies a PROPERTYKEY value for each resource that is supported by the object.
HRESULT WpdObjectResources::OnGetSupportedResources(
IPortableDeviceValues* pParams,
IPortableDeviceValues* pResults)
{
HRESULT hr = S_OK;
LPWSTR wszObjectID = NULL;
CComPtr<IPortableDeviceKeyCollection> pKeys;
// Get the Object ID
hr = pParams->GetStringValue(WPD_PROPERTY_OBJECT_RESOURCES_OBJECT_ID, &wszObjectID);
if (hr != S_OK)
{
hr = E_INVALIDARG;
CHECK_HR(hr, "Missing value for WPD_PROPERTY_OBJECT_RESOURCES_OBJECT_ID");
}
// Create the collection to hold the resource keys
if (hr == S_OK)
{
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 = GetSupportedResourcesForObject(wszObjectID, pKeys);
CHECK_HR(hr, "Failed to get supported resources for object '%ws'", wszObjectID);
}
if (hr == S_OK)
{
hr = pResults->SetIUnknownValue(WPD_PROPERTY_OBJECT_RESOURCES_RESOURCE_KEYS, pKeys);
CHECK_HR(hr, "Failed to set WPD_PROPERTY_OBJECT_RESOURCES_RESOURCE_KEYS");
}
// Free the memory. CoTaskMemFree ignores NULLs so no need to check.
CoTaskMemFree(wszObjectID);
return hr;
}
Feedback
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Submit and view feedback for