資格情報マネージャーの設定
ネットワーク ソースに資格情報を提供するアプリケーションでは、次の操作を行う必要があります。
- IMFNetCredentialManager インターフェイスを公開する資格情報マネージャー オブジェクトを実装します。
- ネットワーク ソースを作成する前に、新しいプロパティ ストアを作成します。
- プロパティ ストアで MFNETSOURCE_CREDENTIAL_MANAGER プロパティを設定します。 プロパティの値は、 IMFNetCredentialManager インターフェイスへのポインターです。
- 「メディア ソースの構成」の説明に従って、プロパティ ストアへのポインターをソース リゾルバーに渡します。
ネットワーク ソースは、資格情報マネージャーを使用してユーザー資格情報を取得します。 ネットワーク ソースがネットワーク リソースにアクセスするために資格情報を必要とする場合は、アプリケーションの IMFNetCredentialManager::BeginGetCredentials メソッドを 呼び出します。 この呼び出しは、ユーザーの資格情報を取得する非同期要求を開始します。 BeginGetCredentials メソッドは、資格情報キャッシュまたはユーザーから資格情報を取得できます。 資格情報は資格情報 オブジェクトに格納されます。 操作が完了すると、アプリケーションはコールバック インターフェイスを呼び出してネットワーク ソースに通知します。 ネットワーク ソースは IMFNetCredentialManager::EndGetCredentials を呼び出して非同期操作を完了します。
これは非同期操作であるため、アプリケーションは操作の最後にコールバックをディスパッチする必要があります。 非同期メソッドの記述に関する詳細な手順については、「非同期メソッドの 記述」を参照してください。
次の例は、ネットワーク ソースで MFNETSOURCE_CREDENTIAL_MANAGER プロパティを設定する方法を示しています。
// 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;
}
関連トピック