Fonction de rappel PCONVERTSTREAMTOTREE (bthsdpddi.h)
La fonction Bluetooth SdpConvertStreamToTree est utilisée pour créer une représentation basée sur une arborescence microsoft d’un enregistrement SDP, tout en laissant la représentation basée sur le flux d’origine non modifiée.
Syntaxe
PCONVERTSTREAMTOTREE Pconvertstreamtotree;
NTSTATUS Pconvertstreamtotree(
PUCHAR Stream,
ULONG Size,
PSDP_TREE_ROOT_NODE *Node,
ULONG tag
)
{...}
Paramètres
Stream
Flux d’enregistrements SDP à convertir en représentation basée sur une arborescence.
Size
Taille du flux d’enregistrement SDP source.
Node
Pointeur vers la structure SDP_TREE_ROOT_NODE qui sert de racine de la représentation arborescence SDP de l’enregistrement SDP.
tag
Spécifie une balise de pool de 4 octets qui identifie de manière unique le pilote qui effectue l’allocation de mémoire. Pour plus d’informations sur les balises de pool, consultez ExAllocatePoolWithTag.
Valeur retournée
Les valeurs de retour possibles sont les suivantes :
- STATUS_SUCCESS
- STATUS_INSUFFICIENT_RESOURCES
- STATUS_INVALID_PARAMETER
Remarques
Étant donné qu’une arborescence peut être parcourue en évaluant des pointeurs, la fonction SdpConvertStreamToTree peut faciliter l’extraction d’informations d’un enregistrement SDP pour les pilotes de profil.
La représentation en arborescence de l’enregistrement SDP résultant de l’appel de la fonction SdpConvertStreamToTree se compose d’une série de structures SDP_NODE interconnectées. Le nœud racine contient une structure SDP_TREE_ROOT_NODE unique.
Chaque structure SDP_NODE contient une structure SDP_NODE_HEADER et une union SDP_NODE_DATA . L’en-tête spécifie le type de données et les pilotes de profil Bluetooth peuvent accéder aux liens vers des structures SDP_NODE homologues via la structure système LIST_ENTRY . En évaluant les valeurs de Node.hdr.Link.Flink
cette structure et Node.hdr.Link.Blink
, les pilotes peuvent obtenir les adresses des nœuds homologues dans l’arborescence. N’oubliez pas que les pointeurs de la structure LIST_ENTRY contiennent des adresses vers d’autres structures LIST_ENTRY et que les pilotes Bluetooth doivent utiliser la macro du gestionnaire de mémoire CONTAINING_RECORD pour extraire l’adresse de l’enregistrement de nœud contenant.
En utilisant la séquenceSDP_NODE_DATA union et d’autres membres, les pilotes de profil peuvent accéder aux sous-éléments de l’arborescence. Si le type de données du nœud est SDP_TYPE_SEQUENCE, le nœud est une séquence SDP. Si le type de données du nœud est SDP_TYPE_ALTERNATIVE, le nœud est une séquence alternative SDP. Dans le premier cas, le membre de séquence est valide et contient les informations nécessaires pour accéder à la partie de l’arborescence correspondant à la séquence. Dans le deuxième cas, l’autre membre est valide et contient les informations nécessaires pour accéder à la partie de l’arborescence correspondant à l’alternative. La séquence ou le membre alternatif , lorsqu’il est utilisé, contient une structure SDP_NODE_HEADER supplémentaire utilisée pour accéder aux nœuds de la séquence ou de l’alternative. Par exemple, node->u.sequence.Flink
pointe vers la structure LIST_ENTRY du premier membre de la séquence représentée par le nœud.
Les autres membres de l’union de données contiennent des données réelles extraites du flux SDP. Pour la plupart des types, les données sont directement présentes dans la structure. Toutefois, pour les chaînes et les URL, un pointeur est fourni vers les données réelles. La mémoire de la chaîne est allouée par l’appel de fonction SdpConvertStreamToTree et doit être libérée en appelant la fonction SdpFreeTree pour l’arborescence.
Les pilotes de profil Bluetooth peuvent obtenir un pointeur vers cette fonction via le BTHDDI_SDP_PARSE_INTERFACE.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Versions :_Supported dans Windows Vista et versions ultérieures. |
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | bthsdpddi.h (inclure BthSdpddi.h) |
IRQL | <= PASSIVE_LEVEL |