音频终结点设备的友好名称

在 Windows Vista、Windows Server 2008 及更高版本的 Windows 中,音频子系统支持音频终结点设备的概念,例如扬声器、耳机、麦克风和 CD 播放器。 音频终结点的概念有助于创建用户友好的音频应用程序,这些应用程序具有引用用户直接操作终结点设备的用户界面。 这些终结点具有友好名称,例如应用程序可以在其用户界面中显示的"扬声器"、"耳机"、"麦克风"和"CD 播放器"。 有关终结点设备的信息,请参阅 音频终结点设备

音频子系统将音频适配器即插即用 (PnP) 设备作为 KS 筛选器进行模型。 数据流通过 KS 引脚进入和退出筛选器。 网桥引脚是音频终结点设备通过其连接到 KS 筛选器的 KS 引脚。 有关桥引脚详细信息,请参阅 音频筛选器图

音频子系统通过检查终结点设备连接到的网桥引脚的属性,获取有关音频终结点设备的信息。 此类属性之一是 (KSPROPERTY_PIN_CATEGORY)

对于每个 KS 筛选器,适配器驱动程序都提供一个PCPIN_DESCRIPTOR结构表,用于描述筛选器上 KS 引脚的属性。 图钉类别 GUID 存储在属性结构的 KsPinDescriptor.Category PCPIN_DESCRIPTOR成员。 对于桥引脚,引脚类别 GUID 的值指示连接到网桥引脚的终结点类型。 例如,图钉类别 GUID KSNODETYPE_MICROPHONE表示网桥引脚连接到麦克风,GUID KSNODETYPE_SPEAKER表示网桥引脚连接到扬声器等。 KSNODETYPE_XXX GUID 在 Ksmedia.h 头文件中定义。

此外, PCPIN_DESCRIPTOR 包含一个 GUID,该 GUID 可用于通过唯一名称标识引脚。 此引脚名称 GUID 存储在 KsPinDescriptor.Name 的PCPIN_DESCRIPTOR 成员中。 此名称 GUID 由 (KSPROPERTY_PIN_NAME) 属性使用,以将注册表中的友好名称与 pin 关联。

音频子系统调用 KSPROPERTY_PIN_NAME 属性, 以将友好名称与音频终结点关联。 KS 首先在注册表中搜索描述此 GUID 的 unicode 字符串,KsPinDescriptor.Name 请求。 如果 KS 找不到条目,它会在注册表中搜索描述 KsPinDescriptor.Category GUID 的 unicode 字符串。

从 Windows 10 REDSTONE 5 开始,在搜索注册表时,KS 首先在设备的软件密钥中查找条目。 这由 INF 通过设备驱动程序 INF 的 [Models] 部分引用的 AddReg 节创建。 AddReg 节使用 HKR\MediaCategories 键构造这些条目。 这允许驱动程序开发人员为"名称"和"类别 GUID"创建特定于设备的友好名称,无论 GUID 是否对设备是唯一的。

如果设备的软件密钥中尚未安装条目,或者驱动程序在 Windows 10 REDSTONE 5 之前的操作系统上运行,则 KS 将查看 HKLM\SYSTEM\CurrentControlSet\Control\MediaCategories 注册表项。 第二个键被视为全局名称空间。 从 WINDOWS 10 REDSTONE 5 开始,此空间保留给全局定义,不应由新驱动程序修改。 将来的 OS 版本不支持修改此密钥下的条目。

公开标准类别 GUID 的引脚的音频设备应包含/需要收件箱 KS。INF 或 KSCAPTUR。设备 INF 中的 INF 名称注册。 这些收件箱 INF 包含驱动程序可能想要填充的预定义类别 GUID 的默认友好名称定义。 这些 GUID 与在属性结构的 KsPinDescriptor.Category 成员PCPIN_DESCRIPTOR相同。 例如,类别 GUID KSNODETYPE_MICROPHONE项具有关联的友好名称"麦克风",类别 GUID KSNODETYPE_SPEAKER 条目具有关联的友好名称"speakers",等等。

