次の方法で共有


資格情報マネージャーの設定

ネットワーク ソースに資格情報を提供するアプリケーションでは、次の操作を行う必要があります。

  1. IMFNetCredentialManager インターフェイスを公開する資格情報マネージャー オブジェクトを実装します。
  2. ネットワーク ソースを作成する前に、新しいプロパティ ストアを作成します。
  3. プロパティ ストアで MFNETSOURCE_CREDENTIAL_MANAGER プロパティを設定します。 プロパティの値は、 IMFNetCredentialManager インターフェイスへのポインターです。
  4. 「メディア ソースの構成」の説明に従って、プロパティ ストアへのポインターをソース リゾルバーに渡します。

ネットワーク ソースは、資格情報マネージャーを使用してユーザー資格情報を取得します。 ネットワーク ソースがネットワーク リソースにアクセスするために資格情報を必要とする場合は、アプリケーションの IMFNetCredentialManager::BeginGetCredentials メソッドを 呼び出します。 この呼び出しは、ユーザーの資格情報を取得する非同期要求を開始します。 BeginGetCredentials メソッドは、資格情報キャッシュまたはユーザーから資格情報を取得できます。 資格情報は資格情報 オブジェクトに格納されます。 操作が完了すると、アプリケーションはコールバック インターフェイスを呼び出してネットワーク ソースに通知します。 ネットワーク ソースは IMFNetCredentialManager::EndGetCredentials を呼び出して非同期操作を完了します。

これは非同期操作であるため、アプリケーションは操作の最後にコールバックをディスパッチする必要があります。 非同期メソッドの記述に関する詳細な手順については、「非同期メソッドの 記述」を参照してください。

次の例は、ネットワーク ソースで MFNETSOURCE_CREDENTIAL_MANAGER プロパティを設定する方法を示しています。

// Creates a media source from a URL.
//
// Demonstrates how to set a credential manager on the network source.

HRESULT CreateMediaSourceWithCredentialManager(
    PCWSTR pszURL, 
    IMFMediaSource **ppSource
    )
{
    IPropertyStore *pConfig = NULL;

    CCredentialManager *pCredentials = new (std::nothrow) CCredentialManager();

    if (pCredentials == NULL)
    {
        return E_OUTOFMEMORY;
    }

    // Configure the property store.
    HRESULT hr = PSCreateMemoryPropertyStore(IID_PPV_ARGS(&pConfig));

    if (SUCCEEDED(hr))
    {
        PROPERTYKEY key;
        key.fmtid =  MFNETSOURCE_CREDENTIAL_MANAGER;
        key.pid = 0;

        PROPVARIANT var;
        var.vt = VT_UNKNOWN;
        pCredentials->QueryInterface(IID_PPV_ARGS(&var.punkVal));

        hr = pConfig->SetValue(key, var);

        PropVariantClear(&var);
    }

    // Create the source media source.
    if (SUCCEEDED(hr))
    {
        hr = CreateMediaSource(pszURL, pConfig, ppSource);
    }

    SafeRelease(&pConfig);
    SafeRelease(&pCredentials);

    return hr;
}

ネットワーク ソース認証