终结点 ID 字符串

在Windows Vista中,系统会生成终结点 ID 字符串来标识系统中的音频终结点设备。 终结点 ID 字符串是一个以空字符结尾的宽字符字符串。 特定音频终结点设备的终结点 ID 字符串唯一标识系统中所有音频终结点设备中的设备。

如果系统包含两个或更多相同的音频适配器设备,相应的音频终结点设备将具有相同的友好名称,但每个终结点设备将具有唯一的终结点 ID 字符串。 有关获取终结点设备的友好名称的详细信息,请参阅 设备属性

获取音频终结点设备的 IMMDevice 接口实例后,客户端可以调用 IMMDevice::GetId 方法以获取设备的终结点 ID 字符串。 客户端可以使用终结点 ID 字符串在以后或通过调用 IMMDeviceEnumerator::GetDevice 方法在不同的进程中创建音频终结点设备的实例。

当任何音频终结点设备的状态发生更改时,客户端可以安排接收通知。 为了接收通知,客户端实现 IMMNotificationClient 接口,并将该接口注册到 MMDevice API。 当终结点设备的状态发生更改时,MMDevice API 会在客户端的 EDataFlow 接口中调用相应的方法。 方法的输入参数之一是标识状态已更改的终结点设备的终结点 ID 字符串。 有关 EDataFlow 的详细信息,请参阅 设备事件

旧版音频 API(如 DirectSound 和 Windows 多媒体功能)具有自己的接口,用于枚举和标识音频设备。 在 Windows Vista 中,这些接口已经过扩展,可提供终结点 ID 字符串,用于标识作为 API 所呈现的设备抽象基础的终结点设备。

在 DirectSound 设备枚举期间,DirectSound 为它枚举的每个设备提供终结点 ID 字符串。 有关详细信息,请参阅 旧版音频应用程序的音频事件

若要获取旧波形设备的终结点 ID 字符串,请使用 waveOutMessagewaveInMessage 函数将DRV_QUERYFUNCTIONINSTANCEID消息发送到波形设备驱动程序。 有关显示使用此消息的代码示例,请参阅旧版Windows多媒体应用程序的设备角色

有关使用核心音频 API 的功能增强使用旧音频 API 的应用程序的详细信息,请参阅 与旧版音频 API 的互操作性

客户端应将终结点 ID 字符串的内容视为不透明。 也就是说,客户端不应尝试分析字符串的内容以获取有关设备的信息。 原因是字符串格式未定义,可能从 MMDevice API 系统模块的一个实现更改为下一个实现。

端点 ID 字符串的生命周期与设备的安装相关联。 如果用户升级设备驱动程序,或者用户卸载设备,然后再次安装设备,则设备的终结点 ID 字符串将发生更改。 但是,当用户拔出设备并插回设备时,终结点 ID 字符串在系统重启时保持不变,USB 音频设备的终结点 ID 字符串保持不变。

由于操作系统和音频驱动程序更新可以更改物理音频终结点的终结点 ID 字符串,因此终结点 ID 不提供可靠的机制,使应用程序能够跨用户会话记住和跟踪音频终结点。 例如,通信应用可能希望记住用户选择用于呼叫的麦克风和扬声器。 如果应用程序使用终结点 ID 来跟踪用户的首选项,则更改麦克风/扬声器的终结点 ID 的音频驱动程序更新可能会导致应用程序失去用户的首选项。

从 Windows 11版本 24H2(内部版本 26100)开始,Windows在音频终结点上提供PKEY_AudioEndpoint_StableId属性,当可用时,应用程序可以使用该属性可靠地跟踪操作系统和音频驱动程序更新中的音频终结点。 PKEY_AudioEndpoint_StableId是应用可以保存的不透明区分大小写的字符串,稍后在调用 IMMDeviceEnumerator::GetDevice 以检索相同的音频终结点时使用。 有关详细信息,请参阅 PKEY_AudioEndpoint_StableId

音频终结点设备