다음을 통해 공유


오디오 속성에 대한 기본 지원 쿼리

필터, 핀 또는 노드에 대한 set-property 요청에 대한 데이터를 지정할 때 클라이언트는 속성에 대해 지정하는 값 또는 값에 대한 유효한 데이터 범위를 알아야 하는 경우가 자주 있습니다. 범위는 디바이스마다 다를 수 있으며, 동일한 디바이스 내의 노드에서 노드까지도 달라질 수 있습니다.

일부 속성은 set-property 요청이 범위를 벗어난 값을 지정할 수 있도록 정의되지만 미니포트 드라이버는 해당 값을 지원되는 범위로 자동으로 고정합니다(예: KSPROPERTY_AUDIO_VOLUMELEVEL 참조). 동일한 속성에 대한 후속 get 요청은 값 또는 값에 대한 드라이버의 실제 설정을 검색합니다. 이 설정은 클라이언트가 집합 요청에 지정한 값의 고정 버전일 수 있습니다.

그러나 클라이언트는 미니포트 드라이버에 의존하여 범위를 벗어난 값을 자동으로 고정하는 대신 속성 값의 범위를 알아야 할 수 있습니다. 예를 들어 오디오 디바이스에 대한 볼륨 제어 슬라이더를 제공하는 창이 있는 애플리케이션은 해당 범위를 슬라이더의 전체 길이에 매핑하기 위해 디바이스의 볼륨 범위를 알고 있어야 할 수 있습니다.

특정 속성에 대한 드라이버의 처리기 루틴은 기본 지원 속성 요청(KSPROPERTY_TYPE_BASICSUPPORT)에 대한 응답으로 범위 정보를 제공할 수 있어야 합니다. 드라이버에 기본 지원 속성 요청을 보낼 때 클라이언트는 속성 처리기가 기본 지원 정보를 작성하는 값 버퍼를 제공합니다. 이 정보는 속성별 데이터가 뒤따를 수 있는 KSPROPERTY_DESCRIPTION 구조로 구성됩니다. 이 데이터는 일반적으로 속성에 따라 하나 이상의 매개 변수 범위에 대한 사양으로 구성됩니다.

일반적으로 클라이언트는 이 값 버퍼의 크기를 미리 알지 못하며 값 크기를 확인하기 위해 속성 처리기에 하나 또는 두 개의 예비 요청을 보내야 합니다. 이러한 예비 요청의 형식은 잘 정의되어 있습니다. 클라이언트는 기본 지원 요청을 처리할 때 드라이버가 다음 규칙을 따르기를 기대합니다.

  • 요청이 값 크기를 sizeof(ULONG)로 지정하는 경우 속성 처리기는 KSPROPERTY_DESCRIPTION 구조체의 AccessFlags 멤버 값을 ULONG 크기의 값 버퍼에 써야 합니다. 처리기는 기본 지원 속성 요청에 대한 추가 지원을 제공하는 경우 KSPROPERTY_TYPE_BASICSUPPORT 플래그 비트를 설정합니다.

  • 요청이 값 크기를 sizeof(KSPROPERTY_DESCRIPTION)로 지정하는 경우 처리기는 데이터 버퍼에 KSPROPERTY_DESCRIPTION 구조를 작성해야 합니다. 처리기는 구조체의 DescriptionSize 필드를 해당 구조체의 크기와 같게 설정하고 처리기가 구조체 다음에 데이터 버퍼에 로드하는 데 사용할 수 있는 모든 추가 속성별 정보의 크기를 설정합니다. 이는 속성의 기본 지원 정보를 포함하기 위해 클라이언트가 할당해야 하는 값 버퍼의 크기입니다.

  • 요청이 KSPROPERTY_DESCRIPTION 구조와 속성별 정보를 모두 포함할 수 있을 만큼 큰 값 크기를 지정하는 경우 처리기는 KSPROPERTY_DESCRIPTION 구조를 버퍼의 시작 부분에 써야 하며 KSPROPERTY_DESCRIPTION 구조의 끝 뒤에 있는 데이터 버퍼 부분에 속성별 정보를 기록해야 합니다. KSPROPERTY_DESCRIPTION 구조체를 작성할 때 처리기는 DescriptionSize 필드를 해당 구조체의 크기와 구조체를 따르는 속성별 정보의 크기로 설정해야 합니다.

요청이 이러한 세 가지 경우 중 하나와 일치하지 않는 값 크기를 지정하는 경우 속성 처리기는 요청을 거부하고 코드 STATUS_BUFFER_TOO_SMALL 상태 반환합니다.

처리기가 값 버퍼에 쓰는 속성별 정보에는 속성 값에 대한 데이터 범위가 포함될 수 있습니다. KSPROPERTY_MEMBERSHEADER MembersSize 멤버는 데이터 범위가 포함되는지 여부를 나타냅니다.

  • MembersSize 는 범위가 필요하지 않은 경우 0입니다. 예를 들어 속성 값이 BOOL 형식인 경우입니다.

  • membersSize 는 KSPROPERTY_MEMBERSHEADER 구조 뒤에 하나 이상의 속성 값에 대한 범위 설명자가 뒤에 오면 0이 아닌 값입니다.

BOOL 형식의 속성 값의 경우 범위가 암시적으로 TRUEFALSE 값으로 제한되므로 범위 설명자가 필요하지 않습니다. 그러나 정수 형식의 속성 값 범위를 지정하려면 범위 설명자가 필요합니다.

예를 들어 볼륨 노드( KSNODETYPE_VOLUME )의 KSPROPERTY_AUDIO_VOLUMELEVEL 속성에 대한 기본 지원 요청은 해당 노드의 최소 및 최대 볼륨 설정을 검색합니다. 이 경우 클라이언트는 다음 구조를 포함할 수 있을 만큼 큰 값 버퍼를 할당해야 합니다.

KSPROPERTY_DESCRIPTION

KSPROPERTY_MEMBERSLIST

KSPROPERTY_STEPPING_LONG

세 구조체는 이전 목록에 표시된 순서대로 버퍼의 인접 위치에 압축됩니다. 요청을 처리할 때 미니포트 드라이버는 최소 및 최대 볼륨 수준을 KSPROPERTY_STEPPING_LONG 구조체의 Bounds 멤버에 씁니다.

범위 설명자 배열이 있는 기본 지원 요청의 예는 다중 채널 노드 노출의 그림을 참조하세요. 기본 지원 속성 요청에 대한 자세한 내용은 KS 속성을 참조하세요. 코드 예제는 Microsoft WDK(Windows 드라이버 키트)의 샘플 오디오 드라이버 에서 속성 처리기 구현을 참조하세요.