Ange en autentiseringshanterare
Ett program som tillhandahåller autentiseringsuppgifter till nätverkskällan måste göra följande:
- Implementera ett autentiseringshanterarobjekt som exponerar IMFNetCredentialManager--gränssnittet.
- Innan du skapar nätverkskällan skapar du ett nytt egenskapslager.
- Ange egenskapen MFNETSOURCE_CREDENTIAL_MANAGER i egenskapsarkivet. Värdet för egenskapen är en pekare till IMFNetCredentialManager--gränssnittet.
- Skicka en pekare till egenskapsarkivet till källlösaren enligt beskrivningen i Konfigurera en mediekälla.
Nätverkskällorna använder autentiseringshanteraren för att hämta användarautentiseringsuppgifter. Om nätverkskällan kräver autentiseringsuppgifter för att komma åt en nätverksresurs anropas programmets IMFNetCredentialManager::BeginGetCredentials-metod. Det här anropet startar en asynkron begäran för att hämta användarens autentiseringsuppgifter. Metoden BeginGetCredentials kan hämta autentiseringsuppgifterna från cachen för autentiseringsuppgifter eller från användaren. Autentiseringsuppgifter lagras i ett autentiseringsobjekt. När åtgärden är klar anropar programmet motringningsgränssnittet för att meddela nätverkskällan. Nätverkskällan anropar IMFNetCredentialManager::EndGetCredentials för att slutföra den asynkrona åtgärden.
Eftersom det här är en asynkron åtgärd måste programmet skicka återanropet i slutet av åtgärden. Stegvisa instruktioner om hur du skriver en asynkron metod finns i Skriva en asynkron metod.
I följande exempel visas hur du anger egenskapen MFNETSOURCE_CREDENTIAL_MANAGER i nätverkskällan.
// 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;
}
Relaterade ämnen