IMFContentDecryptionModuleSession
COM公式ドキュメント
暗号化メディア拡張機能をサポートするための Content Decryption Module (CDM) へのアクセスを提供します。
解説(Remarks)
IMFContentDecryptionModuleSession は、Encrypted Media Extension 仕様の MediaKeySession に基づいています。
メソッド 8
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Content Decryption Module (CDM) によって生成される一意の文字列識別子を取得します。これはアプリケーションがセッションオブジェクトを識別するために使用できます。
| sessionId | LPWSTR* | out | セッション ID を表す LPWSTR へのポインターを受け取ります。 |
戻り値
成功した場合は S_OK を返します。
解説(Remarks)
GetSessionId は、Encrypted Media Extension 仕様の MediaKeySession.sessionId に基づいています。
CDM セッション内のすべてのキーの有効期限を取得します。
| expiration | DOUBLE* | out | セッション ID を表す LPWSTR へのポインターを受け取ります。該当する時刻が存在しない場合、またはライセンスが明示的に無期限である場合は NaN を受け取ります。 |
戻り値
S_OK を返します。
解説(Remarks)
GetExpiration は、Encrypted Media Extension 仕様の MediaKeySession.expiration に基づいています。有効期限の時刻および時刻範囲の値は、ECMA Language Specification の Time Values and Time Range に基づいています。
Content Decryption Module (CDM) セッションが認識しているキー ID と、関連付けられたキーの現在の状態を表す構造体の配列への参照を取得します。
| keyStatuses | MFMediaKeyStatus** | out | CDM セッションが認識しているキーの ID と状態を含む MFMediaKeyStatus 構造体の配列へのポインターを受け取ります。 |
| numKeyStatuses | DWORD* | out | keyStatuses 配列に含まれる構造体の数を受け取ります。 |
戻り値
S_OK を返します。エラーが発生した場合、返されるキー状態リストは空になります。
解説(Remarks)
GetKeyStatuses は、Encrypted Media Extension 仕様の MediaKeySession.keyStatuses に基づいています。
IMFContentDecryptionModuleSession::Load 関数は、指定されたセッションのデータを IMFContentDecryptionModuleSession オブジェクトに読み込みます。
| sessionId | LPWSTR | in | 読み込むセッションの一意の識別子。 |
| loaded | BOOL* | out | セッションデータが正常に読み込まれたかどうかを示す BOOL へのポインターを受け取ります。 |
戻り値
S_OK を返します。
解説(Remarks)
Load は、Encrypted Media Extension 仕様の MediaKeySession.Load に基づいています。
指定されたデータに基づいてライセンス要求を生成します。
| initDataType | LPWSTR | in | initData パラメーターで指定されたデータの種類を表す LPCWSTR。文字列の形式は、Encrypted Media Extension 仕様の Initialization Data Type で規定されています。 |
| initData | BYTE* | in | 初期化データを含む BYTE 配列。データ形式は、Encrypted Media Extension 仕様の Initialization Data で規定されています。 |
| initDataSize | DWORD | in | initData パラメーターで指定された BYTE 配列のサイズ。 |
戻り値
成功した場合は S_OK を返します。
解説(Remarks)
GenerateRequest は、Encrypted Media Extension 仕様の MediaKeySession.generateRequest に基づいています。
ライセンスを含むメッセージを Content Decryption Module (CDM) セッションに提供します。
| response | BYTE* | in | メッセージを含む BYTE 配列。 |
| responseSize | DWORD | in | response パラメーターで指定された BYTE 配列のサイズ。 |
戻り値
成功した場合は S_OK を返します。
解説(Remarks)
Update は、Encrypted Media Extension 仕様の MediaKeySession.update に基づいています。
アプリケーションがセッションを必要としなくなったことを示します。Content Decryption Module (CDM) は、セッションに関連付けられたリソースを解放してセッションを閉じる必要があります。
戻り値
成功した場合は S_OK を返します。
解説(Remarks)
Close は、Encrypted Media Extension 仕様の MediaKeySession.close に基づいています。
セッションに関連付けられたすべてのライセンスとキーを削除します。
戻り値
成功した場合は S_OK を返します。
解説(Remarks)
永続的なセッションの種類の場合、Update によって解放メッセージの確認応答が処理されると、各セッションの種類ごとに定義されているとおりに、その他のセッションデータもクリアされます。
Remove は、Encrypted Media Extension 仕様の MediaKeySession.remove に基づいています。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFContentDecryptionModuleSession "{4E233EFD-1DD2-49E8-B577-D63EEE4C0D33}" #usecom global IMFContentDecryptionModuleSession IID_IMFContentDecryptionModuleSession "{}" #comfunc global IMFContentDecryptionModuleSession_GetSessionId 3 var #comfunc global IMFContentDecryptionModuleSession_GetExpiration 4 var #comfunc global IMFContentDecryptionModuleSession_GetKeyStatuses 5 var,var #comfunc global IMFContentDecryptionModuleSession_Load 6 wstr,var #comfunc global IMFContentDecryptionModuleSession_GenerateRequest 7 wstr,var,int #comfunc global IMFContentDecryptionModuleSession_Update 8 var,int #comfunc global IMFContentDecryptionModuleSession_Close 9 #comfunc global IMFContentDecryptionModuleSession_Remove 10 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMFContentDecryptionModuleSession "{4E233EFD-1DD2-49E8-B577-D63EEE4C0D33}" #usecom global IMFContentDecryptionModuleSession IID_IMFContentDecryptionModuleSession "{}" #comfunc global IMFContentDecryptionModuleSession_GetSessionId 3 sptr #comfunc global IMFContentDecryptionModuleSession_GetExpiration 4 sptr #comfunc global IMFContentDecryptionModuleSession_GetKeyStatuses 5 sptr,sptr #comfunc global IMFContentDecryptionModuleSession_Load 6 wstr,sptr #comfunc global IMFContentDecryptionModuleSession_GenerateRequest 7 wstr,sptr,int #comfunc global IMFContentDecryptionModuleSession_Update 8 sptr,int #comfunc global IMFContentDecryptionModuleSession_Close 9 #comfunc global IMFContentDecryptionModuleSession_Remove 10 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。