我想,在 Windows XP 系统上,造成蓝屏的最主要原因是带有 Bug 的设备驱动程序。
请问在座的,谁赞成,谁反对。
因为驱动运行在内核模式,再也没有更高级别的组件对其进行行为监管,它可以做它想做的任何事情。
如果一个用户模式程序出了问题,比如代码有内存访问越界的问题,这个时候,问题不大,越界问题只存在于它自己的私有虚拟内存上,不会对其他进程有任何影响。操作系统会直接强制结束它,但其他程序和操作系统本身将继续正常运行。
换句话说,如果一个运行在内核模式的驱动程序出现了 Bug,则它将会导致整个操作系统级别崩溃,最终,就如你所看到的:系统蓝屏死机。
为了确认拥有高质量驱动程序的重要性,Windows XP 会在安装未经认证的驱动程序时向用户发出警告。这就引出了今天的话题,一个来自设备驱动程序作者的问题。
下面是他的问题:
“当我的用户尝试安装我编写的驱动时,他会收到一个确认对话框,该对话框告诉用户这是一个未签名的驱动程序。是否可以创作绕过这个对话框,直接安装驱动到系统呢?”
这个对话框的全部目的是就是为了防止你所期望的事情发生。如果不需要警告对话框,请提交驱动程序进行认证。(出于测试目的,你可以使用测试根证书对驱动程序进行签名,并在运行安装程序之前安装测试根证书。当然,安装测试根证书也会导致桌面显示”仅用于测试目的”,以提醒你计算机现在允许安装测试签名的驱动程序。)
当然,驱动程序开发者可能会觉得这个认证过程很麻烦,并且会尽其所能避免它。因为,当然了,如果你提交驱动程序进行认证,它可能会失败!有些驱动作者会动些歪心思,欺骗 WHQL 团队认证与他打算使用的驱动程序所不同的驱动程序。
我最喜欢的一种”特技操作”与我的一位同事有关,他正在安装显卡驱动程序,安装程序会显示了一个对话框,大致上写着:”单击”确定后,在我们准备系统时不要触摸键盘或鼠标”。在他单击”确定”后,安装程序将继续以编程方式在整个屏幕上移动鼠标,打开”显示”控制面板,单击”高级”按钮,单击其他各种配置对话框,一连串的活动似乎持续了半分钟。当面对这样做的安装程序时,你的自然反应是尖叫:”啊,还有这种操作!”
总结
驱动程序认证后才能成功安装到系统,这个我是支持的。
现在我的 Win 10 上出现蓝屏的频率越来越低了,对用户来说,这就是用户体验的提升。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《When people ask for security holes as features: Silent install of uncertified drivers》