实现显示连接和配置
显示驱动程序开发人员和 OEM 可以使用连接和配置显示器(CCD)界面来更好地控制桌面显示设置。 CCD 接口包括:
- 用户模式驱动程序(UMD)和 OEM 应用程序可以调用的一组 用户模式 API 。 显示控制面板、热键和热插拔检测(HPD)管理器可以使用 CCD API。 OEM 可以将 CCD API 用于其增值小程序,而不是使用专用驱动程序转义。
- 内核模式显示微型端口驱动程序(KMD)可以调用的内核模式DDI。
CCD API 提供以下功能:
- 枚举当前连接的显示器中可能的显示路径。
- 设置拓扑(例如克隆和扩展)、布局信息、分辨率、方向和纵横比,以便在一个函数调用中显示所有连接的显示。 通过调用一个函数,屏幕闪烁次数会减少。
- 向持久性数据库添加或更新设置。
- 应用数据库中保留的设置。
- 使用最佳模式逻辑应用最佳显示设置。
- 使用最佳拓扑逻辑为连接的显示器应用最佳拓扑。
- 启动或停止强制输出。
- 允许 OEM 热键使用操作系统持久性数据库。
CCD API 无法处理以下任务:
- 替换硬件供应商此前为控制 Windows 7 之前的桌面显示设置而提供的 API 集和私有驱动程序指令。
- 将专用数据传递到 KMD。
- 提供一组监视器控制 API。
- 查询监视功能,其中包括 EDID、DDCCI 等。
- 提供上下文标识符以唯一标识 CCD API 从持久性数据库中检索的设置。
尽管 CCD API 允许调用方获取和设置显示器,但它不提供任何功能来枚举给定路径中可能的源模式。 在 Windows 7 之前存在的 API 已提供此功能。
强制的目标与连接的目标
CCD API 引入了连接的监视器和可强制目标的概念。 如果 GPU 可以检测到监视器的存在,那么监视器已连接到目标,这是一种监视器和目标之间的物理属性。 如果 GPU 可以向目标发送显示信号,即使 GPU 无法检测到连接的监视器,目标也是可强制的。 所有模拟目标类型都被视为可强制,而所有数字目标都不被视为可强制。 下表描述了路径在活动状态和非活动状态下的已连接状态与强制状态的组合。
| 路径活动状态 | 路径强制状态 | 监控连接状态 | 结果 |
|---|---|---|---|
| 活跃 | 强迫 | 已连接 | 由于监视器已连接且处于活动状态,因此启用了目标输出。 |
| 活跃 | 强迫 | 未连接 | 启用了目标输出,因为路径正在被强制并且处于活动状态。 |
| 活跃 | 未强制 | 已连接 | 由于监视器已连接且处于活动状态,因此启用了目标输出。 |
| 活跃 | 未强制 | 未连接 | 无法设置路径,因为它未强制且监视器未连接。 |
| 未处于活动状态 | 强迫 | 已连接 | 可以启用目标输出,因为它已被强制启用,并且监视器已连接。 |
| 未处于活动状态 | 强迫 | 未连接 | 可以启用目标输出,因为其被强制启用。 |
| 未处于活动状态 | 未强制 | 已连接 | 可以启用目标输出,因为监视器已连接。 |
| 未处于活动状态 | 未强制 | 未连接 | 无法启用目标输出,因为显示器未连接且路径未被强制使用。 |
下表描述了每个路径的几种可能的强制状态。
| 强制状态 | 含义 |
|---|---|
| 普通力 | 在电源转换、重新启动或关闭强制状态后,此强制状态将丢失。 |
| 路径持久性 | 重新启动后,此强制状态将丢失。 即使路径中的监视器是 ChangeDisplaySettingsEx 调用的目标,Microsoft Win32 ChangeDisplaySettingsEx 函数也始终会销毁所有路径持久监视器。 如果调用方在 Flags 参数中设置 SDC_USE_SUPPLIED_DISPLAY_CONFIG 或 SDC_TOPOLOGY_SUPPLIED 标志,调用 SetDisplayConfig CCD 函数时,若新拓扑不包括监视器所在的路径,则 SetDisplayConfig 将删除该路径中保留的监视器。 对于调用方在 Flags 参数中指定的所有其他SDC_TOPOLOGY_XXX标志, SetDisplayConfig 将删除路径持久化监视器,除非调用方还指定SDC_PATH_PERSIST_IF_REQUIRED标志,并且路径在新拓扑中处于活动状态。 |
| 启动持久性 | 该强制状态仅在设备关闭时才会丢失。 此状态在系统重新启动时持续存在。 |