다음을 통해 공유


오디오 어댑터용 디바이스 인터페이스 설치

클라이언트는 공급업체가 어댑터의 INF 파일에 지정하는 디바이스 인터페이스 집합을 통해 오디오 디바이스에 액세스합니다. INF 파일에 지정된 디바이스 인터페이스에는 어댑터 드라이버가 디바이스를 초기화할 때 만드는 하위 서비스에 대한 일대일 대응이 있습니다( 하위 서비스 만들기 참조). 각 디바이스 인터페이스에 대해 INF 파일은 인터페이스의 레지스트리 키 아래에 있는 사용자 모드에서 액세스할 수 있는 FriendlyName 항목 값을 지정합니다.

커널 스트리밍 아키텍처에서 토폴로지 범주( KSPROPERTY_TOPOLOGY_CATEGORIES 참조)는 디바이스 인터페이스 클래스를 나타냅니다.

다음 표에서는 오디오 어댑터가 하위 서비스의 기능을 설명하는 데 사용할 가능성이 가장 높은 토폴로지 범주를 나열합니다.

범주 Description
KSCATEGORY_ACOUSTIC_ECHO_CANCEL 음향 에코 취소를 수행할 수 있는 오디오 장치( DirectSound 캡처 효과 참조)는 이 범주에 등록됩니다.
KSCATEGORY_AUDIO 모든 오디오 디바이스는 이 범주에 따라 등록됩니다.
KSCATEGORY_CAPTURE 데이터 스트림을 캡처할 수 있는 오디오 디바이스는 이 범주에 따라 자체 등록됩니다.
KSCATEGORY_DATATRANSFORM 스트림에서 데이터 변환을 수행하는 오디오 디바이스는 이 범주에 따라 자체 등록됩니다.
KSCATEGORY_MIXER 데이터 스트림을 혼합할 수 있는 오디오 디바이스는 이 범주에 따라 자체 등록됩니다.
KSCATEGORY_RENDER 데이터 스트림을 렌더링할 수 있는 오디오 디바이스는 이 범주에 등록됩니다.
KSCATEGORY_SYNTHESIZER MIDI 메시지를 웨이브 오디오 샘플 또는 아날로그 출력 신호로 변환할 수 있는 오디오 디바이스가 이 범주에 등록 됩니다(신시사이저 및 웨이브 싱크 참조).
KSCATEGORY_TOPOLOGY 디바이스의 토폴로지 미니포트 드라이버는 이 범주에 등록됩니다.
KSCATEGORY_DRM_DESCRAMBLE DRM으로 보호되는 웨이브 스트림을 해독할 수 있는 오디오 디바이스가 이 범주에 등록됩니다( 디지털 권한 관리 참조).

토폴로지 범주의 전체 목록은 헤더 파일 Ks.h 및 Ksmedia.h에 정의된 KSCATEGORY_XXX GUID를 참조하세요.

모든 오디오 디바이스는 KSCATEGORY_AUDIO 따라 분류되지만 오디오 디바이스는 KSCATEGORY_RENDER(오디오 렌더링 디바이스의 경우) 또는 KSCATEGORY_SYNTHESIZER(신시사이저의 경우)와 같은 추가 범주로 분류될 수도 있습니다. INF 파일이 디바이스에 대해 지정하는 각 범주에 대해 Windows Installer는 범주 이름 아래에 해당 디바이스에 대한 레지스트리 항목 집합을 빌드 합니다(필터 팩터리 참조).

기본 제공 신시사이저가 포함된 디바이스만 범주 KSCATEGORY_SYNTHESIZER 따라 등록해야 합니다. 이 범주는 순수 MPU-401 디바이스를 제외합니다. UART에서 원시 MIDI를 출력하거나 입력할 수 있는 순수 MPU-401 디바이스는 다음 범주에 따라 등록해야 합니다.

  • KSCATEGORY_AUDIO

  • KSCATEGORY_RENDER

  • KSCATEGORY_CAPTURE

SysAudio 시스템 드라이버는 레지스트리 범주를 가상 오디오 디바이스에만 KSCATEGORY_AUDIO_DEVICE 예약합니다. 어댑터 드라이버는 이 범주에 등록하면 안 됩니다.

다음 예제에서는 어댑터가 일반적으로 오디오 디바이스에 대해 지원하는 네 가지 일반적인 시스템 정의 디바이스 인터페이스를 설치합니다.

예: 오디오 디바이스 인터페이스 설치

