Функция обратного вызова PCONVERTSTREAMTOTREE (bthsdpddi.h)

Функция Bluetooth SdpConvertStreamToTree используется для создания собственного представления записи SDP на основе дерева Майкрософт, оставляя исходное представление на основе потока без изменений.

Синтаксис

PCONVERTSTREAMTOTREE Pconvertstreamtotree;

NTSTATUS Pconvertstreamtotree(
  PUCHAR Stream,
  ULONG Size,
  PSDP_TREE_ROOT_NODE *Node,
  ULONG tag
)
{...}

Параметры

Stream

Поток записей SDP для преобразования в представление на основе дерева.

Size

Размер исходного потока записей SDP.

Node

Указатель на структуру SDP_TREE_ROOT_NODE , которая служит корнем представления записи SDP на основе дерева SDP.

tag

Указывает 4-байтовой тег пула , однозначно определяющий драйвер, который выделяет память. Дополнительные сведения о тегах пула см. в разделе ExAllocatePoolWithTag.

Возвращаемое значение

Возможные возвращаемые значения:

STATUS_SUCCESS
STATUS_INSUFFICIENT_RESOURCES
STATUS_INVALID_PARAMETER

Комментарии

Так как дерево можно обходить с помощью оценки указателей, функция SdpConvertStreamToTree может упростить извлечение сведений из записи SDP для драйверов профиля.

Древовидное представление записи SDP, которое является результатом вызова функции SdpConvertStreamToTree , состоит из ряда взаимосвязанных SDP_NODE структур. Корневой узел содержит одну структуру SDP_TREE_ROOT_NODE.

Каждая структура SDP_NODE содержит SDP_NODE_HEADER структуру и SDP_NODE_DATA объединение. Заголовок указывает тип данных, а драйверы профилей Bluetooth могут обращаться к ссылкам на одноранговые структуры SDP_NODE через структуру системы LIST_ENTRY . Оценивая и Node.hdr.Link.Blink, Node.hdr.Link.Flinkдрайверы могут получить адреса одноранговых узлов в дереве. Помните, что указатели в структуре LIST_ENTRY содержат адреса других LIST_ENTRY структур и что драйверы Bluetooth должны использовать макрос диспетчера памяти CONTAINING_RECORD для извлечения адреса содержащей записи узла.

С помощью последовательностиSDP_NODE_DATA объединения и альтернативных членов драйверы профиля могут обращаться к подэлестам дерева. Если тип данных узла — SDP_TYPE_SEQUENCE, узел является последовательностью SDP. Если тип данных узла SDP_TYPE_ALTERNATIVE, узел является альтернативной последовательностью SDP. В первом случае член последовательности является допустимым и содержит сведения, необходимые для доступа к части дерева, соответствующей последовательности. Во втором случае альтернативный элемент является допустимым и содержит сведения, необходимые для доступа к части дерева, соответствующей альтернативе. Последовательность или альтернативный член при использовании содержит дополнительную структуру SDP_NODE_HEADER, которая используется для доступа к узлам в последовательности или альтернативе. Например, node->u.sequence.Flinkуказывает на LIST_ENTRY структуру первого члена последовательности, представленного узлом.

Остальные члены объединения данных содержат фактические данные, извлеченные из потока SDP. Для большинства типов данные непосредственно присутствуют в структуре. Однако для строк и URL-адресов предоставляется указатель на фактические данные. Память для строки выделяется вызовом функции SdpConvertStreamToTree и должна быть освобождена путем вызова функции SdpFreeTree для дерева.

Драйверы профиля Bluetooth могут получить указатель на эту функцию через BTHDDI_SDP_PARSE_INTERFACE.

Требования

Требование Значение
Минимальная версия клиента Versions:_Supported в Windows Vista и более поздних версиях.
Целевая платформа Персональный компьютер
Верхняя часть bthsdpddi.h (включая BthSdpddi.h)
IRQL <= PASSIVE_LEVEL

См. также раздел

BTHDDI_SDP_PARSE_INTERFACE

CONTAINING_RECORD

LIST_ENTRY

SDP_NODE

SDP_NODE_DATA

SDP_NODE_HEADER

SDP_TREE_ROOT_NODE

SdpFreeTree