Несколько вложенных аудиоустройств
Многофункциональное устройство может содержать два или более аудиоустройства. Например, драйвер адаптера может позволить восьмиканальные аудиоустройства быть доступны системе в виде четырех стереоканалов. При написании драйвера адаптера для предоставления доступа к нескольким подустройствам таким образом необходимо включить сведения о вложенных девицах в последовательность запуска драйвера и 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"
Понятные имена отображаются на панели управления звуком для идентификации вложенных служб.