シェル メタデータ プロバイダー

Windows 7 以降、Microsoft Media Foundation は IPropertyStore インターフェイスを介してメタデータを公開します。

このトピックで定義されているプロセスを使用して取得されたメタデータは、読み取り専用アクセスにのみ使用する必要があります。 このプロセスを使用したデータの書き込みはサポートされていません。 PSLookupPropertyHandlerCLSID から取得したクラス識別子 (CLSID) を使用して、IPropertyStore オブジェクトを作成できます。

メタデータの読み取り

メディア ソースからメタデータを読み取る場合は、次の手順を実行します。

  1. メディア ソースの IMFMediaSource インターフェイスへのポインターを取得します。 IMFSourceResolver インターフェイスを使用して、IMFMediaSource ポインターを取得できます。
  2. メディア ソースで MFGetService を呼び出して、 IPropertyStore インターフェイスへのポインターを取得します。 MFGetServiceguidService パラメーターで、MF_PROPERTY_HANDLER_SERVICE値を指定します。 ソースが IPropertyStore インターフェイスをサポートしていない場合、 MFGetServiceMF_E_UNSUPPORTED_SERVICEを返します。
  3. IPropertyStore メソッドを呼び出して、メタデータ プロパティを列挙します。

次のコードは、これらの手順を示しています。 が DisplayPropertyPROPVARIANT 値を表示する関数であるとします。

HRESULT EnumerateMetadata(IMFMediaSource *pSource)
{
    IPropertyStore *pProps = NULL;

    HRESULT hr = MFGetService(
        pSource, MF_PROPERTY_HANDLER_SERVICE, IID_PPV_ARGS(&pProps));

    if (FAILED(hr))
    {
        goto done;
    }

    DWORD cProps;

    hr = pProps->GetCount(&cProps);
    if (FAILED(hr))
    {
        goto done;
    }

    for (DWORD i = 0; i < cProps; i++)
    {
        PROPERTYKEY key;
        hr = pProps->GetAt(i, &key);
        if (FAILED(hr))
        {
            goto done;
        }

        PROPVARIANT pv;

        hr = pProps->GetValue(key, &pv);
        if (FAILED(hr))
        {
            goto done;
        }

        DisplayProperty(key, pv);
        PropVariantClear(&pv);
    }

done:
    SafeRelease(&pProps);
    return hr;
}

メタデータ プロパティ キーの一覧については、「 Media Files のメタデータ プロパティ」を参照してください。

メディア メタデータ