Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.Flink
und Node.hdr.Link.Blink
dieser 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.Flink
auf 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 |