IMFInputTrustAuthority
COM公式ドキュメント
保護されたメディアパス (PMP) 内の他のコンポーネントが、入力信頼機関 (ITA) によって提供される入力保護システムを使用できるようにします。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
復号器 (decrypter) トランスフォームを取得します。
| riid | GUID* | in | 要求するインターフェイスのインターフェイス識別子 (IID)。現在、この値は IID_IMFTransform でなければならず、IMFTransform インターフェイスを要求します。 |
| ppv | void** | out | インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。使用され得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値のコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 復号器は要求されたインターフェイスをサポートしていません。 | |
| この入力信頼機関 (ITA) は復号器を提供しません。 |
解説(Remarks)
復号器は無効化された状態で作成し、IMFTransform::ProcessOutput の呼び出しが自動的に失敗するようにする必要があります。入力信頼機関 (ITA) が保護されたメディアパス (PMP) 内で実行されていることを検証した後、ITA は復号器を有効化する必要があります。
ITA は復号器を提供する必要はありません。ソースコンテンツが暗号化されていない場合、このメソッドは MF_E_NOT_PROTECTED を返す必要があります。その場合、PMP はそのストリームに対して復号器を使用せずに処理を続行します。
ITA は、GetDecrypter の呼び出しごとに復号器の新しいインスタンスを作成する必要があります。同一の復号器への複数の参照を返してはいけません。メディアセッションがそれらをトポロジの 2 つの異なるブランチに配置する可能性があるため、これらは別々のインスタンスでなければなりません。
ストリームに対して指定されたアクションを実行する許可を要求します。
| Action | MFPOLICYMANAGER_ACTION | in | 要求するアクション。MFPOLICYMANAGER_ACTION 列挙体のメンバーとして指定します。 |
| ppContentEnablerActivate | IMFActivate** | out | 値 NULL、または IMFActivate インターフェイスへのポインターを受け取ります。IMFActivate インターフェイスは、コンテンツイネーブラーオブジェクトを作成するために使用されます。呼び出し元はインターフェイスを解放する必要があります。詳細については「解説」を参照してください。 |
戻り値
このメソッドは HRESULT を返します。使用され得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値のコード | 説明 |
|---|---|
| ユーザーはこのアクションを実行する許可を持っています。 | |
| ユーザーはアプリケーションの個別化 (individualization) を行う必要があります。 | |
| ユーザーはライセンスを取得する必要があります。 |
解説(Remarks)
このメソッドは、ユーザーがストリームに対して指定されたアクションを実行する許可を持っているかどうかを検証します。ITA は、ライセンスの確認など、ユーザーがアクションを実行する権利を検証するために必要な処理を行います。
ユーザーの権利を検証するために、ITA はユーザーとの対話やユーザーの同意を必要とする追加の手順を実行しなければならない場合があります。たとえば、新しいライセンスの取得や DRM コンポーネントの個別化が必要になることがあります。その場合、ITA はコンテンツイネーブラーのアクティベーションオブジェクトを作成し、そのアクティベーションオブジェクトの IMFActivate インターフェイスを ppContentEnablerActivate パラメーターで返します。アクティベーションオブジェクトは、IMFContentEnabler インターフェイスを公開するコンテンツイネーブラーの作成を担当します。コンテンツイネーブラーは次のように使用されます。
- メディアセッションは IMFActivate ポインターをアプリケーションに返します。
- アプリケーションは IMFActivate::ActivateObject を呼び出してコンテンツイネーブラーをアクティブ化します。
- アプリケーションは IMFContentEnabler のメソッドを呼び出して、個別化やライセンスの取得など必要なアクションを実行します。コンテンツイネーブラーオブジェクトは、IMFContentEnabler インターフェイスを通じてこの機能をカプセル化する必要があります。
- メディアセッションは再び RequestAccess を呼び出します。
- ユーザーが既にアクションを実行する許可を持っている場合、このメソッドは S_OK を返し、*ppContentEnablerActivate を NULL に設定します。
- ユーザーが許可を持っていない場合、このメソッドは失敗コードを返し、*ppContentEnablerActivate を NULL に設定します。
- ITA がユーザーとの対話を必要とする追加の手順を実行しなければならない場合、このメソッドは失敗コードを返し、コンテンツイネーブラーの IMFActivate ポインターを ppContentEnablerActivate で返します。
ストリームは複数の出力先へ送られる可能性があるため、このメソッドは出力先ごとに 1 回ずつ、異なるアクションで複数回呼び出されることがあります。
このストリームで許可される出力保護システムと、各保護システムの構成データを定義するポリシーを取得します。
| Action | MFPOLICYMANAGER_ACTION | in | このストリームに対して実行されるアクション。MFPOLICYMANAGER_ACTION 列挙体のメンバーとして指定します。 |
| ppPolicy | IMFOutputPolicy** | out | IMFOutputPolicy インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。使用され得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値のコード | 説明 |
|---|---|
| メソッドは成功しました。 |
要求されたアクションが実行されようとしていることを入力信頼機関 (ITA) に通知します。
| pParam | MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS* | in | BindAccess アクションのパラメーターを含む MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。使用され得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値のコード | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドを呼び出す前に、メディアセッションは IMFInputTrustAuthority::RequestAccess を呼び出してアクションを要求します。BindAccess メソッドは、アクションが確実に実行されようとしていることを ITA に通知し、ITA が必要に応じて内部状態を更新できるようにします。このメソッドが失敗コードを返した場合、メディアセッションはアクションをキャンセルします。
指定されたアクションを実行する出力信頼機関 (OTA) の数が変化したときに、入力信頼機関 (ITA) に通知します。
| pParam | MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS* | in | UpdateAccess アクションのパラメーターを含む MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。使用され得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値のコード | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
ITA は必要に応じて内部状態を更新できます。このメソッドが失敗コードを返した場合、メディアセッションはアクションをキャンセルします。
入力信頼機関 (ITA) を初期状態にリセットします。
戻り値
このメソッドは HRESULT を返します。使用され得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値のコード | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドが呼び出されたとき、ITA は IMFInputTrustAuthority::GetDecrypter メソッドで返した復号器を無効化する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFInputTrustAuthority "{D19F8E98-B126-4446-890C-5DCB7AD71453}" #usecom global IMFInputTrustAuthority IID_IMFInputTrustAuthority "{}" #comfunc global IMFInputTrustAuthority_GetDecrypter 3 var,sptr #comfunc global IMFInputTrustAuthority_RequestAccess 4 int,sptr #comfunc global IMFInputTrustAuthority_GetPolicy 5 int,sptr #comfunc global IMFInputTrustAuthority_BindAccess 6 var #comfunc global IMFInputTrustAuthority_UpdateAccess 7 var #comfunc global IMFInputTrustAuthority_Reset 8 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFInputTrustAuthority "{D19F8E98-B126-4446-890C-5DCB7AD71453}" #usecom global IMFInputTrustAuthority IID_IMFInputTrustAuthority "{}" #comfunc global IMFInputTrustAuthority_GetDecrypter 3 sptr,sptr #comfunc global IMFInputTrustAuthority_RequestAccess 4 int,sptr #comfunc global IMFInputTrustAuthority_GetPolicy 5 int,sptr #comfunc global IMFInputTrustAuthority_BindAccess 6 sptr #comfunc global IMFInputTrustAuthority_UpdateAccess 7 sptr #comfunc global IMFInputTrustAuthority_Reset 8 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。