Настройка диспетчера учетных данных
Приложение, предоставляющее учетные данные источнику сети, должно выполнять следующие действия.
- Реализуйте объект диспетчера учетных данных, который предоставляет интерфейс 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;
}
Связанные темы