IMFPluginControl
COM公式ドキュメント
Microsoft Media Foundation において、メディアソースおよびトランスフォームを列挙する方法を制御します。(IMFPluginControl)
解説(Remarks)
Media Foundation は、一連の組み込みメディアソースおよびデコーダーを提供します。アプリケーションは、次の方法でこれらを列挙できます。
- メディアソースは Source Resolver を通じて列挙されます。
- デコーダーなどのトランスフォームは、MFTEnum および MFTEnumEx 関数を通じて列挙されます。
サードパーティは、独自のカスタムメディアソースおよびデコーダーを実装し、他のアプリケーションが使用できるように列挙対象として登録できます。
列挙順序を制御するために、Media Foundation はプロセス全体で 2 つの CLSID リスト、すなわち優先リストとブロックリストを保持します。CLSID が優先リストに含まれるオブジェクトは、列挙順序の先頭に現れます。CLSID がブロックリストに含まれるオブジェクトは列挙されません。
これらのリストは、最初はレジストリから設定されます。アプリケーションは IMFPluginControl インターフェイスを使用して、現在のプロセスに対してリストを変更できます。
優先リストには一連のキー/値ペアが含まれ、キーは文字列、値は CLSID です。これらのキー/値ペアは次のように定義されます。
- メディアソースの場合、キー名はファイル名拡張子、プロトコルスキーム、または MIME タイプです。値は、そのメディアソースに対するスキームハンドラーまたはバイトストリームハンドラーの CLSID です。
- デコーダーの場合、キー名は正規の文字列形式によるメディアサブタイプ GUID です。(メディアサブタイプの詳細については、Media Types を参照してください。) 値は、デコーダーを実装する Media Foundation トランスフォーム (MFT) の CLSID です。
- ファイル拡張子: ".wmv"
- スキーム: "http:"
- MIME タイプ: "video/mp4"
- メディアサブタイプ: "{47504A4D-0000-0010-8000-00AA00389B71}"
ブロックリストには一連の CLSID が含まれます。リスト全体を列挙するには、IMFPluginControl::GetDisabledByIndex メソッドをループ内で呼び出します。特定の CLSID がリストに含まれているかどうかを確認するには、IMFPluginControl::IsDisabled メソッドを呼び出します。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定したキー名に一致するクラス識別子 (CLSID) を優先リストから検索します。
| pluginType | DWORD | in | オブジェクトの種類を指定する MF_Plugin_Type 列挙体のメンバー。 |
| selector | LPWSTR | in | 一致させるキー名。キー名の形式の詳細については、IMFPluginControl の「解説」セクションを参照してください。 |
| clsid | GUID* | out | 優先リストから取得した CLSID を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻りコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 引数が無効です。 | |
|
このキーに一致する CLSID は見つかりませんでした。 |
IMFPluginControl::GetPreferredClsidByIndex (mfobjects.h) メソッドは、インデックス値で指定した優先リスト内のクラス識別子 (CLSID) を取得します。
| pluginType | DWORD | in | 列挙するオブジェクトの種類を指定する MF_Plugin_Type 列挙体のメンバー。 |
| index | DWORD | in | 取得する CLSID の 0 から始まるインデックス。 |
| selector | LPWSTR* | out | CLSID に関連付けられたキー名を受け取ります。呼び出し側は、CoTaskMemFree 関数を呼び出して、返された文字列のメモリを解放する必要があります。キー名の形式の詳細については、IMFPluginControl の「解説」セクションを参照してください。 |
| clsid | GUID* | out | 指定したインデックスの CLSID を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻りコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 引数が無効です。 | |
|
index パラメーターが範囲外です。 |
クラス識別子 (CLSID) を優先リストに追加するか、リストから削除します。(IMFPluginControl.SetPreferredClsid)
| pluginType | DWORD | in | オブジェクトの種類を指定する MF_Plugin_Type 列挙体のメンバー。 |
| selector | LPWSTR | in | CLSID のキー名。キー名の形式の詳細については、IMFPluginControl の「解説」セクションを参照してください。 |
| clsid | GUID* | inoptional | リストに追加する CLSID。このパラメーターが NULL の場合、selector パラメーターで指定されたキー/値エントリがリストから削除されます。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
優先リストは、呼び出し側のプロセスに対してグローバルです。このメソッドを呼び出しても、他のプロセスのリストには影響しません。
クラス識別子 (CLSID) がブロックリストに含まれているかどうかを照会します。(IMFPluginControl.IsDisabled)
| pluginType | DWORD | in | 照会対象のオブジェクトの種類を指定する MF_Plugin_Type 列挙体のメンバー。 |
| clsid | GUID* | in | 検索する CLSID。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻りコード | 説明 |
|---|---|
| 指定した CLSID はブロックリストに含まれています。 | |
| 引数が無効です。 | |
|
指定した CLSID はブロックリストに含まれていません。 |
IMFPluginControl::GetDisabledByIndex (mfobjects.h) は、ブロックリストからクラス識別子 (CLSID) を取得します。
| pluginType | DWORD | in | 列挙するオブジェクトの種類を指定する MF_Plugin_Type 列挙体のメンバー。 |
| index | DWORD | in | 取得する CLSID の 0 から始まるインデックス。 |
| clsid | GUID* | out | 指定したインデックスの CLSID を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻りコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 引数が無効です。 | |
|
index パラメーターが範囲外です。 |
クラス識別子 (CLSID) をブロックリストに追加するか、リストから削除します。(IMFPluginControl.SetDisabled)
| pluginType | DWORD | in | オブジェクトの種類を指定する MF_Plugin_Type 列挙体のメンバー。 |
| clsid | GUID* | in | 追加または削除する CLSID。 |
| disabled | BOOL | in | CLSID を追加するか削除するかを指定します。値が TRUE の場合、メソッドは CLSID をブロックリストに追加します。それ以外の場合、メソッドはリストから削除します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻りコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 引数が無効です。 |
解説(Remarks)
ブロックリストは、呼び出し側のプロセスに対してグローバルです。このメソッドを呼び出しても、他のプロセスのリストには影響しません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFPluginControl "{5C6C44BF-1DB6-435B-9249-E8CD10FDEC96}" #usecom global IMFPluginControl IID_IMFPluginControl "{}" #comfunc global IMFPluginControl_GetPreferredClsid 3 int,wstr,var #comfunc global IMFPluginControl_GetPreferredClsidByIndex 4 int,int,var,var #comfunc global IMFPluginControl_SetPreferredClsid 5 int,wstr,var #comfunc global IMFPluginControl_IsDisabled 6 int,var #comfunc global IMFPluginControl_GetDisabledByIndex 7 int,int,var #comfunc global IMFPluginControl_SetDisabled 8 int,var,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMFPluginControl "{5C6C44BF-1DB6-435B-9249-E8CD10FDEC96}" #usecom global IMFPluginControl IID_IMFPluginControl "{}" #comfunc global IMFPluginControl_GetPreferredClsid 3 int,wstr,sptr #comfunc global IMFPluginControl_GetPreferredClsidByIndex 4 int,int,sptr,sptr #comfunc global IMFPluginControl_SetPreferredClsid 5 int,wstr,sptr #comfunc global IMFPluginControl_IsDisabled 6 int,sptr #comfunc global IMFPluginControl_GetDisabledByIndex 7 int,int,sptr #comfunc global IMFPluginControl_SetDisabled 8 int,sptr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。