IDirect3DAuthenticatedChannel9
COM公式ドキュメント
グラフィックスドライバーまたは Direct3D ランタイムとの通信チャネルを提供します。このインターフェイスへのポインターを取得するには、IDirect3DDevice9Video::CreateAuthenticatedChannel を呼び出します。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ドライバーの証明書チェーンのサイズを取得します。(IDirect3DAuthenticatedChannel9.GetCertificateSize)
| pCertificateSize | DWORD* | inout | 証明書チェーンのサイズをバイト単位で受け取ります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
証明書チェーンを取得するには、IDirect3DAuthenticatedChannel9::GetCertificate を呼び出します。
チャネルの種類が D3DAUTHENTICATEDCHANNEL_D3D9 の場合、Direct3D 9 チャネルは認証をサポートしないため、このメソッドは失敗します。
ドライバーの証明書チェーンを取得します。(IDirect3DAuthenticatedChannel9.GetCertificate)
| CertifacteSize | DWORD | in | ppCertificate 配列のサイズをバイト単位で指定します。証明書チェーンのサイズを取得するには、IDirect3DAuthenticatedChannel9::GetCertificateSize を呼び出します。 |
| ppCertificate | BYTE* | inout | ドライバーの X.509 証明書チェーンを受け取るバイト配列へのポインターです。呼び出し元がこの配列を割り当てる必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
証明書チェーンを使用すると、ドライバーの証明書が Microsoft によって署名され、失効していないことを検証できます。また、ドライバーの証明書にはドライバーの公開鍵も含まれています。この公開鍵を使用し、IDirect3DAuthenticatedChannel9::NegotiateKeyExchange メソッドを呼び出すことでセッションキーを確立します。
チャネルの種類が D3DAUTHENTICATEDCHANNEL_D3D9 の場合、Direct3D 9 チャネルは認証をサポートしないため、このメソッドは失敗します。
認証されたチャネルのセッションキーを確立します。
| DataSize | DWORD | in | pData 配列内のデータのサイズをバイト単位で指定します。 |
| pData | void* | inout | 暗号化されたセッションキーを含むバイト配列へのポインターです。このバッファーには、RSA Encryption Scheme - Optimal Asymmetric Encryption Padding (RSAES-OAEP) を使用して暗号化された 256 バイトのデータが含まれている必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
チャネルの種類が D3DAUTHENTICATEDCHANNEL_D3D9 の場合、Direct3D 9 チャネルは認証をサポートしないため、このメソッドは失敗します。
認証されたチャネルにクエリを送信します。
| InputSize | DWORD | in | pInput 配列のサイズをバイト単位で指定します。 |
| pInput | void* | in | クエリの入力データを含むバイト配列へのポインターです。この配列は常に D3DAUTHENTICATEDCHANNEL_QUERY_INPUT 構造体で始まります。構造体の QueryType メンバーがクエリを指定し、配列の残りの部分の意味を定義します。 |
| OutputSize | DWORD | in | pOutput 配列のサイズをバイト単位で指定します。 |
| pOutput | void* | inout | クエリの結果を受け取るバイト配列へのポインターです。この配列は常に D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT 構造体で始まります。配列の残りの部分の意味はクエリによって異なります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
クエリの一覧については、Content Protection Queries を参照してください。
認証されたチャネルに構成コマンドを送信します。
| InputSize | DWORD | in | pInput 配列のサイズをバイト単位で指定します。 |
| pInput | void* | in | コマンドの入力データを含むバイト配列へのポインターです。このバッファーは常に D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT 構造体で始まります。構造体の ConfigureType メンバーがコマンドを指定し、バッファーの残りの部分の意味を定義します。 |
| pOutput | D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT* | inout | コマンドへの応答を受け取る D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT 構造体へのポインターです。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
コマンドの一覧については、Content Protection Commands を参照してください。
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 指定が可能。#define global IID_IDirect3DAuthenticatedChannel9 "{FF24BEEE-DA21-4BEB-98B5-D2F899F98AF9}" #usecom global IDirect3DAuthenticatedChannel9 IID_IDirect3DAuthenticatedChannel9 "{}" #comfunc global IDirect3DAuthenticatedChannel9_GetCertificateSize 3 sptr #comfunc global IDirect3DAuthenticatedChannel9_GetCertificate 4 int,sptr #comfunc global IDirect3DAuthenticatedChannel9_NegotiateKeyExchange 5 int,sptr #comfunc global IDirect3DAuthenticatedChannel9_Query 6 int,sptr,int,sptr #comfunc global IDirect3DAuthenticatedChannel9_Configure 7 int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。