Condividi tramite


Funzione di callback PCONVERTSTREAMTOTREE (bthsdpddi.h)

La funzione Bluetooth SdpConvertStreamToTree viene usata per creare una rappresentazione basata su albero proprietario Microsoft di un record SDP, lasciando invariata la rappresentazione basata su flusso originale.

Sintassi

PCONVERTSTREAMTOTREE Pconvertstreamtotree;

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

Parametri

Stream

Flusso di record SDP da convertire in una rappresentazione basata su albero.

Size

Dimensioni del flusso di record SDP di origine.

Node

Puntatore alla struttura SDP_TREE_ROOT_NODE che funge da radice della rappresentazione basata sull'albero SDP del record SDP.

tag

Specifica un tag di pool a 4 byte che identifica in modo univoco il driver che esegue l'allocazione della memoria. Per altre informazioni sui tag del pool, vedere ExAllocatePoolWithTag.

Valore restituito

I valori restituiti possibili includono:

STATUS_SUCCESS
STATUS_INSUFFICIENT_RESOURCES
STATUS_INVALID_PARAMETER

Commenti

Poiché un albero può essere attraversato valutando puntatori, la funzione SdpConvertStreamToTree può semplificare l'estrazione di informazioni da un record SDP.

La rappresentazione ad albero del record SDP risultante dalla chiamata alla funzione SdpConvertStreamToTree è costituita da una serie di strutture SDP_NODE interconnesse. Il nodo radice contiene una singola struttura SDP_TREE_ROOT_NODE.

Ogni struttura SDP_NODE contiene una struttura SDP_NODE_HEADER e un'unione SDP_NODE_DATA . L'intestazione specifica il tipo di dati e i driver di profilo Bluetooth possono accedere ai collegamenti alle strutture di peer SDP_NODE tramite la struttura di sistema LIST_ENTRY . Valutando i driver di Node.hdr.Link.Flinkquesta struttura e Node.hdr.Link.Blink, è possibile ottenere gli indirizzi dei nodi peer nell'albero. Tenere presente che i puntatori nella struttura LIST_ENTRY contengono indirizzi ad altre strutture LIST_ENTRY e che i driver Bluetooth devono usare la macro di gestione memoria CONTAINING_RECORD per estrarre l'indirizzo del record di nodo contenente.

Usando la sequenza e i membri alternativi dell'unione SDP_NODE_DATA, i driver del profilo possono accedere ai sotto-elementi dell'albero. Se il tipo di dati del nodo è SDP_TYPE_SEQUENCE, il nodo è una sequenza SDP. Se il tipo di dati del nodo è SDP_TYPE_ALTERNATIVE, il nodo è una sequenza alternativa SDP. Nel primo caso, il membro della sequenza è valido e contiene le informazioni necessarie per accedere alla parte dell'albero corrispondente alla sequenza. Nel secondo caso, il membro alternativo è valido e contiene le informazioni necessarie per accedere alla parte dell'albero corrispondente all'alternativa. La sequenza o il membro alternativo , se usato, contiene una struttura di SDP_NODE_HEADER aggiuntiva usata per accedere ai nodi nella sequenza o in alternativa. Ad esempio, node->u.sequence.Flinkpunta alla struttura LIST_ENTRY del primo membro della sequenza rappresentata dal nodo.

I membri rimanenti dell'unione dati contengono dati effettivi estratti dal flusso SDP. Per la maggior parte dei tipi, i dati sono direttamente presenti nella struttura. Tuttavia, per stringhe e URL, viene fornito un puntatore ai dati effettivi. La memoria per la stringa viene allocata dalla chiamata di funzione SdpConvertStreamToTree e deve essere liberata chiamando la funzione SdpFreeTree per l'albero.

I driver del profilo Bluetooth possono ottenere un puntatore a questa funzione tramite la BTHDDI_SDP_PARSE_INTERFACE.

Requisiti

Requisito Valore
Client minimo supportato Versioni:_Supported in Windows Vista e versioni successive.
Piattaforma di destinazione Desktop
Intestazione bthsdpddi.h (includere BthSdpddi.h)
IRQL <= PASSIVE_LEVEL

Vedi anche

BTHDDI_SDP_PARSE_INTERFACE

CONTAINING_RECORD

LIST_ENTRY

SDP_NODE

SDP_NODE_DATA

SDP_NODE_HEADER

SDP_TREE_ROOT_NODE

SdpFreeTree