Festlegen eines Anmeldeinformations-Managers

Eine Anwendung, die Anmeldeinformationen für die Netzwerkquelle bereitstellt, muss die folgenden Schritte ausführen:

  1. Implementieren Sie ein Anmeldeinformations-Manager-Objekt, das die IMFNetCredentialManager-Schnittstelle verfügbar macht.
  2. Erstellen Sie vor dem Erstellen der Netzwerkquelle einen neuen Eigenschaftenspeicher.
  3. Legen Sie die MFNETSOURCE_CREDENTIAL_MANAGER-Eigenschaft für den Eigenschaftenspeicher fest. Der Wert der -Eigenschaft ist ein Zeiger auf die IMFNetCredentialManager-Schnittstelle .
  4. Übergeben Sie einen Zeiger an den Eigenschaftenspeicher an den Quelllöser, wie unter Konfigurieren einer Medienquelle beschrieben.

Die Netzwerkquellen verwenden den Anmeldeinformations-Manager, um Benutzeranmeldeinformationen abzurufen. Wenn die Netzwerkquelle Anmeldeinformationen für den Zugriff auf eine Netzwerkressource benötigt, ruft sie die IMFNetCredentialManager::BeginGetCredentials-Methode 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 IMFNetCredentialManager::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. Ausführliche Anweisungen 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;
}

Netzwerkquellenauthentifizierung