● 2026.07.10 · 全球 AI 产业资讯 登录 投稿 订阅早报 →
开发者工具

【MICROSOFT】Windows 类额外字节滥用兼容说明

微软回顾了 Windows 早期对窗口类(class)额外字节字段被滥用以存储指针的历史,指出为了兼容 16 位程序,系统仍允许修改某些旧字段,但在 32/64 位中已封堵该漏洞。文章强调开发者常把可隐藏指针的地方当作私有存储位,并解释了为何某些兼容开放被保留或关闭。

【MICROSOFT】Windows 类额外字节滥用兼容说明

微软回顾了 Windows 早期对窗口类(class)额外字节字段被滥用以存储指针的历史,指出为了兼容 16 位程序,系统仍允许修改某些旧字段,但在 32/64 位中已封堵该漏洞。文章强调开发者常把可隐藏指针的地方当作私有存储位,并解释了为何某些兼容开放被保留或关闭。

背景

  • Windows 的窗口类(class)结构允许指定“额外字节”(extra bytes),最初用于存放小整数或近指针。
  • 随着指针大小演进,ID 字段扩展为指针大小以适应存放指针的习惯。

历史兼容问题

  • 在 16 位 Windows 的 SetClassWord 中,存在一个兼容备注:某个应用依赖能修改 GWW_CBCLSEXTRA 的值。
  • 修改该值并不会改变类分配的内存大小(注册时已确定),但程序把它当作私有存储位来使用。
  • 因兼容性,Windows 允许 16 位程序修改该字段,但在 32 位和 64 位环境下该修改已被阻止。

教训与建议

  • 任何能“藏指针”的位置都会被滥用——这是长期观察到的现象。
  • 不要把未指定为存储指针的系统字段当作私有数据槽;应使用受支持的 API(如窗口/类专用的用户数据接口)来保存应用状态。
  • 随着平台演进,依赖未文档或边缘行为的做法可能被封堵或导致兼容性问题。

结论

  • 微软在维护兼容性与修补滥用之间保持平衡:关掉明显危险的漏洞(32/64 位),但保留对早期程序的部分兼容性。
  • 开发者应遵循文档化的方法来存储与管理指针和私有数据,避免依赖历史实现细节。

历史兼容性虽必要,但不要把系统结构当作私有数据存储位。

原文链接

不错过任何一条 AI 大事

订阅 AIFlux 早报,每天 3 分钟看懂产业动态。

相关阅读