Compartilhar via


Função de retorno de chamada PCONVERTSTREAMTOTREE (bthsdpddi.h)

A função Bluetooth SdpConvertStreamToTree é usada para criar uma representação baseada em árvore proprietária da Microsoft de um registro SDP, deixando a representação original baseada em fluxo não modificada.

Sintaxe

PCONVERTSTREAMTOTREE Pconvertstreamtotree;

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

Parâmetros

Stream

O fluxo de registro SDP a ser convertido em uma representação baseada em árvore.

Size

O tamanho do fluxo de registro SDP de origem.

Node

Um ponteiro para a estrutura SDP_TREE_ROOT_NODE que serve como a raiz da representação baseada em árvore SDP do registro SDP.

tag

Especifica uma marca de pool de 4 bytes que identifica exclusivamente o driver que faz a alocação de memória. Para obter mais informações sobre marcas de pool, consulte ExAllocatePoolWithTag.

Retornar valor

Os possíveis valores retornados incluem:

STATUS_SUCCESS
STATUS_INSUFFICIENT_RESOURCES
STATUS_INVALID_PARAMETER

Comentários

Como uma árvore pode ser percorrida avaliando ponteiros, a função SdpConvertStreamToTree pode facilitar a extração de informações de um registro SDP por drivers de perfil.

A representação de árvore do registro SDP resultante da chamada da função SdpConvertStreamToTree consiste em uma série de estruturas de SDP_NODE interconectadas. O nó raiz contém uma única estrutura SDP_TREE_ROOT_NODE.

Cada estrutura SDP_NODE contém uma estrutura SDP_NODE_HEADER e uma união SDP_NODE_DATA . O cabeçalho especifica o tipo de dados e os drivers de perfil Bluetooth podem acessar links para estruturas de SDP_NODE pares por meio da estrutura do sistema LIST_ENTRY . Ao avaliar as estruturas Node.hdr.Link.Flinke Node.hdr.Link.Blink, os drivers podem obter os endereços dos nós pares na árvore. Tenha em mente que os ponteiros na estrutura LIST_ENTRY contêm endereços para outras estruturas LIST_ENTRY e que os drivers Bluetooth devem usar a macro do gerenciador de memória CONTAINING_RECORD para extrair o endereço do registro de nó que o contém.

Usando a sequência do SDP_NODE_DATA união e membros alternativos, os drivers de perfil podem acessar subelementos da árvore. Se o tipo de dados do nó for SDP_TYPE_SEQUENCE, o nó será uma sequência SDP. Se o tipo de dados do nó for SDP_TYPE_ALTERNATIVE, o nó será uma sequência alternativa de SDP. No primeiro caso, o membro de sequência é válido e contém as informações necessárias para acessar a parte da árvore correspondente à sequência. No segundo caso, o membro alternativo é válido e contém as informações necessárias para acessar a parte da árvore correspondente à alternativa. A sequência ou membro alternativo , quando usado, contém uma estrutura de SDP_NODE_HEADER extra que é usada para acessar os nós na sequência ou alternativa. Por exemplo, node->u.sequence.Flinkaponta para a estrutura LIST_ENTRY do primeiro membro da sequência representada pelo nó.

Os membros restantes da união de dados contêm dados reais extraídos do fluxo SDP. Para a maioria dos tipos, os dados estão diretamente presentes na estrutura . No entanto, para cadeias de caracteres e URLs, um ponteiro é fornecido para os dados reais. A memória da cadeia de caracteres é alocada pela chamada de função SdpConvertStreamToTree e deve ser liberada chamando a função SdpFreeTree para a árvore.

Os drivers de perfil Bluetooth podem obter um ponteiro para essa função por meio do BTHDDI_SDP_PARSE_INTERFACE.

Requisitos

Requisito Valor
Cliente mínimo com suporte Versões:_Supported no Windows Vista e posterior.
Plataforma de Destino Área de Trabalho
Cabeçalho bthsdpddi.h (inclua BthSdpddi.h)
IRQL <= PASSIVE_LEVEL

Confira também

BTHDDI_SDP_PARSE_INTERFACE

CONTAINING_RECORD

LIST_ENTRY

SDP_NODE

SDP_NODE_DATA

SDP_NODE_HEADER

SDP_TREE_ROOT_NODE

SdpFreeTree