PCONVERTSTREAMTOTREE 콜백 함수(bthsdpddi.h)
Bluetooth SdpConvertStreamToTree 함수는 원래 스트림 기반 표현을 수정되지 않은 상태로 유지하면서 SDP 레코드의 Microsoft 전용 트리 기반 표현을 만드는 데 사용됩니다.
구문
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 구조로 구성됩니다. 루트 노드에는 단일 SDP_TREE_ROOT_NODE 구조가 포함됩니다.
각 SDP_NODE 구조에는 SDP_NODE_HEADER 구조와 SDP_NODE_DATA 공용 구조체가 포함됩니다. 헤더는 데이터 형식을 지정하고 Bluetooth 프로필 드라이버는 LIST_ENTRY 시스템 구조를 통해 피어 SDP_NODE 구조에 대한 링크에 액세스할 수 있습니다. 이 구조체의 Node.hdr.Link.Flink
및 Node.hdr.Link.Blink
를 평가하면 드라이버는 트리에서 피어 노드의 주소를 가져올 수 있습니다. LIST_ENTRY 구조체의 포인터는 다른 LIST_ENTRY 구조체에 대한 주소를 포함하고 있으며 Bluetooth 드라이버는 CONTAINING_RECORD 메모리 관리자 매크로를 사용하여 포함된 노드 레코드의 주소를 추출해야 합니다.
SDP_NODE_DATA 공용 구조체의 시퀀스 및 대체 멤버를 사용하여 프로필 드라이버는 트리의 하위 요소에 액세스할 수 있습니다. 노드의 데이터 형식이 SDP_TYPE_SEQUENCE 노드는 SDP 시퀀스입니다. 노드의 데이터 형식이 SDP_TYPE_ALTERNATIVE 경우 노드는 SDP 대체 시퀀스입니다. 첫 번째 경우 시퀀스 멤버는 유효하며 시퀀스에 해당하는 트리 부분에 액세스하는 데 필요한 정보를 포함합니다. 두 번째 경우 대체 멤버는 유효하며 대안에 해당하는 트리 부분에 액세스하는 데 필요한 정보를 포함합니다. 시퀀스 또는 대체 멤버를 사용하는 경우 시퀀스 또는 대안의 노드에 액세스하는 데 사용되는 추가 SDP_NODE_HEADER 구조체가 포함됩니다. 예를 들어 는 node->u.sequence.Flink
노드가 나타내는 시퀀스의 첫 번째 멤버의 LIST_ENTRY 구조를 가리킵니다.
데이터 공용 구조체의 나머지 멤버는 SDP 스트림에서 추출된 실제 데이터를 포함합니다. 대부분의 형식에서 데이터는 구조에 직접 존재합니다. 그러나 문자열 및 URL의 경우 실제 데이터에 포인터가 제공됩니다. 문자열의 메모리는 SdpConvertStreamToTree 함수 호출에 의해 할당되며 트리에 대한 SdpFreeTree 함수를 호출하여 해제해야 합니다.
Bluetooth 프로필 드라이버는 BTHDDI_SDP_PARSE_INTERFACE 통해 이 함수에 대한 포인터를 가져올 수 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | 버전:windows Vista 이상에서 _Supported. |
대상 플랫폼 | 데스크톱 |
머리글 | bthsdpddi.h(BthSdpddi.h 포함) |
IRQL | <= PASSIVE_LEVEL |