Поделиться через


Связывание коллекций

Коллекция ссылок как вложенный вложенный набор в коллекции верхнего уровня. Коллекция верхнего уровня может иметь ноль или более коллекций ссылок.

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. Этот узел завершает последовательность узлов с псевдонимами. Использование, связанное с этим узлом, является предпочтительным.

Приложение или драйвер может определить, какие коллекции являются псевдонимами, многократно приумножение индекса массива коллекции ссылок для поиска таких последовательностей.

Массивы возможностей кнопок и массивы возможностей значений определяют для каждого описываемого ими использования коллекцию ссылок, содержащую использование. Если коллекция ссылок является псевдонимом, массивы возможностей указывают предпочтительное использование.