多个音频子设备

多功能设备可以包含两个或多个音频子设备。 例如,适配器驱动程序可能允许将八声道音频设备作为四个立体声声道向系统公开。 编写适配器驱动程序以这种方式公开多个子设备时,应将有关子设备的信息合并到驱动程序的启动序列 和 INF 文件中。

首先,适配器驱动程序应在启动序列期间将每个立体声子设备作为端口/微型端口驱动程序对的单独实例公开。 Microsoft Windows 驱动程序工具包 (WDK) 中的几个示例适配器实现一个 InstallSubdevice 函数,该函数将创建并注册一个子设备,该子设备由系统端口驱动程序、微型端口驱动程序和一组要绑定到此对的资源组成。 在启动期间,驱动程序应为每个立体声子设备调用一次其 InstallSubdevice 函数,并为每个端口/微型端口驱动程序对指定唯一名称。

此外,分配给此对的唯一名称必须与在驱动程序的 INF 文件中指定的 KSNAME 字符串匹配。 例如,驱动程序可能会在启动时将名称“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"

友好名称显示在音频控制面板中,用于标识子设备。