次の方法で共有


PCONVERTSTREAMTOTREE コールバック関数 (bthsdpddi.h)

Bluetooth SdpConvertStreamToTree 関数は、元のストリームベースの表現を変更せずに、Microsoft 独自のツリーベースの SDP レコード表現を作成するために使用されます。

構文

PCONVERTSTREAMTOTREE Pconvertstreamtotree;

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

パラメーター

Stream

ツリー ベースの表現に変換する SDP レコード ストリーム。

Size

ソース SDP レコード ストリームのサイズ。

Node

SDP ツリー ベースの SDP レコード表現のルートとして機能するSDP_TREE_ROOT_NODE構造体へのポインター。

tag

メモリ割り当てを行うドライバーを一意に識別する 4 バイト プール タグ を指定します。 プール タグの詳細については、「 ExAllocatePoolWithTag」を参照してください。

戻り値

可能な戻り値は次のとおりです。

STATUS_SUCCESS
STATUS_INSUFFICIENT_RESOURCES
STATUS_INVALID_PARAMETER

注釈

ツリーはポインターを評価することで走査できるため、 SdpConvertStreamToTree 関数を使用すると、プロファイル ドライバーが SDP レコードから情報を簡単に抽出できます。

SdpConvertStreamToTree 関数の呼び出しによって生じる SDP レコードのツリー表現は、相互接続された一連のSDP_NODE構造体で構成されます。 ルート ノードには、1 つのSDP_TREE_ROOT_NODE構造が含まれています。

各SDP_NODE構造体には、 SDP_NODE_HEADER 構造体と SDP_NODE_DATA 共用体が含まれています。 ヘッダーはデータの種類を指定し、Bluetooth プロファイル ドライバーは、LIST_ENTRYシステム構造を介してピア SDP_NODE構造体へのリンク アクセスできます。 この構造体 と Node.hdr.Link.FlinkNode.hdr.Link.Blinkを評価することで、ドライバーはツリー内のピア ノードのアドレスを取得できます。 LIST_ENTRY構造体内のポインターは、他のLIST_ENTRY構造体へのアドレスを保持し、Bluetooth ドライバーは 、CONTAINING_RECORD メモリ マネージャー マクロを使用して、格納されているノード レコードのアドレスを抽出する必要があることに注意してください。

SDP_NODE_DATA共用体のシーケンス代替メンバーを使用すると、プロファイル ドライバーはツリーのサブ要素にアクセスできます。 ノードのデータ型が SDP_TYPE_SEQUENCE場合、ノードは SDP シーケンスです。 ノードのデータ型が SDP_TYPE_ALTERNATIVE場合、ノードは SDP 代替シーケンスです。 最初のケースでは、シーケンス メンバーは有効であり、シーケンスに対応するツリーの部分にアクセスするために必要な情報が含まれています。 2 番目のケースでは、代替メンバーは有効であり、代替に対応するツリーの部分にアクセスするために必要な情報が含まれています。 シーケンスまたは代替メンバーを使用すると、シーケンスまたは代替のノードにアクセスするために使用される追加のSDP_NODE_HEADER構造が含まれます。 たとえば、 node->u.sequence.Flinkノードによって表されるシーケンスの最初のメンバーのLIST_ENTRY構造体を指します。

データ共用体の残りのメンバーには、SDP ストリームから抽出された実際のデータが含まれています。 ほとんどの型では、データは構造体に直接存在します。 ただし、文字列と URL の場合、実際のデータへのポインターが提供されます。 文字列のメモリは SdpConvertStreamToTree 関数呼び出しによって割り当てられ、ツリーの SdpFreeTree 関数を呼び出して解放する必要があります。

Bluetooth プロファイル ドライバーは、 BTHDDI_SDP_PARSE_INTERFACEを介してこの関数へのポインターを取得できます。

要件

要件
サポートされている最小のクライアント Windows Vista 以降のバージョン:_Supported。
対象プラットフォーム デスクトップ
Header bthsdpddi.h (BthSdpddi.h を含む)
IRQL <= PASSIVE_LEVEL

こちらもご覧ください

BTHDDI_SDP_PARSE_INTERFACE

CONTAINING_RECORD

LIST_ENTRY

SDP_NODE

SDP_NODE_DATA

SDP_NODE_HEADER

SDP_TREE_ROOT_NODE

SdpFreeTree