IMFPMPHost
COM公式ドキュメント
アプリケーションプロセス内のメディアソースが、保護されたメディアパス (PMP) プロセス内にオブジェクトを作成できるようにします。
解説(Remarks)
このインターフェイスは、メディアソースがアプリケーションプロセスに存在し、Media Session が PMP プロセスに存在する場合に使用されます。メディアソースはこのインターフェイスを使用して、PMP プロセス内にオブジェクトを作成できます。たとえば、DRM で保護されたコンテンツを再生するには、通常メディアソースは PMP プロセス内に入力信頼機関 (ITA) を作成する必要があります。
このインターフェイスを使用するには、メディアソースが IMFPMPClient インターフェイスを実装します。PMP Media Session はメディアソースに対して IMFPMPClient::SetPMPHost を呼び出し、IMFPMPHost インターフェイスへのポインターを渡します。
また、PMP Media Session に対して IMFGetService::GetService を呼び出し、サービス識別子 MF_PMP_SERVICE を使用することで、このインターフェイスへのポインターを取得することもできます。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
保護されたメディアパス (PMP) プロセスが終了しないようにブロックします。(IMFPMPHost.LockProcess)
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドが呼び出されると、PMP プロセスのロックカウントがインクリメントされます。このメソッドの呼び出しごとに、アプリケーションは対応する IMFPMPHost::UnlockProcess の呼び出しを行い、ロックカウントをデクリメントする必要があります。PMP プロセスは終了の準備ができると、約 3 秒間、またはロックカウントがゼロに達するまで待機してから終了します。
保護されたメディアパス (PMP) プロセスのロックカウントをデクリメントします。IMFPMPHost::LockProcess の各呼び出しに対して、このメソッドを 1 回呼び出してください。
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
CLSID から、保護されたメディアパス (PMP) プロセス内にオブジェクトを作成します。
| clsid | GUID* | in | 作成するオブジェクトの CLSID。 |
| pStream | IStream* | in | IStream インターフェイスへのポインター。このパラメーターは NULL にすることができます。このパラメーターが NULL でない場合、PMP ホストは作成されたオブジェクトに対して IPersistStream インターフェイスをクエリし、pStream ポインターを渡して IPersistStream::Load を呼び出します。 |
| riid | GUID* | in | 取得するインターフェイスのインターフェイス識別子 (IID)。 |
| ppv | void** | out | 要求されたインターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
pStream パラメーターを使用して、オブジェクト作成後に初期化することができます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFPMPHost "{F70CA1A9-FDC7-4782-B994-ADFFB1C98606}" #usecom global IMFPMPHost IID_IMFPMPHost "{}" #comfunc global IMFPMPHost_LockProcess 3 #comfunc global IMFPMPHost_UnlockProcess 4 #comfunc global IMFPMPHost_CreateObjectByCLSID 5 var,sptr,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFPMPHost "{F70CA1A9-FDC7-4782-B994-ADFFB1C98606}" #usecom global IMFPMPHost IID_IMFPMPHost "{}" #comfunc global IMFPMPHost_LockProcess 3 #comfunc global IMFPMPHost_UnlockProcess 4 #comfunc global IMFPMPHost_CreateObjectByCLSID 5 sptr,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。