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.Flink
和 Node.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 |