Festlegen eines Anmeldeinformationsverwaltung
Eine Anwendung, die Anmeldeinformationen für die Netzwerkquelle bereitstellt, muss folgende Schritte ausführen:
- Implementieren Sie ein Anmeldeinformations-Manager-Objekt, das die INTERFACESNetCredentialManager-Schnittstelle verfügbar macht.
- Bevor Sie die Netzwerkquelle erstellen, erstellen Sie einen neuen Eigenschaftenspeicher.
- Legen Sie die MFNETSOURCE _ CREDENTIAL _ MANAGER-Eigenschaft für den Eigenschaftenspeicher fest. Der Wert der -Eigenschaft ist ein Zeiger auf die INTERFACESNetCredentialManager-Schnittstelle.
- Übergeben Sie einen Zeiger auf den Eigenschaftenspeicher an den Quell resolver, wie unter Konfigurieren einer Medienquellebeschrieben.
Die Netzwerkquellen verwenden den Anmeldeinformations-Manager, um Benutzeranmeldeinformationen abzurufen. Wenn für die Netzwerkquelle Anmeldeinformationen für den Zugriff auf eine Netzwerkressource erforderlich sind, ruft sie die METHODE SFCNetCredentialManager::BeginGetCredentials der Anwendung auf. Dieser Aufruf startet eine asynchrone Anforderung zum Abrufen der Anmeldeinformationen des Benutzers. Die BeginGetCredentials-Methode kann die Anmeldeinformationen entweder aus dem Anmeldeinformationscache oder vom Benutzer abrufen. Anmeldeinformationen werden in einem Anmeldeinformationsobjekt gespeichert. Nach Abschluss des Vorgangs ruft die Anwendung die Rückrufschnittstelle auf, um die Netzwerkquelle zu benachrichtigen. Die Netzwerkquelle ruft DENNETCredentialManager::EndGetCredentials auf, um den asynchronen Vorgang abzuschließen.
Da es sich um einen asynchronen Vorgang handelt, muss die Anwendung den Rückruf am Ende des Vorgangs senden. Eine Schritt-für-Schritt-Anleitung zum Schreiben einer asynchronen Methode finden Sie unter Schreiben einer asynchronen Methode.
Das folgende Beispiel zeigt, wie die MFNETSOURCE _ CREDENTIAL _ MANAGER-Eigenschaft für die Netzwerkquelle festgelegt wird.
// 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;
}