Поделиться через


Несколько вложенных аудиоустройств

Многофункциональное устройство может содержать два или более аудиоустройства. Например, драйвер адаптера может позволить восьмиканальные аудиоустройства быть доступны системе в виде четырех стереоканалов. При написании драйвера адаптера для предоставления доступа к нескольким подустройствам таким образом необходимо включить сведения о вложенных девицах в последовательность запуска драйвера и INF-файл.

Во-первых, драйвер адаптера должен предоставлять каждый подсеть стерео как отдельный экземпляр пары драйверов порта/минипорта во время последовательности запуска. Некоторые из примеров адаптеров в комплекте драйверов Microsoft Windows (WDK) реализуют InstallSubdevice функцию, которая создает и регистрирует вложенный адаптер, состоящий из драйвера системного порта, драйвера мини-порта и набора ресурсов, которые должны быть привязаны к этой паре. Во время запуска драйвер должен вызывать свою InstallSubdevice функцию один раз для каждого стереоподключа и указать уникальное имя для каждой пары портов и мини-портов.

Кроме того, уникальное имя, присваиваемое этой паре, должно соответствовать строке KSNAME, указанной в INF-файле драйвера. Например, драйвер может присвоить имена "Wave1" и "Wave2" двум подустройствам во время запуска, как показано ниже:

  InstallSubdevice(..., "Wave1",...);
  InstallSubdevice(..., "Wave2",...);

В этом случае в INF-файле должны отображаться те же имена:

  KSNAME_Wave1="Wave1"
  KSNAME_Wave2="Wave2"

В INF-файл должны добавляться интерфейсы, содержащие следующие имена:

  AddInterface=%KSCATEGORY_AUDIO%,%KSNAME_Wave1%,Test.Interface.Wave1
  AddInterface=%KSCATEGORY_AUDIO%,%KSNAME_Wave2%,Test.Interface.Wave2

INF-файл должен создать разделы AddReg (см. директиву INF AddReg), чтобы добавить сведения об этих интерфейсах в реестр:

  [Test.Interface.Wave1]
  AddReg=Test.I.Wave1.AddReg

  [Test.Interface.Wave2]
  AddReg=Test.I.Wave2.AddReg

В разделах AddReg также должны указываться записи реестра для каждого подраздела:

  [Test.I.Wave1.AddReg]
  HKR,,CLSID,,%Proxy.CLSID%
  HKR,,FriendlyName,,%Test.Wave1.szName%

  [Test.I.Wave2.AddReg]
  HKR,,CLSID,,%Proxy.CLSID%
  HKR,,FriendlyName,,%Test.Wave2.szName%

Наконец, INF-файл должен определить понятные имена для этих подразделов:

  Test.Wave1.szName="Punch"
  Test.Wave2.szName="Judy"

Понятные имена отображаются на панели управления звуком для идентификации вложенных служб.