Partager via


Définition d’un Gestionnaire d’informations d’identification

Une application qui fournit des informations d’identification à la source réseau doit effectuer les opérations suivantes :

  1. Implémentez un objet de gestionnaire d’informations d’identification qui expose l’interface IMFNetCredentialManager .
  2. Avant de créer la source réseau, créez un magasin de propriétés.
  3. Définissez la propriété MFNETSOURCE_CREDENTIAL_MANAGER sur le magasin de propriétés. La valeur de la propriété est un pointeur vers l’interface IMFNetCredentialManager .
  4. Passez un pointeur vers le magasin de propriétés au programme de résolution source, comme décrit dans Configuration d’une source multimédia.

Les sources réseau utilisent le gestionnaire d’informations d’identification pour obtenir les informations d’identification de l’utilisateur. Si la source réseau nécessite des informations d’identification pour accéder à une ressource réseau, elle appelle la méthode IMFNetCredentialManager::BeginGetCredentials de l’application . Cet appel démarre une demande asynchrone pour obtenir les informations d’identification de l’utilisateur. La méthode BeginGetCredentials peut obtenir les informations d’identification à partir du cache d’informations d’identification ou de l’utilisateur. Les informations d’identification sont stockées dans un objet d’informations d’identification. Une fois l’opération terminée, l’application appelle l’interface de rappel pour notifier la source réseau. La source réseau appelle IMFNetCredentialManager::EndGetCredentials pour terminer l’opération asynchrone.

Étant donné qu’il s’agit d’une opération asynchrone, l’application doit distribuer le rappel à la fin de l’opération. Pour obtenir des instructions pas à pas sur l’écriture d’une méthode asynchrone, consultez Écriture d’une méthode asynchrone.

L’exemple suivant montre comment définir la propriété MFNETSOURCE_CREDENTIAL_MANAGER sur la source réseau.

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

Authentification source réseau