IWMDMStorage3::SetMetadata

banner art

The SetMetadata method sets metadata on the storage.

Syntax

HRESULT SetMetadata(IWMDMMetaData*pMetadata);

Parameters

pMetadata

[in]  An IWMDMMetaData pointer containing metadata to set on the object. To create this interface, call CreateEmptyMetadataObject.

Return Values

The method returns an HRESULT. All the interface methods in Windows Media Device Manager can return any of the following classes of error codes:

  • Standard COM error codes
  • Windows error codes converted to HRESULT values
  • Windows Media Device Manager error codes

For an extenstive list of possible error codes, see Error Codes.

Possible values include, but are not limited to, those in the following table. If it fails with an error, it returns a standard error code.

Return code Description
S_OK The method succeeded.
WMDM_S_NOT_ALL_PROPERTIES_APPLIED Not all the requested properties could be applied.

Remarks

Existing properties in the storage with the same name are overwritten. All other existing properties are not modified or lost.

To set properties for a Windows Portable Devices (WPD) device, an application would create an IPortableDeviceValues object and set each property into this collection. Then, the application would serialize the collection to a binary large object (BLOB). Once the data is serialized, the application would add it to the IWMDMMetaData referenced by the pMetadata argument using the g_wszWPDPassthroughPropertyValues metadata constant.

Example Code

The following C++ code adds a subtitle as metadata to a storage (pStorage3) using the IWMDMMetaData interface retrieved from the storage previously (not shown).

// Set metadata values on a storage.
WCHAR* station = L"Mysubtitle";
UINT numBytes = (wcslen(station) + 1) * sizeof(WCHAR); // WCHAR string is 2 * length of characters long
                                                       // plus the terminating null character.
hr = pMetadata->AddItem(WMDM_TYPE_STRING, g_wszWMDMMediaStationName, (BYTE*)station, numBytes) ;
BREAK_HR(hr, "Added a metadata value to the interface in TestUpdateMetadata.", "Couldn't add a metadata value to the interface in TestUpdateMetadata.");

// Add the metadata to the storage.
hr = pStorage3->SetMetadata(pMetadata);
BREAK_HR(hr, "Set metadata on the storage in TestUpdateMetadata.", "Couldn't set metadata on the storage in TestUpdateMetadata: " << hex << hr << dec);

Requirements

Header: Defined in mswmdm.h.

Library: mssachlp.lib

See Also