IAMCertifiedOutputProtection
COM公式ドキュメント
IAMCertifiedOutputProtection インターフェースは、Certified Output Protection Protocol (COPP) メッセージをグラフィックスドライバーに送信します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
KeyExchange メソッドは、グラフィックスドライバーの証明書を返します。
| pRandom | GUID* | out | グラフィックスドライバーによって生成された 128 ビットの乱数を受け取ります。この値は IAMCertifiedOutputProtection::SessionSequenceStart メソッドで使用します。 |
| VarLenCertGH | BYTE** | out | グラフィックスドライバーの証明書を格納するバッファへのポインターを受け取ります。このメソッドがバッファのメモリを割り当てます。呼び出し側は CoTaskMemFree を呼び出してメモリを解放する必要があります。 |
| pdwLengthCertGH | DWORD* | out | VarLenCertGH で返されるバッファの長さを受け取ります。 |
戻り値
HRESULT 値を返します。可能な値には次のものがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 無効な状態です。アプリケーションが予期しないデータを渡したか、IAMCertifiedOutputProtection のメソッドを誤った順序で呼び出した可能性があります。このエラーが発生した場合、アプリケーションは現在の VMR のインスタンスを解放する必要があります。 | |
| ディスプレイデバイスが COPP をサポートしていないか、VMR がまだディスプレイデバイスに接続されていません。 | |
| ディスプレイデバイスに対応するモニターがありません。このエラーは、ディスプレイモードが変更された場合、またはユーザーがモニターの電源を切ったりモニターを取り外したりした場合に発生することがあります。 |
解説(Remarks)
グラフィックスドライバーの証明書には、ドライバーの公開暗号化キーが含まれています。
このメソッドが E_UNEXPECTED を返した場合、アプリケーションは VMR を解放し、VMR の新しいインスタンスを作成して、その新しいインスタンスに対して再び KeyExchange を呼び出すことで、新しい COPP セッションを作成する必要があります。
SessionSequenceStart メソッドは、グラフィックスドライバーとの COPP セッションを開始します。
| pSig | AMCOPPSignature* | in | AMCOPPSignature 構造体へのポインター。この構造体には、解説のセクションで説明されているとおりに値を設定します。 |
戻り値
HRESULT 値を返します。可能な値には次のものがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 無効な状態です。アプリケーションが予期しないデータを渡したか、IAMCertifiedOutputProtection のメソッドを誤った順序で呼び出した可能性があります。 | |
| ディスプレイデバイスが COPP をサポートしていないか、VMR がまだディスプレイデバイスに接続されていません。 |
解説(Remarks)
pSig パラメーターの構造体を設定するには、まず次の数値を連結します。
- IAMCertifiedOutputProtection::KeyExchange メソッドの pRandom パラメーターで返される 128 ビットの数値。
- データ整合性セッションキー。この値は、アプリケーションによって生成される 128 ビットの乱数です。
- COPP ステータス要求の開始シーケンス番号。この値は、アプリケーションによって生成される 32 ビットの乱数です。
- COPP コマンドの開始シーケンス番号。この値は、アプリケーションによって生成される 32 ビットの乱数です。
ProtectionCommand メソッドは、COPP コマンドをグラフィックスドライバーに送信します。
| cmd | AMCOPPCommand* | in | コマンドを格納する AMCOPPCommand 構造体へのポインター。 |
戻り値
HRESULT 値を返します。可能な値には次のものがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 無効な状態です。アプリケーションが予期しないデータを渡したか、IAMCertifiedOutputProtection のメソッドを誤った順序で呼び出した可能性があります。 | |
| ディスプレイデバイスが COPP をサポートしていないか、VMR がまだディスプレイデバイスに接続されていません。 |
ProtectionStatus メソッドは、COPP ステータス要求をグラフィックスドライバーに送信します。
| pStatusInput | AMCOPPStatusInput* | in | ステータス要求を格納する AMCOPPStatusInput 構造体へのポインター。 |
| pStatusOutput | AMCOPPStatusOutput* | out | AMCOPPStatusOutput 構造体へのポインター。このメソッドは、ドライバーの応答でこの構造体を満たします。 |
戻り値
HRESULT 値を返します。可能な値には次のものがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 無効な状態です。アプリケーションが予期しないデータを渡したか、IAMCertifiedOutputProtection のメソッドを誤った順序で呼び出した可能性があります。 | |
| ディスプレイデバイスが COPP をサポートしていないか、VMR がまだディスプレイデバイスに接続されていません。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAMCertifiedOutputProtection "{6FEDED3E-0FF1-4901-A2F1-43F7012C8515}" #usecom global IAMCertifiedOutputProtection IID_IAMCertifiedOutputProtection "{}" #comfunc global IAMCertifiedOutputProtection_KeyExchange 3 var,var,var #comfunc global IAMCertifiedOutputProtection_SessionSequenceStart 4 var #comfunc global IAMCertifiedOutputProtection_ProtectionCommand 5 var #comfunc global IAMCertifiedOutputProtection_ProtectionStatus 6 var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IAMCertifiedOutputProtection "{6FEDED3E-0FF1-4901-A2F1-43F7012C8515}" #usecom global IAMCertifiedOutputProtection IID_IAMCertifiedOutputProtection "{}" #comfunc global IAMCertifiedOutputProtection_KeyExchange 3 sptr,sptr,sptr #comfunc global IAMCertifiedOutputProtection_SessionSequenceStart 4 sptr #comfunc global IAMCertifiedOutputProtection_ProtectionCommand 5 sptr #comfunc global IAMCertifiedOutputProtection_ProtectionStatus 6 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。