共用方式為


設定認證管理員

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

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

網路來源驗證