Función de devolución de llamada PCONVERTSTREAMTOTREE (bthsdpddi.h)
La función Bluetooth SdpConvertStreamToTree se usa para crear una representación basada en árboles propietaria de Microsoft de un registro SDP, mientras deja la representación original basada en secuencias sin modificar.
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 de SDP del registro SDP.
tag
Especifica una etiqueta de grupo 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, consulte ExAllocatePoolWithTag.
Valor devuelto
Entre los valores devueltos posibles se incluyen:
- STATUS_SUCCESS
- STATUS_INSUFFICIENT_RESOURCES
- STATUS_INVALID_PARAMETER
Comentarios
Dado que se puede recorrer un árbol mediante la evaluación de punteros, la función SdpConvertStreamToTree puede facilitar a los controladores de perfil extraer 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 de SDP_TREE_ROOT_NODE.
Cada estructura de SDP_NODE contiene una estructura de 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 controladores y Node.hdr.Link.Blink
de Node.hdr.Link.Flink
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 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 de la secuencia y los miembros alternativos de la unión de SDP_NODE_DATA, 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 , 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.Flink
apunta 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 las cadenas y las direcciones URL, se proporciona un puntero a los datos reales. La memoria de la cadena se asigna mediante la llamada a la función SdpConvertStreamToTree y debe liberarse llamando a la función SdpFreeTree para el árbol.
Los controladores de perfil bluetooth pueden obtener un puntero a esta función a través del BTHDDI_SDP_PARSE_INTERFACE.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Versions:_Supported en Windows Vista y versiones posteriores. |
Plataforma de destino | Escritorio |
Encabezado | bthsdpddi.h (incluya BthSdpddi.h) |
IRQL | <= PASSIVE_LEVEL |