Установка интерфейсов устройств для аудиоадаптера
Клиент обращается к звуковому устройству через набор интерфейсов устройств, указанных поставщиком в INF-файле адаптера. Интерфейсы устройств, указанные в INF-файле, имеют соответствие "один к одному" с подустройствами, создаваемыми драйвером адаптера при инициализации устройства (см. раздел Создание subdevice). Для каждого интерфейса устройства в INF-файле указывается значение записи FriendlyName , которое доступно в пользовательском режиме в разделе реестра интерфейса.
В архитектуре потоковой передачи ядра категории топологии (см . KSPROPERTY_TOPOLOGY_CATEGORIES) представляют классы интерфейса устройства.
В следующей таблице перечислены категории топологий, которые звуковые адаптеры, скорее всего, будут использовать для описания возможностей своих подустройств.
Категория | Описание |
---|---|
KSCATEGORY_ACOUSTIC_ECHO_CANCEL | Звуковое устройство, которое может выполнять подавление акустического эха (см. раздел Эффекты захвата DirectSound), регистрируется в этой категории. |
KSCATEGORY_AUDIO | Все звуковые устройства регистрируются в этой категории. |
KSCATEGORY_CAPTURE | Звуковое устройство, которое может захватывать поток данных, регистрируется в этой категории. |
KSCATEGORY_DATATRANSFORM | Звуковое устройство, выполняющее преобразование данных в потоке, регистрируется в этой категории. |
KSCATEGORY_MIXER | Звуковое устройство, которое может смешивать потоки данных, регистрируется в этой категории. |
KSCATEGORY_RENDER | Звуковое устройство, которое может отображать поток данных, регистрируется в этой категории. |
KSCATEGORY_SYNTHESIZER | Звуковое устройство, которое может преобразовывать сообщения MIDI в образцы волнового звука или аналоговый выходной сигнал, регистрируется в этой категории (см. раздел Синтезаторы и приемники волн). |
KSCATEGORY_TOPOLOGY | Драйвер мини-порта топологии устройства регистрируется в этой категории. |
KSCATEGORY_DRM_DESCRAMBLE | Звуковое устройство, которое может расшифровываться поток волн, защищенный с помощью DRM, регистрируется в этой категории (см. раздел Управление цифровыми правами). |
Полный список категорий топологий см. в разделе guid KSCATEGORY_XXX, которые определены в файлах заголовков Ks.h и Ksmedia.h.
Все звуковые устройства классифицируются как KSCATEGORY_AUDIO, но звуковое устройство также может быть классифицировано по дополнительным категориям, таким как KSCATEGORY_RENDER (для устройства отрисовки звука) или KSCATEGORY_SYNTHESIZER (для синтезатора). Для каждой категории, указанной в INF-файле для устройства, установщик Windows создает набор записей реестра для этого устройства под именем категории (см. раздел Фабрики фильтров).
Только устройство, содержащее встроенный синтезатор, должно регистрироваться в категории KSCATEGORY_SYNTHESIZER. Обратите внимание, что в этой категории не используется устройство MPU-401. Устройство MPU-401, которое может выводить или вводить необработанный MIDI в UART или из нее, должно регистрироваться в следующих категориях:
KSCATEGORY_AUDIO
KSCATEGORY_RENDER
KSCATEGORY_CAPTURE
Обратите внимание, что системный драйвер SysAudio резервирует категорию реестра KSCATEGORY_AUDIO_DEVICE исключительно для виртуальных звуковых устройств. Драйверы адаптера не должны регистрировать себя в этой категории.
В следующем примере устанавливаются четыре распространенных системных интерфейса устройства, которые адаптер обычно поддерживает для звукового устройства.
Пример. Установка интерфейсов аудиоустройств
В этом примере раздел device-install для аудиоустройства XYZ использует директиву INF AddInterface для установки четырех интерфейсов аудиоадаптера. В следующем примере каждая из четырех директив присваивает интерфейсу уникальную ссылочной строку, которую драйвер адаптера может использовать для различения экземпляров каждого класса интерфейса.
[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. Каждый раздел add-interface добавляет следующие записи реестра в подраздел интерфейса устройства, который доступен в пользовательском режиме в разделе реестра \DeviceClasses\<InterfaceGUID> :
Запись реестра FriendlyName указывает понятное имя для каждого интерфейса устройства.
Для Microsoft DirectShow требуется запись реестра CLSID со значением GUID прокси-сервера, которое указывает, что к адаптеру можно обращаться и управлять с помощью системного драйвера KSProxy.
В следующем примере отображаются два раздела интерфейса надстройки, которые содержат записи INF-файла, которые добавляют в реестр friendlyName и CLSID каждого интерфейса:
[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%
В этом примере ключевое слово HKR обозначает предоставленный системой путь к реестру для устройства. Дополнительные сведения см. в разделе Inf AddReg Directive.
Ниже приведен раздел Строки для этого примера.
[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_XXXX, невозможно локализовать, так как драйвер адаптера внутренне использует то же имя, что и строковая константа. Примеры драйверов адаптера в комплекте драйверов Windows (WDK) используют следующие строковые имена для интерфейсов звуковых устройств:
KSNAME_Wave="Wave"
KSNAME_UART="UART"
KSNAME_FMSynth="FMSynth"
KSNAME_Topology="Topology"
KSNAME_Wavetable="Wavetable"
KSNAME_DMusic="DMusic"
Для единообразия защищаемый драйвер должен назначать эти же имена соответствующим интерфейсам устройств. Если драйвер поддерживает дополнительные интерфейсы устройств, которые являются проприетарными, вы можете придумать собственные собственные имена для этих интерфейсов. Убедитесь, что имена, которые использует драйвер, совпадают с именами в INF-файле. Если строки не совпадают, программа установки не загрузит драйвер.