이 예제에서 XYZ 오디오 디바이스의 device-install 섹션은 INF AddInterface 지시문을 사용하여 4개의 오디오 어댑터 인터페이스를 설치합니다. 다음에서 네 개의 지시문 각각은 인터페이스에 고유한 참조 문자열을 할당합니다. 이 문자열은 어댑터 드라이버가 각 인터페이스 클래스의 인스턴스를 구분하는 데 사용할 수 있습니다.

  [XYZ-Audio-Device.Interfaces]
  AddInterface=%KSCATEGORY_AUDIO%,%KSName_Wave%,XYZ-Audio-Device.Wave
  AddInterface=%KSCATEGORY_RENDER%,%KSName_Wave%,XYZ-Audio-Device.Wave
  AddInterface=%KSCATEGORY_CAPTURE%,%KSName_Wave%,XYZ-Audio-Device.Wave
  AddInterface=%KSCATEGORY_TOPOLOGY%,%KSName_Topology%,XYZ-Audio-Device.Topology

처음 세 개의 AddInterface 지시문은 XYZ-Audio-Device.Wave라는 추가 인터페이스 섹션을 지정합니다. 마지막은 XYZ-Audio-Device.Topology라는 추가 인터페이스 섹션을 지정합니다. 각 추가 인터페이스 섹션은 다음 레지스트리 항목을 \DeviceClasses\<InterfaceGUID> 레지스트리 키 아래의 사용자 모드에서 액세스할 수 있는 디바이스 인터페이스 하위 키에 추가합니다.

  • FriendlyName 레지스트리 항목은 각 디바이스 인터페이스의 이름을 지정합니다.

  • Microsoft DirectShow에는 KSProxy 시스템 드라이버에서 어댑터에 액세스하고 제어할 수 있음을 나타내는 프록시 GUID 값으로 설정된 CLSID 레지스트리 항목이 필요합니다.

레지스트리에 각 인터페이스의 FriendlyName 및 CLSID를 추가하는 INF 파일 항목이 포함된 두 개의 추가 인터페이스 섹션이 다음 예제에 표시됩니다.

  [XYZ-Audio-Device.Wave]
  AddReg=XYZ-Audio-Device.Wave.AddReg
  [XYZ-Audio-Device.Wave.AddReg]
  HKR,,FriendlyName,,%WaveDeviceName%
  HKR,,CLSID,,%Proxy.CLSID%

  [XYZ-Audio-Device.Topology]
  AddReg=XYZ-Audio-Device.Topology.AddReg
  [XYZ-Audio-Device.Topology.AddReg]
  HKR,,FriendlyName,,%WaveDeviceMixerName%
  HKR,,CLSID,,%Proxy.CLSID%

이 예제의 키워드(keyword) HKR은 디바이스에 대한 시스템 제공 레지스트리 경로를 표시합니다. 자세한 내용은 INF AddReg 지시문을 참조하세요.

다음은 이 예제의 문자열 섹션입니다.

  [Strings]
  KSCATEGORY_AUDIO="{6994AD04-93EF-11D0-A3CC-00A0C9223196}"
  KSCATEGORY_RENDER="{65E8773E-8F56-11D0-A3B9-00A0C9223196}"
  KSCATEGORY_CAPTURE="{65E8773D-8F56-11D0-A3B9-00A0C9223196}"
  KSCATEGORY_TOPOLOGY="{DDA54A40-1E4C-11D1-A050-405705C10000}"
  Proxy.CLSID="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
  WaveDeviceName="XYZ Audio Device"
  WaveDeviceMixerName="XYZ Audio Device Super Mixer"

어댑터 드라이버가 내부적으로 문자열 상수와 동일한 이름을 사용하므로 addInterface 지시문이 KSCATEGORY_XXX 디바이스 인터페이스에 대해 지정하는 문자열 이름을 지역화할 수 없습니다. WDK(Windows 드라이버 키트)의 샘플 어댑터 드라이버는 오디오 디바이스 인터페이스에 다음 문자열 이름을 사용합니다.

  KSNAME_Wave="Wave"
  KSNAME_UART="UART"
  KSNAME_FMSynth="FMSynth"
  KSNAME_Topology="Topology"
  KSNAME_Wavetable="Wavetable"
  KSNAME_DMusic="DMusic"

균일성을 위해 독점 드라이버는 해당 디바이스 인터페이스에 동일한 이름을 할당해야 합니다. 드라이버가 독점적인 추가 디바이스 인터페이스를 지원하는 경우 이러한 인터페이스에 대한 고유한 고유한 이름을 발명할 수 있습니다. 드라이버에서 사용하는 이름이 INF 파일의 이름과 일치하는지 확인합니다. 문자열이 일치하지 않으면 시스템 설정에서 드라이버를 로드하지 않습니다.