오디오 엔드포인트 디바이스의 이름
Windows Vista, Windows Server 2008 이상 버전의 Windows에서 오디오 하위 시스템은 스피커, 헤드폰, 마이크 및 CD 플레이어와 같은 오디오 엔드포인트 디바이스의 개념을 지원합니다. 이 오디오 엔드포인트 개념은 사용자가 직접 조작하는 엔드포인트 디바이스를 참조하는 사용자 인터페이스가 있는 사용자에게 친숙한 오디오 애플리케이션을 만드는 데 도움이 됩니다. 이러한 엔드포인트에는 애플리케이션이 사용자 인터페이스에 표시할 수 있는 "스피커", "헤드폰", "마이크" 및 "CD 플레이어"와 같은 친숙한 이름이 있습니다. 엔드포인트 디바이스에 대한 자세한 내용은 오디오 엔드포인트 디바이스를 참조하세요.
오디오 하위 시스템은 오디오 어댑터의 PnP(플러그 앤 플레이) 디바이스를 KS 필터로 모델링합니다. 데이터 스트림은 KS 핀을 통해 필터를 입력하고 종료합니다. 브리지 핀은 오디오 엔드포인트 디바이스가 KS 필터에 연결하는 KS 핀입니다. 브리지 핀에 대한 자세한 내용은 오디오 필터 그래프를 참조하세요.
오디오 하위 시스템은 엔드포인트 디바이스가 연결하는 브리지 핀의 속성을 검사하여 오디오 엔드포인트 디바이스에 대한 정보를 가져옵니다. 이러한 속성 중 하나는 핀 범주 속성 (KSPROPERTY_PIN_CATEGORY)입니다.
각 KS 필터에 대해 어댑터 드라이버는 필터에서 KS 핀의 속성을 설명하는 PCPIN_DESCRIPTOR 구조의 테이블을 제공합니다. 핀 범주 GUID는 PCPIN_DESCRIPTOR 구조체의 KsPinDescriptor.Category 멤버에 저장됩니다. 브리지 핀의 경우 핀 범주 GUID 값은 브리지 핀에 연결하는 엔드포인트의 유형을 나타냅니다. 예를 들어 핀 범주 GUID KSNODETYPE_MICROPHONE 브리지 핀이 마이크에 연결되고 GUID KSNODETYPE_SPEAKER 브리지 핀이 스피커에 연결됨을 나타냅니다. KSNODETYPE_XXX GUID는 Ksmedia.h 헤더 파일에 정의되어 있습니다.
또한 PCPIN_DESCRIPTOR 고유한 이름으로 핀을 식별하는 데 사용할 수 있는 GUID를 포함합니다. 이 핀 이름 GUID는 PCPIN_DESCRIPTOR 구조체의 KsPinDescriptor.Name 멤버에 저장됩니다. 이 이름 GUID는 (KSPROPERTY_PIN_NAME) 속성에서 레지스트리에 있는 식별 이름을 핀과 연결하는 데 사용됩니다.
오디오 하위 시스템은 KSPROPERTY_PIN_NAME 속성을 호출하여 친숙한 이름을 오디오 엔드포인트와 연결합니다. KS는 KsPinDescriptor.Name GUID를 설명하는 레지스트리에서 유니코드 문자열을 먼저 검색하여 이 요청을 처리합니다. KS에서 항목을 찾지 못하면 레지스트리에서 KsPinDescriptor.Category GUID를 설명하는 유니코드 문자열을 검색합니다.
Windows 10 2018년 10월 업데이트 버전 1809부터 레지스트리를 검색할 때 KS는 먼저 디바이스의 소프트웨어 키에서 항목을 찾습니다. 디바이스 드라이버 INF의 [Models] 섹션에서 참조하는 AddReg 섹션을 통해 INF에서 만듭니다. AddReg 섹션에서는 HKR\MediaCategories 키를 사용하여 이러한 항목을 생성합니다. 이를 통해 드라이버 개발자는 GUID가 디바이스에 고유한지 여부에 관계없이 이름 및 범주 GUID 모두에 대한 디바이스별 식별 이름을 만들 수 있습니다.
항목이 디바이스의 소프트웨어 키에 설치되지 않았거나 드라이버가 Windows 10 버전 1809 이전에 운영 체제에서 실행 중인 경우 KS는 MediaCategories 레지스트리 키를 확인합니다. 이 두 번째 키는 전역 이름 공간으로 처리됩니다. Windows 10 버전 1809부터 이 공간은 전역 정의를 위해 예약되어 있으며 새 드라이버에서 수정해서는 안 됩니다. 이 키 아래의 항목 수정은 향후 OS 릴리스에서 지원되지 않습니다.
표준 범주 GUID가 있는 핀을 노출하는 오디오 디바이스에는 받은 편지함 KS가 포함/필요합니다. INF 또는 KSCAPTUR. 디바이스 INF에서 INF 이름 등록 이러한 받은 편지함 INF에는 드라이버가 채울 수 있는 미리 정의된 범주 GUID에 대한 기본 식별 이름 정의가 포함되어 있습니다. 이는 PCPIN_DESCRIPTOR 구조체의 KsPinDescriptor.Category 멤버에 있는 것과 동일한 GUID입니다. 예를 들어 범주 GUID KSNODETYPE_MICROPHONE 항목에는 연결된 식별 이름 "마이크"가 있고 범주 GUID KSNODETYPE_SPEAKER 항목에는 연결된 식별 이름 "스피커" 등이 있습니다.
범주 및 이름 GUID 모두에 대한 GUID 및 식별 이름은 레지스트리에 저장됩니다. 레지스트리의 각 GUID 이름 쌍에 대해 GUID 문자열은 MediaCategories 키 아래의 하위 키로 사용됩니다. GUID 키 아래의 식별 이름은 "Name" 변수 아래의 유니코드 문자열 값입니다.
오디오 하위 시스템에 정의된 식별 이름 및 핀 범주가 디바이스를 적절하게 설명하지 않는 경우 고유한 핀 범주와 이름 GUID를 정의하고 INF에서 친숙한 이름을 연결할 수 있습니다. 핀 범주 GUID가 고유한지 확인하려면 Uuidgen.exe 같은 유틸리티를 사용하여 GUID를 생성합니다. 다음으로 오디오 어댑터를 설치하는 INF 파일을 수정하여 고정 범주 GUID 및 친숙한 이름을 레지스트리에 씁니다. 다음 코드 예제에서는 레지스트리에 두 개의 핀 범주 GUID와 연결된 식별 이름을 추가하는 INF 파일의 조각을 보여 줍니다.
[Manufacturer]
MyOEMName=Unicorn,NTamd64
[Unicorn.NTamd64]
MyDeviceName=MyDevice,Root\MyDevice
[MyDevice.NT]
Include=ks.inf, kscaptur.inf
Needs=KS.Registration, KSCAPTUR.Registration.NT
CopyFiles=MyDevice.CopyFiles
AddReg=PinNameRegistration
...
[PinNameRegistration]
HKR,%MediaCategories%\%GUID.MyNewEndpointCategory%,Name,,%Name.MyNewEndpointCategory%
HKR,%MediaCategories%\%GUID.MyNewEndpointName%,Name,,%Name.MyNewEndpointName%
...
[Strings]
MyOEMName="Unicorns Inc."
MyDeviceName="Sparkly Unicorn"
MediaCategories="MediaCategories"
GUID.MyNewEndpointCategory="{B72FBD1A-4634-4240-B207-0E6B52F3701C}"
GUID.MyNewEndpoint_2="{71DD3A5D-E303-49A0-ACEE-908634AA9520}"
Name.MyNewEndpointCategory="Unicorn"
Name.MyNewEndpointName="Fred the Unicorn"
두 GUID 문자열은 모두 Uuidgen.exe 의해 생성되었습니다.
애플리케이션은 디바이스의 IPropertyStore 인터페이스를 사용하여 오디오 엔드포인트 디바이스의 속성에 액세스할 수 있습니다. 인터페이스는 Functiondiscoverykeys_devpkey.h 및 Mmdeviceapi.h 헤더 파일에 정의된 속성 키를 사용하여 속성을 식별합니다. 애플리케이션은 PKEY_Device_FriendlyName 속성 키를 사용하여 엔드포인트 디바이스의 식별 이름을 검색할 수 있습니다. 공간 제약이 있는 사용자 인터페이스의 경우 PKEY_Device_DeviceDesc 속성 키를 사용하여 더 짧은 버전의 식별 이름을 검색할 수 있습니다. 이러한 속성 키에 대한 자세한 내용은 IMMDevice::OpenPropertyStore를 참조하세요.
IPropertyStore 인터페이스 instance 오디오 엔드포인트 디바이스에 대한 영구 속성 저장소를 유지 관리합니다. 속성 저장소는 레지스트리의 KS 핀 범주 GUID와 연결된 이름 문자열에서 PKEY_Device_DeviceDesc 속성 키의 초기 값을 복사합니다. 애플리케이션은 속성 저장소에서 PKEY_Device_DeviceDesc 속성 값(이름 문자열)을 읽을 수 있지만 값을 변경할 수는 없습니다. 그러나 사용자는 Windows 멀티미디어 제어판 Mmsys.cpl 사용하여 이름을 수정할 수 있습니다. 예를 들어 Windows Vista에서 다음 단계를 사용하여 렌더링 엔드포인트 디바이스의 이름을 수정할 수 있습니다.
Mmsys.cpl 실행하려면 명령 프롬프트 창을 열고 다음 명령을 입력합니다.
mmsys.cpl
또는 작업 표시줄 오른쪽에 있는 알림 영역에서 스피커 아이콘을 마우스 오른쪽 단추로 클릭하고 디바이스 재생을 클릭하여 Mmsys.cpl 실행할 수 있습니다.
렌더링 디바이스의 이름을 클릭한 다음 속성을 클릭합니다.
속성 창 일반 탭을 클릭합니다. 식별 이름은 속성 시트의 맨 위에 있는 텍스트 상자에 표시되어야 합니다. 친숙한 이름을 편집한 다음 확인을 클릭하여 변경 내용을 저장할 수 있습니다.
이전 단계에서는 오디오 엔드포인트 디바이스의 속성 저장소에 저장된 이름을 변경합니다. 이러한 단계는 동일한 KS 핀 범주에 속하는 다른 오디오 엔드포인트 디바이스와 연결된 식별 이름에 영향을 주지 않습니다. 또한 이름에 대해 KS를 직접 쿼리할 수 있는 구성 요소에는 영향을 주지 않습니다.