共用方式為


設定認證管理員

提供認證給網路來源的應用程式必須執行下列動作:

  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;
}

網路來源驗證