IBDA_Topology
COM公式ドキュメント
IBDA_Topology インターフェイスは、BDA デバイスフィルターに実装されます。
解説(Remarks)
このインターフェイスのインターフェイス識別子 (IID) を宣言するには、__uuidof 演算子を使用します: __uuidof(IBDA_Topology)。
メソッド 11
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetNodeTypes メソッドは、このフィルターおよびネットワークタイプに対するテンプレートトポロジー内のすべてのノードタイプの一覧を取得します。
| pulcNodeTypes | DWORD* | inout | 一覧内のノードタイプの数を受け取るポインター。 |
| ulcNodeTypesMax | DWORD | in | rgulNodeTypes バッファーが保持できるノードタイプの最大数。 |
| rgulNodeTypes | DWORD* | inout | ノードタイプの一覧を受け取るバッファーへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
解説(Remarks)
IBDA_Topology インターフェイスは、BDA デバイスフィルターによって実装されます。このインターフェイスは、ネットワークプロバイダーが BDA デバイスフィルターの可能なトポロジー (テンプレートトポロジー) を照会し、現在のチューニング要求に適したトポロジーでデバイスを構成するために使用します。また、特定のチューニング情報を設定するために使用できるコントロールノードへの IUnknown を取得するためにも使用されます。
GetNodeDescriptors メソッドは、トポロジー内のノードの記述子の一覧を取得します。
| ulcNodeDescriptors | DWORD* | inout | rgNodeDescriptors 配列に書き込まれたノード記述子の数を受け取ります。 |
| ulcNodeDescriptorsMax | DWORD | in | rgNodeDescriptors 配列が保持できるノード記述子の最大数を指定します。 |
| rgNodeDescriptors | BDANODE_DESCRIPTOR* | inout | ノード記述子の配列を受け取るバッファーへのポインター。各ノード記述子は BDANODE_DESCRIPTOR 型の構造体です。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
GetNodeInterfaces メソッドは、あるノードタイプがサポートするインターフェイスの一覧を取得します。
| ulNodeType | DWORD | in | インターフェイスの一覧を要求する対象のノードタイプを指定します。 |
| pulcInterfaces | DWORD* | inout | 一覧内のインターフェイスの数を受け取るポインター。 |
| ulcInterfacesMax | DWORD | in | rgguidInterfaces が保持できるインターフェイスの最大数を指定します。 |
| rgguidInterfaces | GUID* | inout | インターフェイス GUID の一覧を保持するバッファーへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
GetPinTypes メソッドは、このフィルターおよびネットワークタイプに対するテンプレートトポロジー内のすべてのピンタイプの一覧を取得します。
| pulcPinTypes | DWORD* | inout | 一覧内のピンタイプの数を受け取る値へのポインター。 |
| ulcPinTypesMax | DWORD | in | rgulPinTypes バッファーが保持できるピンタイプの最大数。 |
| rgulPinTypes | DWORD* | inout | ピンタイプの一覧を受け取るバッファーへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
GetTemplateConnections メソッドは、このフィルターおよびネットワークタイプに対するテンプレートトポロジーに現れるすべてのテンプレート接続の一覧を取得します。
| pulcConnections | DWORD* | inout | 一覧内の接続の数を受け取る値へのポインター。 |
| ulcConnectionsMax | DWORD | in | rgConnections バッファーが保持できる接続の最大数。 |
| rgConnections | BDA_TEMPLATE_CONNECTION* | inout | 接続の一覧を受け取るバッファーへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
CreatePin メソッドは、指定したピンタイプのインスタンスを作成します。
| ulPinType | DWORD | in | 作成するピンのタイプを指定します。使用可能な値を取得するには、IBDA_Topology::GetPinTypes を呼び出します。 |
| pulPinId | DWORD* | inout | 新しいピンの識別子を受け取るポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
DeletePin メソッドは、フィルターのトポロジーからピンを削除します。
| ulPinId | DWORD | in | 削除するピンの識別子を指定します。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
SetMediaType メソッドは、BDA デバイスフィルター上のピンのメディアタイプを設定します。
| ulPinId | DWORD | in | メディアタイプを設定するピンの識別子。 |
| pMediaType | AM_MEDIA_TYPE* | in | メディアタイプを含む AM_MEDIA_TYPE 構造体へのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
SetMedium メソッドは、特定のピンがデータを送信するメディウムを構成します。
| ulPinId | DWORD | in | メディウムを設定するピンの識別子を指定します。 |
| pMedium | REGPINMEDIUM* | in | ピンがデータを送信するメディウムへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
解説(Remarks)
メディウムとは、ホストシステム上の 2 つのデバイス間のハードウェアデータパスを識別する構造体です。これらは、TV カード上のクロスバーとチューナーのように同一カード上のデバイス、別々のカード上のデバイス、または外部デバイスの場合があります。Windows Driver Model に基づくカーネルモードフィルターは、ピン接続を判断するためにメディアタイプの代わりにメディウムを使用できます。
CreateTopology メソッドは、入力ピンのインスタンスを出力ピンのインスタンスに関連付けます。
| ulInputPinId | DWORD | in | トポロジーを作成する対象の入力ピンの識別子を指定します。 |
| ulOutputPinId | DWORD | in | トポロジーを作成する対象の出力ピンの識別子を指定します。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
GetControlNode メソッドは、指定したコントロールノードの IUnknown インターフェイスポインターを取得します。
| ulInputPinId | DWORD | in | トポロジーを作成する対象の入力ピンの識別子を指定します。 |
| ulOutputPinId | DWORD | in | トポロジーを作成する対象の出力ピンの識別子を指定します。 |
| ulNodeType | DWORD | in | 開くノードのタイプ。 |
| ppControlNode | IUnknown** | inout | コントロールノードの IUnknown インターフェイスへのポインターへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IBDA_Topology "{79B56888-7FEA-4690-B45D-38FD3C7849BE}" #usecom global IBDA_Topology IID_IBDA_Topology "{}" #comfunc global IBDA_Topology_GetNodeTypes 3 var,int,var #comfunc global IBDA_Topology_GetNodeDescriptors 4 var,int,var #comfunc global IBDA_Topology_GetNodeInterfaces 5 int,var,int,var #comfunc global IBDA_Topology_GetPinTypes 6 var,int,var #comfunc global IBDA_Topology_GetTemplateConnections 7 var,int,var #comfunc global IBDA_Topology_CreatePin 8 int,var #comfunc global IBDA_Topology_DeletePin 9 int #comfunc global IBDA_Topology_SetMediaType 10 int,var #comfunc global IBDA_Topology_SetMedium 11 int,var #comfunc global IBDA_Topology_CreateTopology 12 int,int #comfunc global IBDA_Topology_GetControlNode 13 int,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IBDA_Topology "{79B56888-7FEA-4690-B45D-38FD3C7849BE}" #usecom global IBDA_Topology IID_IBDA_Topology "{}" #comfunc global IBDA_Topology_GetNodeTypes 3 sptr,int,sptr #comfunc global IBDA_Topology_GetNodeDescriptors 4 sptr,int,sptr #comfunc global IBDA_Topology_GetNodeInterfaces 5 int,sptr,int,sptr #comfunc global IBDA_Topology_GetPinTypes 6 sptr,int,sptr #comfunc global IBDA_Topology_GetTemplateConnections 7 sptr,int,sptr #comfunc global IBDA_Topology_CreatePin 8 int,sptr #comfunc global IBDA_Topology_DeletePin 9 int #comfunc global IBDA_Topology_SetMediaType 10 int,sptr #comfunc global IBDA_Topology_SetMedium 11 int,sptr #comfunc global IBDA_Topology_CreateTopology 12 int,int #comfunc global IBDA_Topology_GetControlNode 13 int,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。