PCONVERTSTREAMTOTREE 回调函数 (bthsdpddi.h)

蓝牙 SdpConvertStreamToTree 函数用于创建 Microsoft 专有的基于树的 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 记录中提取信息。

调用 SdpConvertStreamToTree 函数产生的 SDP 记录的树表示形式由一系列相互连接的 SDP_NODE 结构组成。 根节点包含单个SDP_TREE_ROOT_NODE结构。

每个SDP_NODE结构都包含 一个SDP_NODE_HEADER 结构和 一个SDP_NODE_DATA 联合。 标头指定数据类型,蓝牙配置文件驱动程序可以通过LIST_ENTRY系统结构访问对等 SDP_NODE 结构的链接。 通过评估此结构的 Node.hdr.Link.FlinkNode.hdr.Link.Blink,驱动程序可以获取树中对等节点的地址。 请记住,LIST_ENTRY 结构中的指针保存指向其他LIST_ENTRY结构的地址,并且蓝牙驱动程序必须使用 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 函数来释放。

蓝牙配置文件驱动程序可以通过 BTHDDI_SDP_PARSE_INTERFACE获取指向此函数的指针。

要求

要求
最低受支持的客户端 版本:Windows Vista 及更高版本中的 _Supported。
目标平台 桌面
标头 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