リンク コレクション
リンク コレクションは、最上位コレクション内の入れ子になったサブコレクションです。 最上位のコレクションには、0 個以上のリンク コレクションを含めることができます。
HidP_GetLinkCollectionNodes は、最上位のコレクションのリンク コレクションに関する情報を含むリンク コレクション配列を返します。
リンク コレクション配列
リンク コレクション配列は、最上位のコレクションに含まれるすべてのリンク コレクションを表します。 各リンク コレクションは、HIDP_LINK_COLLECTION_NODE 構造体で表されます。 配列のリンク ノードは、最上位のコレクション内で順番と階層の順序を識別する方法でリンクされます。 リンク コレクション配列の最初の要素は最上位のコレクションを表し、残りのメンバーは最上位のコレクションのリンク コレクションを表します。
リンク接続配列内のノードをトレースすることで、ユーザー モード アプリケーションまたはカーネル モード ドライバーは、最上位のコレクション内のすべてのリンク コレクションの編成と使用法を特定できます。 さらに、アプリケーションまたはドライバーは、リンク コレクションによってコントロールを編成できます。 これは、最上位のコレクションのボタン機能配列と値機能配列が、機能配列によって記述される各 HID 使用法を含むリンク コレクションを識別するためです。
次の図は、4 つのリンク コレクションを含む最上位のコレクションの例を示しています。
前の図に示すように、リンク コレクションは上から下、左から右の順 (ABCD) でリンクされています。 次の表は、例の各リンク コレクションについて、最上位のコレクションとそのリンク コレクション間のリンクを示しています。
リンク ノード | 上位 | 子 | 最初の子 | 次の兄弟 |
---|---|---|---|---|
A | 最上位のコレクション | B, C | B | なし |
B | A | D | D | C |
C | A | なし | なし | なし |
D | B | なし | なし | なし |
リンク コレクション配列では、次の定義が保持されます。
親: リンク コレクションの親とは、コレクションの階層を上位から下位にたどったときに、1 階層上にあるコレクションのことです。 リンク コレクションには親が 1 つ含まれています。 リンク ノードの親メンバーは、リンク コレクション配列内の親のインデックス示します。
子: リンク コレクションは、親の子です。 親は、0 個以上の子を持つことができます。 リンク ノードの NumberOfChildren メンバーは、親が持つ子の数を示します。
兄弟: 親の子は兄弟です。
次の兄弟: 兄弟は、左から右の順に並べられます。 兄弟の次の兄弟とは、一連の兄弟の 1 つ右にある兄弟です (存在する場合)。 リンク コレクション ノードの NextSibling メンバーは、リンク コレクション配列内の次の兄弟のインデックスを示します。 リンク コレクション ノードに次の兄弟がない場合、NextSibling は 0 に設定されます。
最初の子: 最初の子とは、一連の兄弟の左端の兄弟です。 リンク コレクション ノードの FirstChild メンバーは、リンク コレクション配列内の最初の子のインデックスを示します。 リンク コレクション ノードに子がない場合、FirstChild は 0 に設定されます。
アプリケーションまたはドライバーは、親の最初の子から始めて、兄弟ノードの NextSibling メンバーが 0 になるまで最初の子の兄弟をシーケンス処理することで、親コレクションのすべての子を特定できます。
次のコードは、リンク コレクションのノード インデックスを使用して、リンク コレクション 7 の最初の子を検索する方法を示しています。
HIDP_LINK_COLLECTION_NODE Collection[10] ;
HIDP_LINK_COLLECTION_NODE Node1 ;
Node1 = Collection[Collection[7].FirstChild];
エイリアス化されたコレクション
レポート記述子で区切り項目を使用することで、一連のエイリアス化されたコレクションを区切ることができます。 エイリアス化された各コレクションは、エイリアス化されたリンク コレクション ノードによって表されます。 完全かつ一意の n 個 (n>=2) のエイリアス化された一連のノードは、次のようにリンクされます。
エイリアス化されたノードは、リンク コレクション配列内で連続した順序に並べられます。
最初の n-1 ノードでは、IsAlias メンバーが TRUE に設定されています。 このようなシーケンスの直後の n 番目のノードでは、IsAlias メンバーが FALSE に設定されています。 エイリアス化されたノードのシーケンスは、このノードで終了します。 このノードに関連付けられている使用法が、推奨される使用法です。
アプリケーションまたはドライバーは、リンク コレクション配列の配列インデックスを繰り返しインクリメントしてそのようなシーケンスを見つけることで、エイリアス化されたコレクションを特定できます。
ボタン機能配列と値機能配列は、示されている使用法ごとに、その使用法を含むリンク コレクションを特定します。 リンク コレクションがエイリアス化されている場合、機能配列は推奨される使用法を示します。