首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

轶事一则:码农何必为难码农

有这么一个事儿

在Windows95的DirectX视频驱动程序接口暴露出一种公开方法,每个驱动程序都必须实现它,它被称为”DoesDriverSupport(REFGUID guidCapability)”,我们会传递一个指示功能的GUID给这个方法,然后接口方法会返回一个值,指示该驱动是否支持该功能。

我们定义了各种功能的GUID,例如GUID_CanStretchAlpha,它主要用来询问驱动程序是否能够通过Alpha通道来扩展位图。

有一次,我们调用DoesDriverSupport(GUID_XYZ)时,有一个驱动程序返回了TRUE,但是当DirectDraw尝试使用该功能时,它以一种非常引人注目的方式失败了。

因此,这名DirectDraw开发人员致电该驱动程序开发商,并问他们:”你们的视频开也可以支持XYZ吗?”

他们的回答是:”什么是XYZ?”

事实证明,他们的驱动程序对DidDriverSupport的实现是这样的:

换句话说,每当DirectX询问驱动程序:”你支持这个功能吗?” 他们回答说:”当然,我们是支持的。”

而驱动程序甚至没有检查要支持的功能是什么。

(我想,驱动程序大抵是由销售部门编写的吧。没有任何冒犯之意)

因此,DirectDraw的开发人员改变了他们查询驱动程序功能的方式。其中一名开发人员走进老板的办公室,拿了一张网卡,提取了MAC地址,然后用锤子砸碎了这张网卡。

你会看到,这最后一步很重要:GUID生成算法基于时间和空间的组合。当你要求CoCreateGuid创建一个新的GUID时,它将在GUID的第一部分中编码你的请求时间,并唯一标识你的计算机的信息(网卡的MAC地址,适用于该标准的网卡必须是唯一的网卡)。

通过用锤子砸碎网卡,他阻止了该网卡被用来生成GUID。

接下来,他在DirectDraw中添加了代码,以便在启动时,它会基于该网卡(由于其被销毁而无法有效创建)制造一个随机GUID,并将其传递给DidDriverSupport。如果驾驶员说:”当然,我们支持这个功能”,DirectDraw会说:”啊!终于抓到你了!从现在开始,我不会相信你所说的话。”

总结

所以,大家看懂这个故事了吗?

接口定义了组件需要实现功能,但是组件可没有义务一定实现接口描述的规范,我还是希望:大部分组件开发者还是老老实实按规矩办事儿吧,码农何必为难码农,对不对?

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

本文来自:《Sure, we do that》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201206A03RGM00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券