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


Функция обратного вызова 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