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.Flink
und Node.hdr.Link.Blink
kö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.Flink
die 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 |