Freigeben über


PCONVERTSTREAMTOTREE-Rückruffunktion (bthsdpddi.h)

Die Bluetooth-SdpConvertStreamToTree--Funktion wird verwendet, um eine proprietäre strukturbasierte Darstellung eines SDP-Eintrags von Microsoft zu erstellen und dabei die ursprüngliche streambasierte Darstellung unverändert zu lassen.

Syntax

PCONVERTSTREAMTOTREE Pconvertstreamtotree;

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

Parameter

Stream

Der SDP-Datensatzdatenstrom, der in eine strukturbasierte Darstellung konvertiert werden soll.

Size

Die Größe des SDP-Quelldatenstroms.

Node

Ein Zeiger auf die SDP_TREE_ROOT_NODE Struktur, die als Stamm der SDP-strukturbasierten Darstellung des SDP-Eintrags dient.

tag

Gibt ein 4-Byte-Pooltag an, das den Treiber eindeutig identifiziert, der die Speicherzuweisung durchführt. Weitere Informationen zu Pooltags finden Sie unter ExAllocatePoolWithTag.

Rückgabewert

Mögliche Rückgabewerte sind:

STATUS_SUCCESS
STATUS_INSUFFICIENT_RESOURCES
STATUS_INVALID_PARAMETER

Bemerkungen

Da eine Struktur durch die Auswertung von Zeigern durchlaufen werden kann, kann die SdpConvertStreamToTree--Funktion das Extrahieren von Informationen aus einem SDP-Datensatz vereinfachen.

Die Strukturdarstellung des SDP-Eintrags, der sich aus dem Aufrufen der SdpConvertStreamToTree--Funktion ergibt, besteht aus einer Reihe miteinander verbundener SDP_NODE Strukturen. Der Stammknoten enthält eine einzelne SDP_TREE_ROOT_NODE Struktur.

Jede SDP_NODE-Struktur enthält eine SDP_NODE_HEADER Struktur und eine SDP_NODE_DATA Vereinigung. Der Header gibt den Typ der Daten an, und Bluetooth-Profiltreiber können über die LIST_ENTRY Systemstruktur auf Links zu Peer-SDP_NODE Strukturen zugreifen. Durch die Auswertung der Node.hdr.Link.Flinkund Node.hdr.Link.Blinkdieser Struktur können Treiber die Adressen von Peerknoten in der Struktur abrufen. Beachten Sie, dass die Zeiger in der LIST_ENTRY Struktur Adressen für andere LIST_ENTRY Strukturen enthalten, und dass Bluetooth-Treiber das makro CONTAINING_RECORD Speicher-Manager verwenden müssen, um die Adresse des enthaltenden Knotendatensatzes zu extrahieren.

Mithilfe der Sequenz SDP_NODE_DATA Union und alternativen Mitglieder können Profiltreiber auf Unterelemente der Struktur zugreifen. Wenn der Datentyp des Knotens SDP_TYPE_SEQUENCEist, ist der Knoten eine SDP-Sequenz. Wenn der Datentyp des Knotens SDP_TYPE_ALTERNATIVEist, ist der Knoten eine alternative SDP-Sequenz. Im ersten Fall ist das Sequenzelement gültig und enthält die erforderlichen Informationen, um auf den Teil der Struktur zuzugreifen, der der Sequenz entspricht. Im zweiten Fall ist das alternative Element gültig und enthält die erforderlichen Informationen, um auf den Teil der Struktur zuzugreifen, der der Alternative entspricht. Die Sequenz oder alternative Element enthält bei Verwendung eine zusätzliche SDP_NODE_HEADER Struktur, die für den Zugriff auf die Knoten in der Sequenz oder Alternative verwendet wird. Beispielsweise verweist node->u.sequence.Flinkauf die LIST_ENTRY Struktur des ersten Elements der Sequenz, die durch den Knoten dargestellt wird.

Die verbleibenden Mitglieder der Datenunion enthalten tatsächliche Daten, die aus dem SDP-Datenstrom extrahiert wurden. Für die meisten Typen sind die Daten direkt in der Struktur vorhanden. Für Zeichenfolgen und URLs wird jedoch ein Zeiger auf die tatsächlichen Daten bereitgestellt. Der Speicher für die Zeichenfolge wird vom SdpConvertStreamToTree Funktionsaufruf zugewiesen und muss durch Aufrufen der SdpFreeTree-Funktion für die Struktur freigegeben werden.

Bluetooth-Profiltreiber können über die BTHDDI_SDP_PARSE_INTERFACEeinen Zeiger auf diese Funktion abrufen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Versionen:_Supported in Windows Vista und höher.
Zielplattform- Desktop
Header- bthsdpddi.h (einschließlich BthSdpddi.h)
IRQL- <= PASSIVE_LEVEL

Siehe auch

BTHDDI_SDP_PARSE_INTERFACE

CONTAINING_RECORD

LIST_ENTRY

SDP_NODE

SDP_NODE_DATA

SDP_NODE_HEADER

SDP_TREE_ROOT_NODE

SdpFreeTree