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

IMFContentProtectionManager

COM
IIDacf92459-6a61-42bd-b57c-b43e51203cb0継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

コンテンツイネーブラーオブジェクトへのポインターをアプリケーションに提供することで、保護されたコンテンツの再生を可能にします。

解説(Remarks)

コンテンツイネーブラーは、保護されたコンテンツを再生するために必要な何らかのアクションを実行するオブジェクトです。たとえば、そのアクションとは DRM ライセンスの取得などです。コンテンツイネーブラーは IMFContentEnabler インターフェイスを公開します。このインターフェイスは、コンテンツイネーブラーのための汎用的なメカニズムを定義します。コンテンツイネーブラーは、保護されたメディアパス (PMP) プロセス内で作成されます。ただし、これらはアプリケーションプロセスから呼び出す必要があります。そのため、IMFContentProtectionManager インターフェイスは、PMP Media Session がアプリケーションに通知するための手段を提供します。

このインターフェイスを使用するには、次の手順を実行します。

  1. アプリケーションでこのインターフェイスを実装します。
  2. MFCreateAttributes を呼び出して、属性ストアを作成します。
  3. 属性ストアに MF_SESSION_CONTENT_PROTECTION_MANAGER 属性を設定します。属性値は、実装した IMFContentProtectionManager へのポインターです。
  4. MFCreatePMPMediaSession を呼び出し、pConfiguration パラメーターに属性ストアを渡します。
コンテンツがコンテンツイネーブラーを必要とする場合、アプリケーションの BeginEnableContent メソッドが呼び出されます。通常、このメソッドは IMFMediaSession::SetTopology 操作の間に、Media Session が MESessionTopologySet イベントを発生させる前に呼び出されます。アプリケーションは、単一のコンテンツに対して複数の BeginEnableContent 呼び出しを受け取ることがあります。MESessionTopologySet イベントは、現在のトポロジーに対するコンテンツ有効化処理が完了したことを示します。BeginEnableContent メソッドは、SetTopology 操作以外からも呼び出されることがありますが、それはあまり一般的ではありません。

多くのコンテンツイネーブラーは、マシン固有のデータをネットワークに送信します。これはプライバシー上の影響を及ぼす可能性があります。IMFContentProtectionManager インターフェイスの目的の 1 つは、アプリケーションがユーザーに情報を表示し、ユーザーがその処理を許可するか拒否するかを選択できる機会を提供することです。

メソッド 2

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

vtbl 3 HRESULT BeginEnableContent(IMFActivate* pEnablerActivate, IMFTopology* pTopo, IMFAsyncCallback* pCallback, IUnknown* punkState)

コンテンツ有効化アクションを実行する非同期要求を開始します。

pEnablerActivateIMFActivate*inコンテンツイネーブラーオブジェクトの IMFActivate インターフェイスへのポインター。コンテンツイネーブラーを作成するには、IMFActivate::ActivateObject を呼び出し、IMFContentEnabler インターフェイスを要求します。アプリケーションは、IMFContentEnabler のメソッドを使用してコンテンツ有効化アクションを完了する必要があります。
pTopoIMFTopology*in保留中のトポロジーの IMFTopology インターフェイスへのポインター。
pCallbackIMFAsyncCallback*inコールバックオブジェクトの IMFAsyncCallback インターフェイスへのポインター。操作が完了したら、アプリケーションはコールバックに対して IMFAsyncCallback::Invoke を呼び出す必要があります。
punkStateIUnknown*in予約されています。現在、このパラメーターは常に NULL です。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

このコールバックメソッド内でブロックしないでください。代わりに、コンテンツ有効化アクションを別のスレッドで非同期に実行してください。操作が完了したら、pCallback パラメーターを通じて保護されたメディアパス (PMP) に通知します。

このメソッドから成功コードを返した場合は、コールバックに対して Invoke を呼び出す必要があります。逆に、このメソッドからエラーコードを返した場合は、Invoke を呼び出してはなりません。メソッドが成功コードを返した後で操作が失敗した場合は、IMFAsyncResult オブジェクトのステータスコードを使用してエラーを報告します。

コールバックが呼び出された後、PMP はアプリケーションの IMFContentProtectionManager::EndEnableContent メソッドを呼び出して非同期呼び出しを完了します。

このメソッドは、アプリケーションが保護されたコンテンツを再生するたびに必ず呼び出されるわけではありません。一般に、ユーザーがそのコンテンツに対する有効で最新のライセンスを持っている場合、このメソッドは呼び出されません。内部的には、入力信頼機関 (ITA) が、コンテンツプロバイダーの DRM ポリシーに基づいて BeginEnableContent を呼び出すかどうかを決定します。詳細については、「Protected Media Path」を参照してください。

vtbl 4 HRESULT EndEnableContent(IMFAsyncResult* pResult)

コンテンツ有効化アクションを実行する非同期要求を終了します。このメソッドは、IMFContentProtectionManager::BeginEnableContent への非同期呼び出しを完了するために、保護されたメディアパス (PMP) によって呼び出されます。

pResultIMFAsyncResult*inIMFAsyncResult インターフェイスへのポインター。このポインターは、アプリケーションが呼び出し元の IMFAsyncCallback::Invoke メソッドに渡したものと同じ値です。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

BeginEnableContent メソッドが非同期に完了すると、アプリケーションは非同期コールバックを呼び出して PMP に通知します。PMP はアプリケーションに対して EndEnableContent を呼び出し、結果コードを取得します。このメソッドは、コールバックメソッド内からアプリケーションのスレッド上で呼び出されます。そのため、コールバックを呼び出したスレッドをブロックしてはなりません。

アプリケーションは、BeginEnableContent の呼び出しに続いて行われた非同期処理の成功または失敗コードを返す必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IMFContentProtectionManager "{ACF92459-6A61-42BD-B57C-B43E51203CB0}"
#usecom global IMFContentProtectionManager IID_IMFContentProtectionManager "{}"
#comfunc global IMFContentProtectionManager_BeginEnableContent  3 sptr,sptr,sptr,sptr
#comfunc global IMFContentProtectionManager_EndEnableContent    4 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。