IOPMVideoOutput
COM公式ドキュメント
Output Protection Manager (OPM) セッションのビデオ出力を表します。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Output Protection Manager (OPM) セッションの初期化シーケンスを開始します。
| prnRandomNumber | OPM_RANDOM_NUMBER* | out | OPM_RANDOM_NUMBER 構造体へのポインターです。この構造体には、ディスプレイ ドライバーによって生成された 128 ビットの乱数が格納されます。この乱数は IOPMVideoOutput::FinishInitialization メソッドで必要になります。 |
| ppbCertificate | BYTE** | out | ディスプレイ ドライバーの証明書を含むバッファーへのポインターを受け取ります。このバッファーのメモリはメソッドが割り当てます。呼び出し元は CoTaskMemFree を呼び出してメモリを解放する必要があります。 |
| pulCertificateLength | DWORD* | out | ppbCertificate が指すバッファーの長さを受け取ります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
このメソッドは、Certified Output Protection Protocol (COPP) における IAMCertifiedOutputProtection::KeyExchange メソッドに相当します。
このメソッドは、ドライバーの 2048 ビット RSA 公開鍵を含む証明書チェーンを返します。呼び出し元は証明書チェーンを検証し、続いて IOPMVideoOutput::FinishInitialization を呼び出して OPM セッションを確立する必要があります。
このメソッドは OPM セマンティクスと COPP セマンティクスの両方をサポートします。COPP セマンティクスは下位互換性のためにサポートされています。新しいアプリケーションでは OPM セマンティクスを使用してください。
OPM セマンティクス
このメソッドは X.509 証明書チェーンを返します。証明書チェーンは ASN.1 Distinguished Encoding Rules (DER) でエンコードされます。COPP セマンティクス
このメソッドは COPP 証明書チェーンを返します。証明書チェーンは UTF-8 文字列として返されます。ppbCertificate で返されるバッファーは char の配列として扱うことができます。Output Protection Manager (OPM) セッションの初期化シーケンスを完了します。
| pParameters | OPM_ENCRYPTED_INITIALIZATION_PARAMETERS* | in | OPM_ENCRYPTED_INITIALIZATION_PARAMETERS 構造体へのポインターです。この構造体は「解説」で説明する方法で初期化してください。 |
戻り値
HRESULT を返します。使用できる値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| ディスプレイ ドライバーで予期しないエラーが発生しました。 | |
| pParameters 内の暗号化されたパラメーターが正しくありません。 |
解説(Remarks)
このメソッドは、Certified Output Protection Protocol (COPP) における IAMCertifiedOutputProtection::SessionSequenceStart メソッドに相当します。
pParameters パラメーターは、256 バイトの配列を含む OPM_ENCRYPTED_INITIALIZATION_PARAMETERS 構造体を指します。メソッドを呼び出す前に、この配列を次のように準備してください。まず、以下の数値を連結します。
- IOPMVideoOutput::StartInitialization メソッドの prnRandomNumber パラメーターで返された 128 ビットの数値。
- AES 署名鍵。この値はアプリケーションが生成する 128 ビットの乱数です。
- OPM 状態要求の初期シーケンス番号。この値はアプリケーションが生成する 32 ビットの乱数です。
- OPM コマンドの初期シーケンス番号。この値はアプリケーションが生成する 32 ビットの乱数です。
アプリケーションは暗号学的に安全な乱数を使用する必要があります。必須ではありませんが、CryptGenRandom 関数の使用を推奨します。
Output Protection Manager (OPM) 状態要求をディスプレイ ドライバーに送信します。
| pParameters | OPM_GET_INFO_PARAMETERS* | in | OPM_GET_INFO_PARAMETERS 構造体へのポインターです。この構造体に状態要求のデータを設定します。状態要求の一覧については、OPM Status Requests を参照してください。 |
| pRequestedInformation | OPM_REQUESTED_INFORMATION* | out | OPM_REQUESTED_INFORMATION 構造体へのポインターです。メソッドから戻ると、この構造体に状態要求の結果が設定されます。 |
戻り値
HRESULT を返します。使用できる値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| OPM オブジェクトは Certified Output Protection Protocol (COPP) セマンティクスで作成されました。 |
解説(Remarks)
このメソッドは、COPP における IAMCertifiedOutputProtection::ProtectionStatus メソッドに相当します。
IOPMVideoOutput インターフェイスは OPM セマンティクスと COPP セマンティクスの両方をサポートします。GetInformation メソッドは OPM セマンティクスが使用されている場合にのみ適用されます。インターフェイス ポインターが COPP セマンティクスで作成されていた場合、GetInformation は ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS を返します。その場合は、代わりに IOPMVideoOutput::COPPCompatibleGetInformation を呼び出してください。
Output Protection Manager (OPM) 状態要求をディスプレイ ドライバーに送信します。OPM が Certified Output Protection Manager (COPP) をエミュレートしている場合にこのメソッドを使用します。
| pParameters | OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS* | in | OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS 構造体へのポインターです。この構造体に状態要求のデータを設定します。状態要求の一覧については、OPM Status Requests を参照してください。 |
| pRequestedInformation | OPM_REQUESTED_INFORMATION* | out | OPM_REQUESTED_INFORMATION 構造体へのポインターです。メソッドから戻ると、この構造体に状態要求の結果が設定されます。 |
戻り値
HRESULT を返します。使用できる値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| OPM オブジェクトは COPP セマンティクスではなく OPM セマンティクスで作成されました。 |
解説(Remarks)
このメソッドは、COPP における IAMCertifiedOutputProtection::ProtectionStatus メソッドに相当します。
IOPMVideoOutput インターフェイスは OPM セマンティクスと COPP セマンティクスの両方をサポートします。COPPCompatibleGetInformation メソッドは COPP セマンティクスが使用されている場合にのみ適用されます。インターフェイス ポインターが OPM セマンティクスで作成されていた場合、COPPCompatibleGetInformation は ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS を返します。その場合は、代わりに IOPMVideoOutput::GetInformation を呼び出してください。
ビデオ出力を構成します。
| pParameters | OPM_CONFIGURE_PARAMETERS* | in | コマンドを含む OPM_CONFIGURE_PARAMETERS 構造体へのポインターです。OPM コマンドの一覧については、OPM Commands を参照してください。 |
| ulAdditionalParametersSize | DWORD | in | pbAdditionalParameters バッファーのサイズ (バイト単位)。 |
| pbAdditionalParameters | BYTE* | inoptional | コマンドの追加情報を含むバッファーへのポインターです。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
このメソッドは、COPP における IAMCertifiedOutputProtection::ProtectionCommand メソッドに相当します。
このメソッドは OPM セマンティクスと COPP セマンティクスの両方をサポートします。COPP セマンティクスは下位互換性のためにサポートされています。新しいアプリケーションでは OPM セマンティクスを使用してください。
OPM セマンティクス
一部の OPM コマンドでは、追加の構成情報を pbAdditionalParameters パラメーターで渡す必要があります。ulAdditionalParametersSize パラメーターは追加データのサイズを指定します。COPP セマンティクス
pbAdditionalParameters パラメーターは NULL でなければならず、ulAdditionalParametersSize はゼロでなければなりません。Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IOPMVideoOutput "{0A15159D-41C7-4456-93E1-284CD61D4E8D}" #usecom global IOPMVideoOutput IID_IOPMVideoOutput "{}" #comfunc global IOPMVideoOutput_StartInitialization 3 var,var,var #comfunc global IOPMVideoOutput_FinishInitialization 4 var #comfunc global IOPMVideoOutput_GetInformation 5 var,var #comfunc global IOPMVideoOutput_COPPCompatibleGetInformation 6 var,var #comfunc global IOPMVideoOutput_Configure 7 var,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IOPMVideoOutput "{0A15159D-41C7-4456-93E1-284CD61D4E8D}" #usecom global IOPMVideoOutput IID_IOPMVideoOutput "{}" #comfunc global IOPMVideoOutput_StartInitialization 3 sptr,sptr,sptr #comfunc global IOPMVideoOutput_FinishInitialization 4 sptr #comfunc global IOPMVideoOutput_GetInformation 5 sptr,sptr #comfunc global IOPMVideoOutput_COPPCompatibleGetInformation 6 sptr,sptr #comfunc global IOPMVideoOutput_Configure 7 sptr,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。