Compartir a través de


Función de devolución de llamada PCONVERTSTREAMTOTREE (bthsdpddi.h)

La función SdpConvertStreamToTree de Bluetooth se usa para crear una representación basada en árboles de Microsoft de un registro SDP, al tiempo que deja sin modificar la representación basada en secuencias original.

Sintaxis

PCONVERTSTREAMTOTREE Pconvertstreamtotree;

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

Parámetros

Stream

Flujo de registro SDP que se va a convertir en una representación basada en árboles.

Size

Tamaño del flujo de registro SDP de origen.

Node

Puntero a la estructura SDP_TREE_ROOT_NODE que actúa como raíz de la representación basada en árbol SDP del registro SDP.

tag

Especifica una etiqueta de grupo de de 4 bytes que identifica de forma única el controlador que realiza la asignación de memoria. Para obtener más información sobre las etiquetas de grupo, vea ExAllocatePoolWithTag.

Valor devuelto

Entre los posibles valores devueltos se incluyen:

STATUS_SUCCESS
STATUS_INSUFFICIENT_RESOURCES
STATUS_INVALID_PARAMETER

Observaciones

Dado que un árbol se puede recorrer mediante la evaluación de punteros, la función SdpConvertStreamToTree puede facilitar la extracción de información de un registro SDP.

La representación de árbol del registro SDP que resulta de llamar a la función SdpConvertStreamToTree consta de una serie de estructuras SDP_NODE interconectadas. El nodo raíz contiene una única estructura SDP_TREE_ROOT_NODE.

Cada estructura de SDP_NODE contiene una estructura SDP_NODE_HEADER y una unión SDP_NODE_DATA. El encabezado especifica el tipo de datos y los controladores de perfil de Bluetooth pueden acceder a vínculos a estructuras de SDP_NODE del mismo nivel a través de la estructura del sistema LIST_ENTRY. Al evaluar los Node.hdr.Link.Flinky Node.hdr.Link.Blinkde esta estructura, los controladores pueden obtener las direcciones de los nodos del mismo nivel en el árbol. Tenga en cuenta que los punteros de la estructura de LIST_ENTRY contienen direcciones a otras estructuras de LIST_ENTRY y que los controladores Bluetooth deben usar la macro del administrador de memoria CONTAINING_RECORD para extraer la dirección del registro de nodo contenedor.

Mediante el uso del de secuencia de de la unión de SDP_NODE_DATA y miembros alternativos de, los controladores de perfil pueden acceder a los subelementos del árbol. Si el tipo de datos del nodo es SDP_TYPE_SEQUENCE, el nodo es una secuencia SDP. Si el tipo de datos del nodo es SDP_TYPE_ALTERNATIVE, el nodo es una secuencia alternativa de SDP. En el primer caso, el miembro de secuencia es válido y contiene la información necesaria para acceder a la parte del árbol correspondiente a la secuencia. En el segundo caso, el miembro alternativo es válido y contiene la información necesaria para acceder a la parte del árbol correspondiente a la alternativa. La secuencia o miembro alternativo de, cuando se usa, contiene una estructura de SDP_NODE_HEADER adicional que se usa para acceder a los nodos de la secuencia o alternativa. Por ejemplo, node->u.sequence.Flinkapunta a la estructura LIST_ENTRY del primer miembro de la secuencia representada por el nodo.

Los miembros restantes de la unión de datos contienen datos reales extraídos del flujo SDP. Para la mayoría de los tipos, los datos están directamente presentes en la estructura. Sin embargo, para cadenas y direcciones URL, se proporciona un puntero a los datos reales. La memoria de la cadena se asigna mediante la llamada de función SdpConvertStreamToTree y debe liberarse llamando a la función SdpFreeTree para el árbol.

Los controladores de perfil de Bluetooth pueden obtener un puntero a esta función a través del BTHDDI_SDP_PARSE_INTERFACE.

Requisitos

Requisito Valor
cliente mínimo admitido Versiones: _Supported en Windows Vista y versiones posteriores.
de la plataforma de destino de Escritorio
encabezado de bthsdpddi.h (incluya BthSdpddi.h)
irQL <= PASSIVE_LEVEL

Consulte también

BTHDDI_SDP_PARSE_INTERFACE

CONTAINING_RECORD

LIST_ENTRY

SDP_NODE

SDP_NODE_DATA

SDP_NODE_HEADER

SDP_TREE_ROOT_NODE

SdpFreeTree