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.Flink
questa 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.Flink
punta 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 |