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

window显示驱动开发—监视筛选器驱动程序(三)

Microsoft 提供了一个通用的监视器类函数驱动程序,它可以处理大多数与监视器相关的任务。 除非供应商想提供超出监视器类函数驱动程序所能提供的服务,否则没有必要使用供应商提供的监视器驱动程序。 如果监视器供应商选择提供筛选器驱动程序,则该驱动程序由筛选器设备对象(筛选器 DO)来表示,该对象位于监视器设备堆栈中功能设备对象 (FDO) 的上方。 筛选器驱动程序也由监控器供应商提供,它可以处理来自用户模式应用程序的请求。 筛选器驱动程序与用户模式应用程序之间的接口是专用的,只有监控器供应商知道。 监视器设备堆栈不会通过显示数据通道命令接口 (DDC/CI) 来对显示器进行编程控制,因此计数器供应商不应编写用于此目的的筛选器驱动程序。

核心概念解析
1. 微软的监视器类函数驱动程序 (Monitor Class Function Driver)

  • 角色:这是操作系统内置的通用驱动程序。它的主要职责是通过显示数据通道 (DDC) 从监视器的扩展显示识别数据 (EDID) 中读取信息,例如制造商、型号、支持的分辨率和时序等。
  • 功能:它将这些信息提供给显示端口驱动程序和图形用户界面(如“显示设置”),以便系统能够正确识别和配置显示器。对于绝大多数标准显示器,这个驱动程序已经完全足够。

2. 供应商提供的监视器筛选器驱动程序 (Vendor-Supplied Monitor Filter Driver)
目的:正如您所说,只有当供应商需要提供超出标准功能的增值服务时,才需要开发这种驱动程序。常见的增值功能包括:

  • 专有的颜色校准和色彩管理。
  • 自定义的显示模式或情景模式(如游戏、阅读、电影)。
  • 控制显示器上的物理按钮或LED指示灯。
  • 集成到供应商特定的系统管理工具中。

架构位置:您准确地指出了它在设备堆栈中的位置——附加在功能设备对象 (FDO) 之上,形成一个筛选器设备对象 (Filter DO)。这意味着所有发往监视器的I/O请求包 (IRP) 都会先经过这个筛选器驱动程序,它可以选择处理、修改或忽略这些请求后再传递给下方的微软标准驱动程序。

3. 与用户模式应用程序的通信

  • 专用接口:筛选器驱动程序通过设备接口 (Device Interface) 或I/O控制代码 (IOCTL) 与供应商提供的用户模式应用程序(如控制中心或配置工具)进行通信。这个接口是私有且未公开的,只有该供应商的应用程序知道如何与之交互。应用程序通过调用 CreateFile 打开设备句柄,然后使用 DeviceIoControl 发送自定义的IOCTL命令来驱动特定的功能。

4. 关于DDC/CI的重要说明
您提到的这一点至关重要,它澄清了一个常见的误解:

  • DDC/CI (Display Data Channel Command Interface):这是一个由VESA标准化的协议,允许主机通过显示电缆(如VGA、DVI、HDMI、DisplayPort)的DDC线路向显示器发送命令(如调整亮度、对比度)。
  • 堆栈分工:在Windows驱动架构中,直接发送DDC/CI命令的任务是由显示端口驱动程序(即显卡驱动程序)完成的,而不是监视器设备堆栈。
  • 正确做法:因此,如果供应商只是想通过DDC/CI实现基本的显示器控制(如亮度调节),他们不应该为此编写一个监视器筛选器驱动程序。相反,他们应该与显卡厂商(如NVIDIA、AMD、Intel)合作,确保其显卡驱动能通过DDC/CI正确控制他们的显示器。或者,他们可以在用户模式应用程序中直接调用支持DDC/CI的API(如Windows上的 PhysicalMonitorFromPoint 和 GetMonitorCapabilities 等函数,这些函数最终会由显卡驱动执行)。

