为什么显示控制面板指针截断错误长期未被修复?
摘要
本文解释了显示控制面板中与指针截断相关的错误为何长期存在,尽管供应商已经修复,但受限于计算机制造商的驱动程序认证流程,用户只能使用过时的认证驱动程序。
<p>上次,我们<a title="推测有缺陷的控制面板扩展如何截断一个就在它面前的值" href="https://devblogs.microsoft.com/oldnewthing/20260716-00/?p=112539">推测了有缺陷的控制面板扩展如何截断一个就在它面前的值</a>。当我们将分析结果发送给供应商时,他们回复道:“你能检查一下这些崩溃案例中的驱动程序版本号吗?”</p>
<p>当我们检查所有崩溃系统上的驱动程序版本号时,它们大约是“build 314”,而当前驱动程序构建号大约是“build 2718”。这些用户使用的驱动程序非常老旧!供应商早在很久以前就修复了那个错误,但用户并未获得修复。这是怎么回事?</p>
<p>我的猜测是,这些用户关闭了 Windows 更新,或者以其他方式拒绝升级他们的显卡驱动程序。但我发现我的猜测可能错了。</p>
<p>关键在于,这些都是<i>显卡</i>驱动程序,而这类驱动程序受计算机制造商的高度控制。制造商在对其特定硬件配置进行自己的验收测试后,会认证这些驱动程序用于其 PC。(而这些硬件配置很可能连显卡供应商自己都不知道。)</p>
<p>这种责任在售后仍然存在。计算机制造商仍然负责认证驱动程序更新,通常是通过在实验室中维护的参考 PC 上进行测试。有时,制造商会获得定制版本的显卡(亲爱的,这样你的产品就能更好地与众不同了),这就是为什么显卡供应商的“驱动程序下载”网站通常会警告你在安装驱动程序前先咨询计算机制造商。</p>
<p>在实践中,计算机制造商通常认真认证驱动程序一年、一年半,最多两年¹。之后,他们很可能会放弃该型号,不再为其认证驱动程序。所有使用该型号 PC 的用户只能使用制造商停止认证驱动程序时最新的驱动程序。</p>
<p>微软为许多类别的硬件维护通用驱动程序,但有意<a title="为什么所有 Windows 驱动程序都标注为 2006 年 6 月 21 日?你们从不更新驱动程序吗?" href="https://devblogs.microsoft.com/oldnewthing/20170208-00/?p=95395">将其优先级设置得较低</a>,以便 PC 制造商提供的驱动程序优先。直接从显卡制造商那里获得的视频驱动程序也会被<a title="你以为 2006 年的 Windows 驱动程序很老?来看看 1968 年的英特尔驱动程序!" href="https://devblogs.microsoft.com/oldnewthing/20211221-00/?p=106046">显卡供应商降低优先级</a>。计算机制造商认证的驱动程序优先,即使该认证已经严重过时。</p>
<p>¹ 如果认证驱动程序的时间长度与计算机保修期有关,我也不会感到惊讶。</p>
<p>本文最早出现在 <a href="https://devblogs.microsoft.com/oldnewthing">The Old New Thing</a> 上,原文标题为 <a href="https://devblogs.microsoft.com/oldnewthing/20260717-00/?p=112541">Why has the display control panel pointer truncation bug gone unfixed for so long?</a></p>
查看缓存全文
缓存时间: 2026/07/20 09:45
# 为什么显示控制面板指针截断漏洞这么久都没修复? - The Old New Thing
来源:https://devblogs.microsoft.com/oldnewthing/20260717-00?p=112541
上次,我们[推测](https://devblogs.microsoft.com/oldnewthing/20260716-00/?p=112539)了那个有问题的控制面板扩展是如何截断一个明明就在它眼前的值的。当我们将分析结果发给厂商时,他们回复说:“你能查一下这些崩溃事件中的驱动版本号吗?”
我们查了所有崩溃系统上的驱动版本号,发现它们大概是“build 314”,而当前驱动版本号却是“build 2718”这类数字。这些用户运行的驱动简直老掉牙了!厂商很久以前就修复了这个漏洞,但用户却没有收到修复补丁。这是怎么回事?
我的推测是,这些用户关闭了 Windows Update,或者拒绝升级显卡驱动。但后来我意识到,我的推测很可能错了。
关键在于,这些是*显卡*驱动,而计算机厂商对这类驱动有很大的控制权。厂商在自己特定的硬件配置上完成验收测试后,会认证这些驱动供其 PC 使用。(这些硬件配置很可能连显卡厂商自己都不知道。)
这种责任在售后阶段也会延续。计算机厂商仍然负责认证驱动更新,大概是通过在实验室中专用的参考 PC 上进行测试。有时,厂商会拿到定制版的显卡(亲爱的,这样更能凸显产品差异化),这就是为什么显卡厂商的“驱动下载”网站通常会提醒你在安装驱动前,先咨询你的计算机厂商。
实际上,计算机厂商通常会在一年、一年半、最多两年内勤恳地认证驱动¹。之后,他们很可能会放弃该型号,不再费心为其认证驱动。所有使用该型号 PC 的用户只能被困在厂商停止认证驱动时的那个版本上。
微软为许多硬件类别维护着通用驱动,但[刻意将其优先级设低](https://devblogs.microsoft.com/oldnewthing/20170208-00/?p=95395),以便让 PC 厂商提供的驱动优先使用。而从显卡厂商直接获取的驱动,[同样会被显卡厂商降低优先级](https://devblogs.microsoft.com/oldnewthing/20211221-00/?p=106046)。最终,计算机厂商认证的驱动会排在前面,即使这些认证已经严重过时。
¹ 我毫不怀疑,他们认证驱动的时间长度,与计算机保修期的长度之间存在着某种关联。
### 分类
### 主题
## 作者
Raymond Chen
Raymond 参与 Windows 的演进已有 30 多年。2003 年,他创办了一个名为 The Old New Thing 的网站,其受欢迎程度远超他最疯狂的想象,这一发展至今仍让他感到毛骨悚然。该网站还衍生出一本书,巧合的是书名也叫 *The Old New Thing*(Addison Wesley 2007)。他偶尔会出现在 Windows Dev Docs 的 Twitter 账号上,讲一些其实没什么有用信息的故事。
相似文章
关闭显示控制面板时无效函数指针的案例
这篇来自 The Old New Thing 的文章调查了 Windows 显示控制面板中一个常见的崩溃问题,该问题是由一个被截断为 32 位并进行符号扩展的无效函数指针引起的。作者通过分析崩溃转储来找出根本原因。
推测故障控制面板扩展如何截断了它面前的值
Raymond Chen 推测故障控制面板扩展如何因将64位指针截断为32位而导致崩溃,可能是由于64位移植过程中代码更新不完整。
Chromium 时隔4年发布已修复的漏洞,实则并未修复
Chromium 中一个被认为4年前已修复的安全漏洞,被发现实际上仍未修复,凸显了浏览器安全修补过程中的重大疏忽。
这恰恰表明没人再关心调试奇偶标志了
Windows调试引擎(x86-64)中的一个错误错误地报告了奇偶标志,二十多年来未被发现,凸显出该标志极少被调试。
别劫持我的鼠标指针
作者批评了用自定义动画效果替换标准网页光标的趋势,认为这些装饰严重损害了可用性。作者呼吁开发者优先考虑实用的用户体验(UX),而不是现代 AI 辅助编码工具所催生的炫目视觉效果。