当前位置: 首页 > news >正文

windows显示驱动开发-IddCx 对象

IddCx (间接显示驱动程序类 eXtension) 框架使用可扩展的 UMDF 对象模型来表示间接显示设备的各个组件。 UMDF 对象模型允许将驱动程序特定的存储与每个 IddCx(因此与 UMDF)对象相关联。 有关详细信息,请参阅 UMDF 对象模型。

创建 IDD 对象的顺序为:

驱动程序首先创建 IDDCX_ADAPTER 对象。
然后,驱动程序将创建 一个IDDCX_MONITOR 对象。
创建 IDDCX_ADAPTER 和 IDDCX_MONITOR 对象后,OS 将创建 IDDCX_SWAPCHAIN 并 IDDCX_OPMCTX 对象并将其发送到驱动程序。
以下部分提供了有关这些对象的更多详细信息。

IDDCX_ADAPTER

此对象表示驱动程序在两个阶段过程中创建的单个逻辑显示适配器:

驱动程序调用 IddCxAdapterInitAsync 回调函数。
OS 调用驱动程序的 EvtIddCxAdapterInitFinished DDI 来完成初始化。
IDD 模型没有显式销毁适配器回调。 适配器初始化序列成功完成后,该适配器将保持有效,直到初始化时所连接的 UMDF 设备停止工作。 当间接显示驱动程序(IDD)创建适配器时,它提供有关间接显示适配器的静态适配器信息。

处理多功能设备

最简单的情况是,由附加间接显示设备的即插即用子系统创建的 UMDF 设备对象与 IDD 创建的 IDDCX_ADAPTER 对象之间存在一对一映射。

可能存在更复杂的情况,其中单个间接显示适配器包含多个即插即用设备。 例如,间接显示解决方案可能具有多个 PnP 设备功能,例如麦克风(音频驱动程序)和相机(视频驱动程序)。 在这种情况下,IDD 负责为每个 PnP 设备创建的多个 UMDF 设备对象创建单个 IDDCX_ADAPTER 对象。 驱动程序需要在此方案中考虑以下几点:

仅当成功启动构成间接显示解决方案的所有 PnP 设备后,才应创建 IDDCX_ADAPTER 。
驱动程序在创建适配器时必须传递单个 WDFDEVICE ,因此需要逻辑来决定要传递的 UMDF 设备。
如果构成间接显示适配器的任何设备都存在硬件错误,驱动程序应报告构成适配器的所有设备是否出错。

IDDCX_MONITOR

此对象表示连接到间接显示适配器上某个连接器的特定监视器。

驱动程序在两个阶段过程中创建监视器对象:

它首先调用 IddCxMonitorCreate 回调来创建 IDDCX_MONITOR 对象。
然后,它会调用 IddCxMonitorArrival 回调函数以完成监视器到达。
当监视器断开连接时,驱动程序将调用 IddCxMonitorDeparture 回调来报告此情况。 此调用会导致 IDDCX_MONITOR 对象被销毁。 即使同一监视器被拔出然后重新连接,也需要再次调用 IddCxMonitorDeparture/IddCxMonitorArrival 序列。

IDDCX_MONITOR是IDDCX_ADAPTER对象的子级。

IDDCX_SWAPCHAIN

此对象表示一个 交换链,该交换链 提供在连接的监视器上显示的桌面图像。 交换链具有多个缓冲区,允许OS在IDD访问另一个缓冲区时在一个缓冲区中生成下一个桌面图像。 IDDCX_SWAPCHAIN是IDDCX_MONITOR的子级,因此随时只有一个分配给给定监视器的交换链。

OS 创建并销毁 IDDCX_SWAPCHAIN 对象,并通过调用 EvtIddCxMonitorAssignSwapChain 和 EvtIddCxMonitorUnassignSwapChain 将这些对象分配/取消分配给显示器。

IDDCX_OPMCTX

此对象表示单个应用程序 OPM 上下文中的活动 输出保护管理器 (OPM)上下文,应用程序可用于控制单个监视器上的输出保护。 多个 OPM 上下文可以同时在给定的监视器上处于活动状态。 操作系统调用驱动程序的 EvtIddCxMonitorOPMCreateProtectedOutput 和 EvtIddCxMonitorOPMDestroyProtectedOutput DDI 调用来创建和销毁 OPM 上下文。

http://www.dtcms.com/a/427088.html

相关文章:

  • 图书馆网站建设的作用广州新建站
  • (27)APS.NET Core8.0 堆栈原理通俗理解
  • SVN 一些命令疑问
  • 精读 C++20 设计模式:行为型设计模式 — 状态机模式
  • 多周期路径约束
  • Webpack配置之path.join、path.resolve和__dirname详解
  • vue打包优化方案都有哪些?
  • Golang 中的字符串:常见错误和最佳实践
  • 花生壳建设网站怎样做网络营销推广
  • 【Rust GUI开发入门】编写一个本地音乐播放器(8. 从文件中提取歌曲元信息)
  • 国内个人网站建设贾汪城乡建设局网站
  • CentOS二进制安装包方式部署K8S集群之系统初始化
  • Spring Boot 缓存集成实践
  • 力扣Hot100--21.合并两个有序链表
  • 网络安全和NLP、CV是并行的应用吗?
  • 如何做好一个企业网站专门做图片的网站
  • 网页设计网站wordpress公告栏插件
  • C++ 位运算 高频面试考点 力扣 371. 两整数之和 题解 每日一题
  • 网络安全常见敏感目录字典
  • React学习(三)--- 组件化开发编写css
  • 设计模式(C++)详解——观察者模式(Observer)(1)
  • 网站建设报表明细新手做网站看什么书
  • 微课网站开发如何查看网站域名
  • Spring工程 生成表和mapper文件
  • 服装培训网站建设网站图片切换
  • Python爬虫实战:获取丁香人才网招聘信息与数据分析
  • 光学转镜最小长度计算模型:基于视场角与有效口径的匹配算法
  • 汉子由来 外国人做的网站网页设计的尺寸是指
  • 智能驱动与合规双赢:2025年企业DevOps平台选型深度解析
  • 2025年,如何选择Python Web框架:Django, Flask还是FastAPI?