IMFContentDecryptionModule
COM公式ドキュメント
DRM キーシステム向けの Content Decryption Module (CDM) を表します。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Content Decryption Module (CDM) が使用する IMFContentEnabler インターフェイスを、呼び出し元が指定できるようにします。
| contentEnabler | IMFContentEnabler* | in | CDM が使用する IMFContentEnabler インターフェイス。 |
| result | IMFAsyncResult* | in | 操作の結果に関する情報を提供する IMFAsyncResult。 |
戻り値
成功した場合は S_OK を返します。
解説(Remarks)
通常、IMFContentEnabler は IMFInputTrustAuthority::RequestAccess を呼び出すことで取得します。
IMFContentDecryptionModuleSession のサスペンドイベント用のオブジェクトを取得します。
| notify | IMFCdmSuspendNotify** | out | サスペンド前にグローバルリソースを一貫した状態にする必要があるときに Content Decryption Module (CDM) へ通知する IMFCdmSuspendNotify オブジェクトを受け取ります。 |
戻り値
成功した場合は S_OK を返します。
保護されたプロセスを表す IMFPMPHostApp インターフェイスを、呼び出し元が指定できるようにします。
| pmpHostApp | IMFPMPHostApp* | in | 保護されたプロセスを表す IMFPMPHostApp。 |
戻り値
成功した場合は S_OK を返します。
IMFContentDecryptionModule::CreateSession 関数は、Content Decryption Module (CDM) セッションを表す IMFContentDecryptionModuleSession オブジェクトを作成します。
| sessionType | MF_MEDIAKEYSESSION_TYPE | in | 作成する CDM セッションの種類を指定する MF_MEDIAKEYSESSION_TYPE のメンバー。 |
| callbacks | IMFContentDecryptionModuleSessionCallbacks* | in | キーステータスの変更通知を受け取るための IMFContentDecryptionModuleSessionCallbacks オブジェクト。 |
| session | IMFContentDecryptionModuleSession** | out | 作成された IMFContentDecryptionModuleSession オブジェクトを受け取ります。 |
戻り値
成功した場合は S_OK を返します。
解説(Remarks)
CreateSession は、Encrypted Media Extension 仕様の createSession に基づいています。
ライセンスサーバーへのメッセージを暗号化するために使用するサーバー証明書を提供します。
| certificate | BYTE* | in | 証明書を格納する BYTE 配列。 |
| certificateSize | DWORD | in | certificate 内の配列のサイズ。 |
戻り値
成功した場合は S_OK を返します。
解説(Remarks)
SetServerCertificate は、Encrypted Media Extension 仕様の SetServerCertificate に基づいています。
コンテンツの復号を実装する IMFTrustedInput オブジェクトを作成します。
| contentInitData | BYTE* | in | 初期化データを格納する BYTE 配列。contentInitData は、IMFContentDecryptionModuleSession::GenerateRequest の initData が提供されないか不完全な場合にのみ使用されます。初期化データは PSSH Box Format で構造化する必要があります。詳細については、Encrypted Media Extension 仕様の Common SystemID and PSSH Box Format を参照してください。 |
| contentInitDataSize | DWORD | in | contentInitData 内の配列のサイズ。 |
| trustedInput | IMFTrustedInput** | out | 作成された IMFTrustedInput オブジェクトを受け取ります。 |
戻り値
成功した場合は S_OK を返します。
解説(Remarks)
Content Decryption Module (CDM) の実装には、CreateTrustedInput を呼び出すことで取得される IMFInputTrustAuthority の実装が含まれる場合があります。
IMFInputTrustAuthority の復号器では、次の属性がサポートされます。
| プロパティ | 説明 |
|---|---|
| MFT_POLICY_SET_AWARE | 0 以外の場合、IMFTransform が MEPolicySet 完了通知の受信を望んでいることを示します。 |
| MFT_USING_HARDWARE_DRM | IMFTransform がハードウェア DRM を使用しているかどうかを指定します。MFT 復号器がこの属性を 1 に設定して指定した場合、ハードウェア DRM を使用しています。MFT 復号器がこの属性を 0 に設定して指定した場合、ハードウェア DRM を使用していません。MFT 復号器がこの属性を指定しない場合、または別の値を指定した場合、ハードウェア DRM を使用しているかどうかを示していません(または示すことができません)。 |
IMFContentDecryptionModule::GetProtectionSystemIds は、IMFContentDecryptionModule がサポートする SystemID の一覧を取得します。
| systemIds | GUID** | out | SystemID を返す GUID 配列。 |
| count | DWORD* | out | systemIds パラメーターで返される SystemID の数。 |
戻り値
成功した場合は S_OK を返します。
解説(Remarks)
SystemID は、"cenc" Initialization Data Format で使用される識別子です。詳細については、"cenc" Initialization Data Format を参照してください。
systemIds のメモリは、CoTaskMem を使用して割り当ておよび解放する必要があります。
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 指定が可能。#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 sptr,int #comfunc global IMFContentDecryptionModule_CreateTrustedInput 8 sptr,int,sptr #comfunc global IMFContentDecryptionModule_GetProtectionSystemIds 9 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。