IMFSSLCertificateManager
COM公式ドキュメント
クライアントが実装し、サーバーから要求されたクライアントの Secure Sockets Layer (SSL) 証明書を取得するために Microsoft Media Foundation から呼び出されます。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
クライアントの SSL 証明書を同期的に取得します。
| pszURL | LPWSTR | in | クライアント側の SSL 証明書が必要となる URL を含む文字列へのポインター。Media Foundation はスキームを解決し、サーバーに要求を送信できます。 |
| ppbData | BYTE** | out | 証明書を格納するバッファーへのポインター。 呼び出し元は CoTaskMemFree を呼び出してバッファーを解放する必要があります。 |
| pcbData | DWORD* | out | *ppbData が指すバッファー内の証明書データを保持するために必要なバイト数を受け取る DWORD 変数へのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
クライアントの SSL 証明書を取得する非同期呼び出しを開始します。
| pszURL | LPWSTR | in | クライアント側の SSL 証明書が必要となる URL を含む、null で終わる文字列。Media Foundation はスキームを解決し、サーバーに要求を送信できます。 |
| pCallback | IMFAsyncCallback* | in | コールバックオブジェクトの IMFAsyncCallback インターフェイスへのポインター。呼び出し元はこのインターフェイスを実装する必要があります。 |
| pState | IUnknown* | in | 呼び出し元が定義する状態オブジェクトの IUnknown インターフェイスへのポインター。このパラメーターは NULL でもかまいません。このオブジェクトを使用して状態情報を保持できます。コールバックが呼び出されるとき、このオブジェクトが呼び出し元に返されます。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
操作が完了すると、コールバックオブジェクトの IMFAsyncCallback::Invoke メソッドが呼び出されます。その時点で、アプリケーションは IMFSSLCertificateManager::EndGetClientCertificate を呼び出して非同期要求を完了する必要があります。
クライアントの SSL 証明書を取得する非同期要求を完了します。
| pResult | IMFAsyncResult* | in | IMFAsyncResult インターフェイスへのポインター。コールバックオブジェクトが IMFAsyncCallback::Invoke メソッドで受け取ったものと同じポインターを渡します。 |
| ppbData | BYTE** | out | 証明書を格納するバッファーへのポインターを受け取ります。 呼び出し元は CoTaskMemFree を呼び出してバッファーを解放する必要があります。 |
| pcbData | DWORD* | out | ppbData バッファーのサイズをバイト単位で受け取ります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
IMFSSLCertificateManager::BeginGetClientCertificate メソッドが非同期に完了した後に、このメソッドを呼び出します。
サーバーの SSL 証明書を、呼び出し元、Media Foundation、または IMFSSLCertificateManager の実装クラスのいずれが検証する必要があるかを示します。
| pszURL | LPWSTR | in | サーバーに送信される URL を含む文字列へのポインター。 |
| pfOverrideAutomaticCheck | BOOL* | out | BOOL 値へのポインター。サーバー証明書の検証に IMFSSLCertificateManager::OnServerCertificate を使用する場合は TRUE に設定します。 Media Foundation が Windows 証明書ストア内の証明書を使用してサーバー証明書を検証する場合は FALSE に設定します。 |
| pfClientCertificateAvailable | BOOL* | out | BOOL 値へのポインター。クライアントの SSL 証明書を即座に取得できる場合は TRUE に設定します。Media Foundation は IMFSSLCertificateManager::GetClientCertificate を呼び出してクライアント証明書を同期的に取得します。この値が FALSE に設定されている場合、Media Foundation は IMFSSLCertificateManager::BeginGetClientCertificate への非同期呼び出しによってクライアントの SSL 証明書を取得します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
サーバーの SSL 証明書を受信したときに Media Foundation から呼び出され、サーバー証明書を受け入れるかどうかを示します。
| pszURL | LPWSTR | in | サーバーへの要求送信に使用され、サーバー側の SSL 証明書を受信した URL を含む文字列へのポインター。 |
| pbData | BYTE* | in | サーバーの SSL 証明書を含むバッファーへのポインター。 |
| cbData | DWORD | in | pbData のサイズをバイト単位で示す DWORD 変数へのポインター。 |
| pfIsGood | BOOL* | out | 証明書を受け入れるかどうかを示す BOOL 変数へのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFSSLCertificateManager "{61F7D887-1230-4A8B-AEBA-8AD434D1A64D}" #usecom global IMFSSLCertificateManager IID_IMFSSLCertificateManager "{}" #comfunc global IMFSSLCertificateManager_GetClientCertificate 3 wstr,var,var #comfunc global IMFSSLCertificateManager_BeginGetClientCertificate 4 wstr,sptr,sptr #comfunc global IMFSSLCertificateManager_EndGetClientCertificate 5 sptr,var,var #comfunc global IMFSSLCertificateManager_GetCertificatePolicy 6 wstr,var,var #comfunc global IMFSSLCertificateManager_OnServerCertificate 7 wstr,var,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFSSLCertificateManager "{61F7D887-1230-4A8B-AEBA-8AD434D1A64D}" #usecom global IMFSSLCertificateManager IID_IMFSSLCertificateManager "{}" #comfunc global IMFSSLCertificateManager_GetClientCertificate 3 wstr,sptr,sptr #comfunc global IMFSSLCertificateManager_BeginGetClientCertificate 4 wstr,sptr,sptr #comfunc global IMFSSLCertificateManager_EndGetClientCertificate 5 sptr,sptr,sptr #comfunc global IMFSSLCertificateManager_GetCertificatePolicy 6 wstr,sptr,sptr #comfunc global IMFSSLCertificateManager_OnServerCertificate 7 wstr,sptr,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。