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.Flink
e 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.Flink
aponta 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 |