設定認證管理員
提供網路來源認證的應用程式必須執行下列動作:
- 實作認證管理員物件,此物件會公開 IMFNetCredentialManager 介面。
- 在新建網路來源之前,請先建立新的屬性儲存區。
- 在屬性存放區上設定 MFNETSOURCE_CREDENTIAL_MANAGER 屬性。 屬性的值是IMFNetCredentialManager介面指標。
- 將屬性存放區的指標傳遞至來源解析程式,方法如 設定媒體來源所述。
網路來源會使用認證管理員來取得用戶認證。 如果網路來源需要認證才能存取網路資源,它會呼叫應用程式的 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;
}
相關主題