Category 和 Name GUID 的 GUID 和友好名称存储在 HKR\MediaCategories 下,而全局定义 HKLM\SYSTEM\CurrentControlSet\Control\MediaCategories 路径。 对于注册表中的每个 GUID 名称对,GUID 字符串用作 MediaCategories 项下的子键。 在 GUID 键下,友好名称为"Name"变量下的 Unicode 字符串值。

如果音频子系统定义的友好名称和固定类别都未充分描述设备,可以定义自己的引脚类别和名称 GUID,并将友好名称与 INF 中的友好名称关联。 若要确保固定类别 GUID 是唯一的,请使用 Uuidgen.exe 等实用工具来生成 GUID。 接下来,修改安装音频适配器的 INF 文件,将 pin-category GUID 和友好名称写入注册表路径 HKR\MediaCategories。 下面的代码示例演示 INF 文件的片段,该文件将两个 pin 类别 GUID 及其关联的友好名称添加到注册表:

[Manufacturer]
MyOEMName=Unicorn,NTamd64

[Unicorn.NTamd64]
MyDeviceName=MyDevice,Root\MyDevice

[MyDevice.NT]
Include=ks.inf, kscaptur.inf
Needs=KS.Registration, KSCAPTUR.Registration.NT
CopyFiles=MyDevice.CopyFiles
AddReg=PinNameRegistration

...

[PinNameRegistration]
HKR,%MediaCategories%\%GUID.MyNewEndpointCategory%,Name,,%Name.MyNewEndpointCategory%
HKR,%MediaCategories%\%GUID.MyNewEndpointName%,Name,,%Name.MyNewEndpointName%

...

[Strings]
MyOEMName="Unicorns Inc."
MyDeviceName="Sparkly Unicorn"
MediaCategories="MediaCategories"

GUID.MyNewEndpointCategory="{B72FBD1A-4634-4240-B207-0E6B52F3701C}"
GUID.MyNewEndpoint_2="{71DD3A5D-E303-49A0-ACEE-908634AA9520}"

Name.MyNewEndpointCategory="Unicorn"
Name.MyNewEndpointName="Fred the Unicorn"

这两个 GUID 字符串都是由 Uuidgen.exe。

应用程序可以使用设备的 IPropertyStore 接口访问音频终结点设备的属性。 接口使用 Functiondiscoverykeys_devpkey.h 和 Mmdeviceapi.h 头文件中定义的属性键来标识属性。 应用程序可以使用 PKEY_Device_FriendlyName属性键 来检索终结点设备的友好名称。 对于空间受限的用户界面,可以使用属性键检索友好名称的PKEY_Device_DeviceDesc版本。 有关这些属性键的信息,请参阅 IMMDevice::OpenPropertyStore

IPropertyStore 接口实例维护音频终结点设备的持久性属性存储。 属性存储从注册表路径 HKLM\SYSTEM\CurrentControlSet\Control\MediaCategories 中与 KS pin 类别 GUID 关联的友好名称字符串中复制 PKEY_Device_DeviceDesc 属性键的初始值。 应用程序可以从属性 PKEY_Device_DeviceDesc 读取 (字符串) ,但不能更改该值。 但是,用户可以通过使用多媒体控制面板Windows来修改Mmsys.cpl。 例如,在 Windows Vista 中,可以使用以下步骤修改呈现终结点设备的名称:

  1. 若要运行Mmsys.cpl,请打开命令提示符窗口并输入以下命令:

    mmsys.cpl
    

    (,也可以Mmsys.cpl单击位于任务栏右侧的通知区域中的扬声器图标,然后单击"播放 设备".)

  2. 单击呈现设备的名称,然后单击"属性 "

  3. 在"属性窗口"选项卡中,单击"常规"选项卡。友好名称应显示在属性表顶部的文本框中。 可以编辑友好名称,然后单击"确定"保存 更改

前面的步骤更改存储在音频终结点设备的属性存储中的友好名称。 这些步骤对与属于同一 KS 引脚类别的其他音频终结点设备关联的友好名称没有影响。 它们还对可能直接查询 KS 以输入名称的任何组件不起作用。