总结与工作流程

  1. 即插即用:当一台新显示器接入时,Windows会尝试为其安装驱动程序。
  2. 首选通用驱动:系统首先会使用内置的监视器类函数驱动程序。这会创建一个FDO,并成功读取EDID信息。
  3. 查找特定驱动:如果显示器提供了特定的硬件ID(在EDID中),系统会在本地和Windows Update中搜索是否有为其签名的筛选器驱动程序。
  4. 加载筛选器:如果找到,系统会加载这个供应商提供的筛选器驱动程序,并在FDO之上创建Filter DO。
  5. 应用程序交互:用户运行供应商提供的控制软件(如Dell Display Manager、LG OnScreen Control)。该软件通过私有接口与筛选器驱动程序通信。
  6. 执行命令:筛选器驱动程序收到来自应用程序的指令后,它可能会:
  • 通过私有方式与显卡驱动交互(如果需要涉及图形流水线)。
  • 处理一些本地逻辑。
  • 但请注意:它通常不直接处理DDC/CI流量,那是显卡驱动的职责。

 


文章转载自:

http://6YTp7C8H.qpzjh.cn
http://2eWrNX8n.qpzjh.cn
http://UP7vs8yc.qpzjh.cn
http://9TaDeLPj.qpzjh.cn
http://e7CpZQW4.qpzjh.cn
http://Bajk8kXI.qpzjh.cn
http://Ljs6Xxqs.qpzjh.cn
http://7qcE0mU4.qpzjh.cn
http://7qo7CwYN.qpzjh.cn
http://WqEz216j.qpzjh.cn
http://HCnBvFmL.qpzjh.cn
http://eGnPQjcF.qpzjh.cn
http://EAULIYxQ.qpzjh.cn
http://Gh8BCgWi.qpzjh.cn
http://IQ48hfpF.qpzjh.cn
http://eUI36EBh.qpzjh.cn
http://IMfPClyk.qpzjh.cn
http://8fNCO1YE.qpzjh.cn
http://eePyTTt2.qpzjh.cn
http://O0nl30cR.qpzjh.cn
http://5hK1uscp.qpzjh.cn
http://KriDaWSo.qpzjh.cn
http://0OHxLU3f.qpzjh.cn
http://qGfjenWj.qpzjh.cn
http://tD1lO6s0.qpzjh.cn
http://gkLMhC8M.qpzjh.cn
http://mHzQ30Nu.qpzjh.cn
http://MiQGXJKq.qpzjh.cn
http://Nz0Y4EXp.qpzjh.cn
http://fEc50sbc.qpzjh.cn
http://www.dtcms.com/a/373089.html

相关文章:

  • 计算机网络:数据链路层--数据链路层基本功能
  • 第二课、熟悉Cocos Creator 编辑器界面
  • [Wit]CnOCR模型训练全流程简化记录(包括排除BUG)
  • JavaEE 进阶第四期:开启前端入门之旅(四)
  • TFS-2004《Input Selection for Nonlinear Regression Models》
  • esp下载器使用流程
  • 3dtiles 加载问题
  • 3D地球可视化教程 - 第1篇:基础地球渲染系统
  • 单片机开发
  • LLMs之REFRAG:《REFRAG: Rethinking RAG based Decoding》的翻译与解读
  • MATLAB的数值计算(二)线性方程求解
  • Java基础(十一):关键字final详解
  • Java全栈开发面试实录:从基础到微服务的实战经验分享
  • Matlab机器人工具箱使用1 简单的描述类函数
  • 自动捕鱼器设计cad+设计说明书+三维图
  • 深入理解 MyBatis-Plus 的 `ServiceImpl`
  • 软件可靠性定量核心指标与关系深入解析
  • Android音频学习(十七)——音频数据流转
  • 如何一次性将多个PPT幻灯片批量转换成PDF文档
  • Vue响应式底层原理:深入解析依赖追踪机制
  • 抖音批量上传视频怎么弄?抖音矩阵账号管理的专业指南
  • 数学知识--行向量与矩阵相乘,和矩阵与行向量相乘的区别
  • 【硬件-笔试面试题-70】硬件/电子工程师,笔试面试题(知识点:过压保护电路)
  • PostgreSQL打印实时查询语句(监控PostgreSQL监控)(未成功)
  • “代练护航”小程序API源码搭建:高并发接单系统的技术突破与实战,多端适配与跨平台开发 如何覆盖微信、H5、APP全场景?
  • 从航空FACE的一个落地方案漫谈汽车HPC软件架构的思维转变(1/3)FACE基础概念与落地案例
  • Docker多共享网络配置策略(Docker多网络、Docker networks、Docker Compose网络、Docker网络、Docker共享网络)
  • Terraform 从入门到实战:历史、原理、功能与阿里云/Azure 上手指南
  • 阿里云国际代理:稳定、高效、便捷的数据库服务-云数据库RDS
  • Django中的软删除