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

IOPMVideoOutput

COM
IID0a15159d-41c7-4456-93e1-284cd61d4e8d継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Output Protection Manager (OPM) セッションのビデオ出力を表します。

メソッド 5

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

vtbl 3 HRESULT StartInitialization(OPM_RANDOM_NUMBER* prnRandomNumber, BYTE** ppbCertificate, DWORD* pulCertificateLength)

Output Protection Manager (OPM) セッションの初期化シーケンスを開始します。

prnRandomNumberOPM_RANDOM_NUMBER*outOPM_RANDOM_NUMBER 構造体へのポインターです。この構造体には、ディスプレイ ドライバーによって生成された 128 ビットの乱数が格納されます。この乱数は IOPMVideoOutput::FinishInitialization メソッドで必要になります。
ppbCertificateBYTE**outディスプレイ ドライバーの証明書を含むバッファーへのポインターを受け取ります。このバッファーのメモリはメソッドが割り当てます。呼び出し元は CoTaskMemFree を呼び出してメモリを解放する必要があります。
pulCertificateLengthDWORD*outppbCertificate が指すバッファーの長さを受け取ります。

戻り値

このメソッドが成功した場合は 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 の配列として扱うことができます。
vtbl 4 HRESULT FinishInitialization(OPM_ENCRYPTED_INITIALIZATION_PARAMETERS* pParameters)

Output Protection Manager (OPM) セッションの初期化シーケンスを完了します。

pParametersOPM_ENCRYPTED_INITIALIZATION_PARAMETERS*inOPM_ENCRYPTED_INITIALIZATION_PARAMETERS 構造体へのポインターです。この構造体は「解説」で説明する方法で初期化してください。

戻り値

HRESULT を返します。使用できる値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
ERROR_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR
ディスプレイ ドライバーで予期しないエラーが発生しました。
ERROR_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS
pParameters 内の暗号化されたパラメーターが正しくありません。

解説(Remarks)

このメソッドは、Certified Output Protection Protocol (COPP) における IAMCertifiedOutputProtection::SessionSequenceStart メソッドに相当します。

pParameters パラメーターは、256 バイトの配列を含む OPM_ENCRYPTED_INITIALIZATION_PARAMETERS 構造体を指します。メソッドを呼び出す前に、この配列を次のように準備してください。まず、以下の数値を連結します。

この数値を、ディスプレイ ドライバーの公開暗号化鍵を使用して RSAES-OAEP 暗号化で暗号化します。公開暗号化鍵は、StartInitialization メソッドの ppbCertificate パラメーターで返された証明書に含まれています。

アプリケーションは暗号学的に安全な乱数を使用する必要があります。必須ではありませんが、CryptGenRandom 関数の使用を推奨します。

vtbl 5 HRESULT GetInformation(OPM_GET_INFO_PARAMETERS* pParameters, OPM_REQUESTED_INFORMATION* pRequestedInformation)

Output Protection Manager (OPM) 状態要求をディスプレイ ドライバーに送信します。

pParametersOPM_GET_INFO_PARAMETERS*inOPM_GET_INFO_PARAMETERS 構造体へのポインターです。この構造体に状態要求のデータを設定します。状態要求の一覧については、OPM Status Requests を参照してください。
pRequestedInformationOPM_REQUESTED_INFORMATION*outOPM_REQUESTED_INFORMATION 構造体へのポインターです。メソッドから戻ると、この構造体に状態要求の結果が設定されます。

戻り値

HRESULT を返します。使用できる値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS
OPM オブジェクトは Certified Output Protection Protocol (COPP) セマンティクスで作成されました。

解説(Remarks)

このメソッドは、COPP における IAMCertifiedOutputProtection::ProtectionStatus メソッドに相当します。

IOPMVideoOutput インターフェイスは OPM セマンティクスと COPP セマンティクスの両方をサポートします。GetInformation メソッドは OPM セマンティクスが使用されている場合にのみ適用されます。インターフェイス ポインターが COPP セマンティクスで作成されていた場合、GetInformationERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS を返します。その場合は、代わりに IOPMVideoOutput::COPPCompatibleGetInformation を呼び出してください。

vtbl 6 HRESULT COPPCompatibleGetInformation(OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS* pParameters, OPM_REQUESTED_INFORMATION* pRequestedInformation)

Output Protection Manager (OPM) 状態要求をディスプレイ ドライバーに送信します。OPM が Certified Output Protection Manager (COPP) をエミュレートしている場合にこのメソッドを使用します。

pParametersOPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS*inOPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS 構造体へのポインターです。この構造体に状態要求のデータを設定します。状態要求の一覧については、OPM Status Requests を参照してください。
pRequestedInformationOPM_REQUESTED_INFORMATION*outOPM_REQUESTED_INFORMATION 構造体へのポインターです。メソッドから戻ると、この構造体に状態要求の結果が設定されます。

戻り値

HRESULT を返します。使用できる値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS
OPM オブジェクトは COPP セマンティクスではなく OPM セマンティクスで作成されました。

解説(Remarks)

このメソッドは、COPP における IAMCertifiedOutputProtection::ProtectionStatus メソッドに相当します。

IOPMVideoOutput インターフェイスは OPM セマンティクスと COPP セマンティクスの両方をサポートします。COPPCompatibleGetInformation メソッドは COPP セマンティクスが使用されている場合にのみ適用されます。インターフェイス ポインターが OPM セマンティクスで作成されていた場合、COPPCompatibleGetInformationERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS を返します。その場合は、代わりに IOPMVideoOutput::GetInformation を呼び出してください。

vtbl 7 HRESULT Configure(OPM_CONFIGURE_PARAMETERS* pParameters, DWORD ulAdditionalParametersSize, BYTE* pbAdditionalParameters)

ビデオ出力を構成します。

pParametersOPM_CONFIGURE_PARAMETERS*inコマンドを含む OPM_CONFIGURE_PARAMETERS 構造体へのポインターです。OPM コマンドの一覧については、OPM Commands を参照してください。
ulAdditionalParametersSizeDWORDinpbAdditionalParameters バッファーのサイズ (バイト単位)。
pbAdditionalParametersBYTE*inoptionalコマンドの追加情報を含むバッファーへのポインターです。

戻り値

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

解説(Remarks)

このメソッドは、COPP における IAMCertifiedOutputProtection::ProtectionCommand メソッドに相当します。

このメソッドは OPM セマンティクスと COPP セマンティクスの両方をサポートします。COPP セマンティクスは下位互換性のためにサポートされています。新しいアプリケーションでは OPM セマンティクスを使用してください。

OPM セマンティクス

一部の OPM コマンドでは、追加の構成情報を pbAdditionalParameters パラメーターで渡す必要があります。ulAdditionalParametersSize パラメーターは追加データのサイズを指定します。

COPP セマンティクス

pbAdditionalParameters パラメーターは NULL でなければならず、ulAdditionalParametersSize はゼロでなければなりません。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 方式にも切替可。