Связывание коллекций
Коллекция ссылок как вложенный вложенный набор в коллекции верхнего уровня. Коллекция верхнего уровня может иметь ноль или более коллекций ссылок.
HidP_GetLinkCollectionNodes возвращает массив ссылок коллекции верхнего уровня, содержащий сведения о коллекциях ссылок коллекции верхнего уровня.
Массив коллекций ссылок
Массив коллекций ссылок описывает все коллекции ссылок, содержащиеся в коллекции верхнего уровня. Каждая коллекция ссылок представлена HIDP_LINK_COLLECTION_NODE структурой. Узлы ссылок массива связаны таким образом, чтобы определить их последовательный и иерархический порядок в коллекции верхнего уровня. Первый элемент массива коллекций ссылок представляет коллекцию верхнего уровня, а остальные элементы — коллекции ссылок коллекции верхнего уровня.
Путем трассировки по узлам в массиве подключений ссылок приложение пользовательского режима или драйвер режима ядра может определить организацию и использование всех коллекций ссылок в коллекции верхнего уровня. Кроме того, приложение или драйвер могут упорядочивать элементы управления по их коллекции ссылок. Это возможно, так как массивы возможностей кнопок и значений коллекции верхнего уровня определяют коллекцию ссылок, содержащую каждое использование HID , описанное в массивах возможностей.
На следующем рисунке показан пример коллекции верхнего уровня, содержащей четыре коллекции ссылок.
Как показано на предыдущем рисунке, коллекции ссылок связаны друг с другом в порядке сверху вниз и слева направо (ABCD). В следующей таблице указаны для каждой коллекции ссылок в примере связи между коллекцией верхнего уровня и ее коллекциями ссылок.
Узел связи | Parent | Дети | First Child | Следующий одноуровневый элемент |
---|---|---|---|---|
A | Коллекция верхнего уровня | B, C | B | None |
B | Объект | D | D | C |
C | A | Нет | Нет | Нет |
D | B | None | Нет | Нет |
В массиве коллекции ссылок содержатся следующие определения:
Родительский элемент. Родительский элемент коллекции ссылок — это коллекция, расположенная непосредственно над ней в иерархии коллекций сверху вниз. Коллекции ссылок имеют один родительский элемент. Родительский элемент узла ссылки указывает индекс его родительского элемента в массиве коллекции ссылок.
Дочерние элементы. Коллекция ссылок является дочерней по отношению к родительской коллекции. Родительский объект может иметь ноль или более дочерних элементов. Элемент NumberOfChildren узла ссылки указывает количество дочерних элементов родительского узла.
Одноуровневые. Дети родителей являются братьями и сестрами.
Следующий одноуровневый элемент: упорядочены слева направо. Следующий одноуровневый элемент — это одноуровневый элемент сразу же справа от нее, если таковой имеется, в наборе братьев и сестер. Элемент NextSibling узла коллекции ссылок указывает индекс следующего уровня в массиве коллекции ссылок. Если узел коллекции ссылок не имеет следующего одноуровневого элемента, nextSibling имеет значение 0.
Первый ребенок. Первый ребенок является самым левым из братьев и сестер в наборе братьев и сестер. Элемент FirstChild узла коллекции ссылок указывает индекс для его первого дочернего элемента в массиве коллекции ссылок. Если узел коллекции ссылок не имеет дочерних элементов, firstChild имеет значение 0.
Приложение или драйвер может определить все дочерние элементы родительской коллекции, начиная с первого дочернего элемента родительского элемента, последовательно перебирая одноуровневые элементы первого дочернего элемента, пока элемент NextSibling одноуровневого узла не будет равен нулю.
В следующем коде показано, как использовать индекс узла коллекции ссылок для поиска первого дочернего элемента коллекции ссылок семь:
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. Этот узел завершает последовательность узлов с псевдонимами. Использование, связанное с этим узлом, является предпочтительным.
Приложение или драйвер может определить, какие коллекции являются псевдонимами, многократно приумножение индекса массива коллекции ссылок для поиска таких последовательностей.
Массивы возможностей кнопок и массивы возможностей значений определяют для каждого описываемого ими использования коллекцию ссылок, содержащую использование. Если коллекция ссылок является псевдонимом, массивы возможностей указывают предпочтительное использование.