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

IMFContentDecryptionModule

COM
IID87be986c-10be-4943-bf48-4b54ce1983a2継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

DRM キーシステム向けの Content Decryption Module (CDM) を表します。

メソッド 7

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

vtbl 3 HRESULT SetContentEnabler(IMFContentEnabler* contentEnabler, IMFAsyncResult* result)

Content Decryption Module (CDM) が使用する IMFContentEnabler インターフェイスを、呼び出し元が指定できるようにします。

contentEnablerIMFContentEnabler*inCDM が使用する IMFContentEnabler インターフェイス。
resultIMFAsyncResult*in操作の結果に関する情報を提供する IMFAsyncResult

戻り値

成功した場合は S_OK を返します。

解説(Remarks)

通常、IMFContentEnabler は IMFInputTrustAuthority::RequestAccess を呼び出すことで取得します。

vtbl 4 HRESULT GetSuspendNotify(IMFCdmSuspendNotify** notify)

IMFContentDecryptionModuleSession のサスペンドイベント用のオブジェクトを取得します。

notifyIMFCdmSuspendNotify**outサスペンド前にグローバルリソースを一貫した状態にする必要があるときに Content Decryption Module (CDM) へ通知する IMFCdmSuspendNotify オブジェクトを受け取ります。

戻り値

成功した場合は S_OK を返します。

vtbl 5 HRESULT SetPMPHostApp(IMFPMPHostApp* pmpHostApp)

保護されたプロセスを表す IMFPMPHostApp インターフェイスを、呼び出し元が指定できるようにします。

pmpHostAppIMFPMPHostApp*in保護されたプロセスを表す IMFPMPHostApp

戻り値

成功した場合は S_OK を返します。

vtbl 6 HRESULT CreateSession(MF_MEDIAKEYSESSION_TYPE sessionType, IMFContentDecryptionModuleSessionCallbacks* callbacks, IMFContentDecryptionModuleSession** session)

IMFContentDecryptionModule::CreateSession 関数は、Content Decryption Module (CDM) セッションを表す IMFContentDecryptionModuleSession オブジェクトを作成します。

sessionTypeMF_MEDIAKEYSESSION_TYPEin作成する CDM セッションの種類を指定する MF_MEDIAKEYSESSION_TYPE のメンバー。
callbacksIMFContentDecryptionModuleSessionCallbacks*inキーステータスの変更通知を受け取るための IMFContentDecryptionModuleSessionCallbacks オブジェクト。
sessionIMFContentDecryptionModuleSession**out作成された IMFContentDecryptionModuleSession オブジェクトを受け取ります。

戻り値

成功した場合は S_OK を返します。

解説(Remarks)

CreateSession は、Encrypted Media Extension 仕様の createSession に基づいています。

vtbl 7 HRESULT SetServerCertificate(BYTE* certificate, DWORD certificateSize)

ライセンスサーバーへのメッセージを暗号化するために使用するサーバー証明書を提供します。

certificateBYTE*in証明書を格納する BYTE 配列。
certificateSizeDWORDincertificate 内の配列のサイズ。

戻り値

成功した場合は S_OK を返します。

解説(Remarks)

SetServerCertificate は、Encrypted Media Extension 仕様の SetServerCertificate に基づいています。

vtbl 8 HRESULT CreateTrustedInput(BYTE* contentInitData, DWORD contentInitDataSize, IMFTrustedInput** trustedInput)

コンテンツの復号を実装する IMFTrustedInput オブジェクトを作成します。

contentInitDataBYTE*in初期化データを格納する BYTE 配列。contentInitData は、IMFContentDecryptionModuleSession::GenerateRequest の initData が提供されないか不完全な場合にのみ使用されます。初期化データは PSSH Box Format で構造化する必要があります。詳細については、Encrypted Media Extension 仕様の Common SystemID and PSSH Box Format を参照してください。
contentInitDataSizeDWORDincontentInitData 内の配列のサイズ。
trustedInputIMFTrustedInput**out作成された IMFTrustedInput オブジェクトを受け取ります。

戻り値

成功した場合は S_OK を返します。

解説(Remarks)

Content Decryption Module (CDM) の実装には、CreateTrustedInput を呼び出すことで取得される IMFInputTrustAuthority の実装が含まれる場合があります。

IMFInputTrustAuthority の復号器では、次の属性がサポートされます。

プロパティ 説明
MFT_POLICY_SET_AWARE 0 以外の場合、IMFTransformMEPolicySet 完了通知の受信を望んでいることを示します。
MFT_USING_HARDWARE_DRM IMFTransform がハードウェア DRM を使用しているかどうかを指定します。MFT 復号器がこの属性を 1 に設定して指定した場合、ハードウェア DRM を使用しています。MFT 復号器がこの属性を 0 に設定して指定した場合、ハードウェア DRM を使用していません。MFT 復号器がこの属性を指定しない場合、または別の値を指定した場合、ハードウェア DRM を使用しているかどうかを示していません(または示すことができません)。
vtbl 9 HRESULT GetProtectionSystemIds(GUID** systemIds, DWORD* count)

IMFContentDecryptionModule::GetProtectionSystemIds は、IMFContentDecryptionModule がサポートする SystemID の一覧を取得します。

systemIdsGUID**outSystemID を返す GUID 配列。
countDWORD*outsystemIds パラメーターで返される SystemID の数。

戻り値

成功した場合は S_OK を返します。

解説(Remarks)

SystemID は、"cenc" Initialization Data Format で使用される識別子です。詳細については、"cenc" Initialization Data Format を参照してください。

systemIds のメモリは、CoTaskMem を使用して割り当ておよび解放する必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IMFContentDecryptionModule "{87BE986C-10BE-4943-BF48-4B54CE1983A2}"
#usecom global IMFContentDecryptionModule IID_IMFContentDecryptionModule "{}"
#comfunc global IMFContentDecryptionModule_SetContentEnabler       3 sptr,sptr
#comfunc global IMFContentDecryptionModule_GetSuspendNotify        4 sptr
#comfunc global IMFContentDecryptionModule_SetPMPHostApp           5 sptr
#comfunc global IMFContentDecryptionModule_CreateSession           6 int,sptr,sptr
#comfunc global IMFContentDecryptionModule_SetServerCertificate    7 var,int
#comfunc global IMFContentDecryptionModule_CreateTrustedInput      8 var,int,sptr
#comfunc global IMFContentDecryptionModule_GetProtectionSystemIds  9 var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。