Несколько вложенных звуковых элементов

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

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

Удобочитаемые имена появляются на аудиопанели управления, чтобы определить подустройства.