Condividi tramite


Impostazione di gestione credenziali

Un'applicazione che fornisce le credenziali all'origine di rete deve eseguire le operazioni seguenti:

  1. Implementare un oggetto gestore credenziali che espone l'interfaccia IMFNetCredentialManager .
  2. Prima di creare l'origine di rete, creare un nuovo archivio proprietà.
  3. Impostare la proprietà MFNETSOURCE_CREDENTIAL_MANAGER nell'archivio delle proprietà. Il valore della proprietà è un puntatore all'interfaccia IMFNetCredentialManager .
  4. Passare un puntatore all'archivio delle proprietà al resolver di origine, come descritto in Configurazione di un'origine multimediale.

Le origini di rete usano gestione credenziali per ottenere le credenziali utente. Se l'origine di rete richiede credenziali per accedere a una risorsa di rete, chiama il metodo IMFNetCredentialManager::BeginGetCredentials dell'applicazione. Questa chiamata avvia una richiesta asincrona per ottenere le credenziali dell'utente. Il metodo BeginGetCredentials può ottenere le credenziali dalla cache delle credenziali o dall'utente. Le credenziali vengono archiviate in un oggetto credenziale. Al termine dell'operazione, l'applicazione richiama l'interfaccia di callback per notificare all'origine di rete. L'origine di rete chiama IMFNetCredentialManager::EndGetCredentials per completare l'operazione asincrona.

Poiché si tratta di un'operazione asincrona, l'applicazione deve inviare il callback alla fine dell'operazione. Per istruzioni dettagliate sulla scrittura di un metodo asincrono, vedere Scrittura di un metodo asincrono.

Nell'esempio seguente viene illustrato come impostare la proprietà MFNETSOURCE_CREDENTIAL_MANAGER nell'origine di rete.

// 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;
}

Autenticazione dell'origine di rete