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

IAMCertifiedOutputProtection

COM
IID6feded3e-0ff1-4901-a2f1-43f7012c8515継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IAMCertifiedOutputProtection インターフェースは、Certified Output Protection Protocol (COPP) メッセージをグラフィックスドライバーに送信します。

メソッド 4

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

vtbl 3 HRESULT KeyExchange(GUID* pRandom, BYTE** VarLenCertGH, DWORD* pdwLengthCertGH)

KeyExchange メソッドは、グラフィックスドライバーの証明書を返します。

pRandomGUID*outグラフィックスドライバーによって生成された 128 ビットの乱数を受け取ります。この値は IAMCertifiedOutputProtection::SessionSequenceStart メソッドで使用します。
VarLenCertGHBYTE**outグラフィックスドライバーの証明書を格納するバッファへのポインターを受け取ります。このメソッドがバッファのメモリを割り当てます。呼び出し側は CoTaskMemFree を呼び出してメモリを解放する必要があります。
pdwLengthCertGHDWORD*outVarLenCertGH で返されるバッファの長さを受け取ります。

戻り値

HRESULT 値を返します。可能な値には次のものがあります。

戻り値コード 説明
S_OK
成功しました。
E_UNEXPECTED
無効な状態です。アプリケーションが予期しないデータを渡したか、IAMCertifiedOutputProtection のメソッドを誤った順序で呼び出した可能性があります。このエラーが発生した場合、アプリケーションは現在の VMR のインスタンスを解放する必要があります。
VFW_E_NO_COPP_HW
ディスプレイデバイスが COPP をサポートしていないか、VMR がまだディスプレイデバイスに接続されていません。
ERROR_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE
ディスプレイデバイスに対応するモニターがありません。このエラーは、ディスプレイモードが変更された場合、またはユーザーがモニターの電源を切ったりモニターを取り外したりした場合に発生することがあります。

解説(Remarks)

グラフィックスドライバーの証明書には、ドライバーの公開暗号化キーが含まれています。

このメソッドが E_UNEXPECTED を返した場合、アプリケーションは VMR を解放し、VMR の新しいインスタンスを作成して、その新しいインスタンスに対して再び KeyExchange を呼び出すことで、新しい COPP セッションを作成する必要があります。

vtbl 4 HRESULT SessionSequenceStart(AMCOPPSignature* pSig)

SessionSequenceStart メソッドは、グラフィックスドライバーとの COPP セッションを開始します。

pSigAMCOPPSignature*inAMCOPPSignature 構造体へのポインター。この構造体には、解説のセクションで説明されているとおりに値を設定します。

戻り値

HRESULT 値を返します。可能な値には次のものがあります。

戻り値コード 説明
S_OK
成功しました。
E_UNEXPECTED
無効な状態です。アプリケーションが予期しないデータを渡したか、IAMCertifiedOutputProtection のメソッドを誤った順序で呼び出した可能性があります。
VFW_E_NO_COPP_HW
ディスプレイデバイスが COPP をサポートしていないか、VMR がまだディスプレイデバイスに接続されていません。

解説(Remarks)

pSig パラメーターの構造体を設定するには、まず次の数値を連結します。

次に、グラフィックスドライバーの公開暗号化キーを使用して、この数値を 2048 ビットの RSA 暗号化で暗号化します。公開暗号化キーは、KeyExchange メソッドの VarLenCertGH パラメーターで返される証明書に含まれています。
vtbl 5 HRESULT ProtectionCommand(AMCOPPCommand* cmd)

ProtectionCommand メソッドは、COPP コマンドをグラフィックスドライバーに送信します。

cmdAMCOPPCommand*inコマンドを格納する AMCOPPCommand 構造体へのポインター。

戻り値

HRESULT 値を返します。可能な値には次のものがあります。

戻り値コード 説明
S_OK
成功しました。
E_UNEXPECTED
無効な状態です。アプリケーションが予期しないデータを渡したか、IAMCertifiedOutputProtection のメソッドを誤った順序で呼び出した可能性があります。
VFW_E_NO_COPP_HW
ディスプレイデバイスが COPP をサポートしていないか、VMR がまだディスプレイデバイスに接続されていません。
vtbl 6 HRESULT ProtectionStatus(AMCOPPStatusInput* pStatusInput, AMCOPPStatusOutput* pStatusOutput)

ProtectionStatus メソッドは、COPP ステータス要求をグラフィックスドライバーに送信します。

pStatusInputAMCOPPStatusInput*inステータス要求を格納する AMCOPPStatusInput 構造体へのポインター。
pStatusOutputAMCOPPStatusOutput*outAMCOPPStatusOutput 構造体へのポインター。このメソッドは、ドライバーの応答でこの構造体を満たします。

戻り値

HRESULT 値を返します。可能な値には次のものがあります。

戻り値コード 説明
S_OK
成功しました。
E_UNEXPECTED
無効な状態です。アプリケーションが予期しないデータを渡したか、IAMCertifiedOutputProtection のメソッドを誤った順序で呼び出した可能性があります。
VFW_E_NO_COPP_HW
ディスプレイデバイスが COPP をサポートしていないか、VMR がまだディスプレイデバイスに接続されていません。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 方式にも切替可。