Bagikan melalui


Mengatur Pengelola Kredensial

Aplikasi yang menyediakan kredensial ke sumber jaringan harus melakukan hal berikut:

  1. Terapkan objek manajer kredensial yang mengekspos antarmuka IMFNetCredentialManager .
  2. Sebelum Anda membuat sumber jaringan, buat penyimpanan properti baru.
  3. Atur properti MFNETSOURCE_CREDENTIAL_MANAGER di penyimpanan properti. Nilai properti adalah penunjuk ke antarmuka IMFNetCredentialManager .
  4. Teruskan penunjuk ke penyimpanan properti ke pemecah masalah sumber, seperti yang dijelaskan dalam Mengonfigurasi Sumber Media.

Sumber jaringan menggunakan manajer kredensial untuk mendapatkan kredensial pengguna. Jika sumber jaringan memerlukan kredensial untuk mengakses sumber daya jaringan, sumber daya jaringan memanggil metode IMFNetCredentialManager::BeginGetCredentials aplikasi. Panggilan ini memulai permintaan asinkron untuk mendapatkan kredensial pengguna. Metode BeginGetCredentials bisa mendapatkan kredensial baik dari cache kredensial atau dari pengguna. Kredensial disimpan dalam objek kredensial. Ketika operasi selesai, aplikasi memanggil antarmuka panggilan balik untuk memberi tahu sumber jaringan. Sumber jaringan memanggil IMFNetCredentialManager::EndGetCredentials untuk menyelesaikan operasi asinkron.

Karena ini adalah operasi asinkron, aplikasi harus mengirimkan panggilan balik di akhir operasi. Untuk instruksi langkah demi langkah tentang menulis metode asinkron, lihat Menulis Metode Asinkron.

Contoh berikut menunjukkan cara mengatur properti MFNETSOURCE_CREDENTIAL_MANAGER pada sumber jaringan.

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

Autentikasi Sumber Jaringan