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