Freigeben über


PCONVERTSTREAMTOTREE-Rückruffunktion (bthsdpddi.h)

Die Bluetooth SdpConvertStreamToTree-Funktion wird verwendet, um eine proprietäre, baumbasierte Darstellung eines SDP-Datensatzes von Microsoft zu erstellen, während die ursprüngliche streambasierte Darstellung unverändert bleibt.

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-Datensatzes dient.

tag

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

Rückgabewert

Mögliche Rückgabewerte sind:

STATUS_SUCCESS
STATUS_INSUFFICIENT_RESOURCES
STATUS_INVALID_PARAMETER

Hinweise

Da eine Struktur durch die Auswertung von Zeigern durchlaufen werden kann, kann die SdpConvertStreamToTree-Funktion es Profiltreibern erleichtern, Informationen aus einem SDP-Datensatz zu extrahieren.

Die Strukturdarstellung des SDP-Datensatzes, die sich aus dem Aufrufen der Funktion SdpConvertStreamToTree 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 Union. 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 Auswerten der Struktur Node.hdr.Link.Flinkund Node.hdr.Link.Blinkkönnen Treiber die Adressen von Peerknoten in der Struktur abrufen. Beachten Sie, dass die Zeiger in der LIST_ENTRY-Struktur Adressen auf 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.

Durch Die Verwendung der SDP_NODE_DATA Union-Sequenz und alternative Member können Profiltreiber auf Unterelemente der Struktur zugreifen. Wenn der Datentyp des Knotens SDP_TYPE_SEQUENCE ist, ist der Knoten eine SDP-Sequenz. Wenn der Datentyp des Knotens SDP_TYPE_ALTERNATIVE ist, ist der Knoten eine alternative SDP-Sequenz. Im ersten Fall ist der Sequenzmember gültig und enthält die Informationen, die für den Zugriff auf den Teil der Struktur erforderlich sind, der der Sequenz entspricht. Im zweiten Fall ist das alternative Element gültig und enthält die Informationen, die für den Zugriff auf den Teil der Struktur erforderlich sind, der der Alternative entspricht. Die Sequenz oder das 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. Zeigt beispielsweise auf die LIST_ENTRY Struktur des ersten Elements der Sequenz, node->u.sequence.Flinkdie durch den Knoten dargestellt wird.

Die restlichen Mitglieder der Datenunion enthalten tatsächliche Daten, die aus dem SDP-Stream extrahiert wurden. Bei den 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 Arbeitsspeicher für die Zeichenfolge wird durch den SdpConvertStreamToTree-Funktionsaufruf zugewiesen und muss durch Aufrufen der SdpFreeTree-Funktion für die Struktur freigegeben werden.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Versionen:_Supported in Windows Vista und höher.
Zielplattform Desktop
Kopfzeile bthsdpddi.h (include BthSdpddi.h)
IRQL <= PASSIVE_LEVEL

Weitere Informationen

BTHDDI_SDP_PARSE_INTERFACE

CONTAINING_RECORD

LIST_ENTRY

SDP_NODE

SDP_NODE_DATA

SDP_NODE_HEADER

SDP_TREE_ROOT_NODE

SdpFreeTree