Win32 API 日本語リファレンス
ホームMedia.DeviceManager › IComponentAuthenticate

IComponentAuthenticate

COM
IIDa9889c00-6d2b-11d3-8496-00c04f79dbc0継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IComponentAuthenticate インターフェースは、Windows Media Device Manager のモジュール間で安全な暗号化通信を提供します。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT SACAuth(DWORD dwProtocolID, DWORD dwPass, BYTE* pbDataIn, DWORD dwDataInLen, BYTE** ppbDataOut, DWORD* pdwDataOutLen)

SACAuth メソッドは、コンポーネント間にセキュアな認証済みチャネルを確立します。

dwProtocolIDDWORDinプロトコル識別子を格納する DWORD です。このバージョンの Windows Media Device Manager では、このパラメーターには常に SAC_PROTOCOL_V1 を設定します。
dwPassDWORDin現在の通信パスの番号を格納する DWORD です。1 つのパスは、各方向に 1 つずつ、計 2 つのメッセージで構成されます。SAC_PROTOCOL_V1 は 2 パスのプロトコルであり、各パスには 0 と 1 の番号が付けられます。
pbDataInBYTE*in入力データへのポインターです。
dwDataInLenDWORDinpbDataIn が指すデータの長さを格納する DWORD です。
ppbDataOutBYTE**out出力データへのポインターへのポインターです。
pdwDataOutLenDWORD*outppbDataOut が指すデータの長さを格納する DWORD へのポインターです。

戻り値

このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェースメソッドは、次のいずれかの種類のエラーコードを返すことがあります。

発生する可能性のあるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

このメソッドはサービスプロバイダーのみが呼び出します。プロトコル識別子に応じて、1 回以上呼び出されます。

pbDataIn および ppbDataOut のデータ構造は、dwProtocolIDdwPass の値によって決まります。

次の C++ コードは、サービスプロバイダーによる SACAuth の実装例を示しています。あらかじめ作成しておいたプライベートな CSecureChannelServer メンバーに対して CSecureChannelServer::SACAuth を呼び出しています。


HRESULT CMyServiceProvider::SACAuth(
    DWORD   dwProtocolID,
    DWORD   dwPass,
    BYTE   *pbDataIn,
    DWORD   dwDataInLen,
    BYTE  **ppbDataOut,
    DWORD  *pdwDataOutLen)
{
    HRESULT hr = S_OK;

    // Verify that the global CSecureChannelServer member is valid.
    if(g_pAppSCServer == NULL)
        return E_FAIL;

    hr = g_pAppSCServer->SACAuth(
        dwProtocolID,
        dwPass,
        pbDataIn, dwDataInLen,
        ppbDataOut, pdwDataOutLen
    );
    return hr;
}
vtbl 4 HRESULT SACGetProtocols(DWORD** ppdwProtocols, DWORD* pdwProtocolCount)

SACGetProtocols メソッドは、コンポーネントが他のコンポーネントのサポートする認証プロトコルを取得するために使用します。

ppdwProtocolsDWORD**outサポートされているプロトコルの配列へのポインターです。このバージョンの Windows Media Device Manager では、値 SAC_PROTOCOL_V1 を格納する要素数 1 の DWORD 配列です。
pdwProtocolCountDWORD*outppdwProtocols に返されるプロトコルの数を格納する DWORD へのポインターです。このバージョンでは、この数は常に 1 です。

戻り値

このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェースメソッドは、次のいずれかの種類のエラーコードを返すことがあります。

発生する可能性のあるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

このメソッドはサービスプロバイダーが実装するものであり、アプリケーションから呼び出されることはありません。

次のメソッドは、サービスプロバイダーによる SACGetProtocols メソッドの実装例を示しています。プライベートな CSecureChannelServer メンバーに対して CSecureChannelServer::SACGetProtocols を呼び出すことで実現しています。


STDMETHODIMP CMyServiceProvider::SACGetProtocols(
    DWORD **ppdwProtocols,
    DWORD  *pdwProtocolCount)
{
    HRESULT hr = E_FAIL;

    // Verify that the global CSecureChannelServer member is valid.
    if(g_pAppSCServer == NULL)
       return hr;

    hr = g_pAppSCServer->SACGetProtocols(
        ppdwProtocols,
        pdwProtocolCount
    );

    return hr;
}
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IComponentAuthenticate "{A9889C00-6D2B-11D3-8496-00C04F79DBC0}"
#usecom global IComponentAuthenticate IID_IComponentAuthenticate "{}"
#comfunc global IComponentAuthenticate_SACAuth          3 int,int,var,int,var,var
#comfunc global IComponentAuthenticate_SACGetProtocols  4 var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。