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

IDirect3DAuthenticatedChannel9

COM
IIDff24beee-da21-4beb-98b5-d2f899f98af9継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

グラフィックスドライバーまたは Direct3D ランタイムとの通信チャネルを提供します。このインターフェイスへのポインターを取得するには、IDirect3DDevice9Video::CreateAuthenticatedChannel を呼び出します。

メソッド 5

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

vtbl 3 HRESULT GetCertificateSize(DWORD* pCertificateSize)

ドライバーの証明書チェーンのサイズを取得します。(IDirect3DAuthenticatedChannel9.GetCertificateSize)

pCertificateSizeDWORD*inout証明書チェーンのサイズをバイト単位で受け取ります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

証明書チェーンを取得するには、IDirect3DAuthenticatedChannel9::GetCertificate を呼び出します。

チャネルの種類が D3DAUTHENTICATEDCHANNEL_D3D9 の場合、Direct3D 9 チャネルは認証をサポートしないため、このメソッドは失敗します。

vtbl 4 HRESULT GetCertificate(DWORD CertifacteSize, BYTE* ppCertificate)

ドライバーの証明書チェーンを取得します。(IDirect3DAuthenticatedChannel9.GetCertificate)

CertifacteSizeDWORDinppCertificate 配列のサイズをバイト単位で指定します。証明書チェーンのサイズを取得するには、IDirect3DAuthenticatedChannel9::GetCertificateSize を呼び出します。
ppCertificateBYTE*inoutドライバーの X.509 証明書チェーンを受け取るバイト配列へのポインターです。呼び出し元がこの配列を割り当てる必要があります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

証明書チェーンを使用すると、ドライバーの証明書が Microsoft によって署名され、失効していないことを検証できます。また、ドライバーの証明書にはドライバーの公開鍵も含まれています。この公開鍵を使用し、IDirect3DAuthenticatedChannel9::NegotiateKeyExchange メソッドを呼び出すことでセッションキーを確立します。

チャネルの種類が D3DAUTHENTICATEDCHANNEL_D3D9 の場合、Direct3D 9 チャネルは認証をサポートしないため、このメソッドは失敗します。

vtbl 5 HRESULT NegotiateKeyExchange(DWORD DataSize, void* pData)

認証されたチャネルのセッションキーを確立します。

DataSizeDWORDinpData 配列内のデータのサイズをバイト単位で指定します。
pDatavoid*inout暗号化されたセッションキーを含むバイト配列へのポインターです。このバッファーには、RSA Encryption Scheme - Optimal Asymmetric Encryption Padding (RSAES-OAEP) を使用して暗号化された 256 バイトのデータが含まれている必要があります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

チャネルの種類が D3DAUTHENTICATEDCHANNEL_D3D9 の場合、Direct3D 9 チャネルは認証をサポートしないため、このメソッドは失敗します。

vtbl 6 HRESULT Query(DWORD InputSize, void* pInput, DWORD OutputSize, void* pOutput)

認証されたチャネルにクエリを送信します。

InputSizeDWORDinpInput 配列のサイズをバイト単位で指定します。
pInputvoid*inクエリの入力データを含むバイト配列へのポインターです。この配列は常に D3DAUTHENTICATEDCHANNEL_QUERY_INPUT 構造体で始まります。構造体の QueryType メンバーがクエリを指定し、配列の残りの部分の意味を定義します。
OutputSizeDWORDinpOutput 配列のサイズをバイト単位で指定します。
pOutputvoid*inoutクエリの結果を受け取るバイト配列へのポインターです。この配列は常に D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT 構造体で始まります。配列の残りの部分の意味はクエリによって異なります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

クエリの一覧については、Content Protection Queries を参照してください。

vtbl 7 HRESULT Configure(DWORD InputSize, void* pInput, D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT* pOutput)

認証されたチャネルに構成コマンドを送信します。

InputSizeDWORDinpInput 配列のサイズをバイト単位で指定します。
pInputvoid*inコマンドの入力データを含むバイト配列へのポインターです。このバッファーは常に D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT 構造体で始まります。構造体の ConfigureType メンバーがコマンドを指定し、バッファーの残りの部分の意味を定義します。
pOutputD3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT*inoutコマンドへの応答を受け取る D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT 構造体へのポインターです。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

コマンドの一覧については、Content Protection Commands を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IDirect3DAuthenticatedChannel9 "{FF24BEEE-DA21-4BEB-98B5-D2F899F98AF9}"
#usecom global IDirect3DAuthenticatedChannel9 IID_IDirect3DAuthenticatedChannel9 "{}"
#comfunc global IDirect3DAuthenticatedChannel9_GetCertificateSize    3 var
#comfunc global IDirect3DAuthenticatedChannel9_GetCertificate        4 int,var
#comfunc global IDirect3DAuthenticatedChannel9_NegotiateKeyExchange  5 int,sptr
#comfunc global IDirect3DAuthenticatedChannel9_Query                 6 int,sptr,int,sptr
#comfunc global IDirect3DAuthenticatedChannel9_Configure             7 int,sptr,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。