Windows 机密祸福参半

Raymond Chen

插入 CD 或 DVD 时 ,外壳将“探查”磁盘以确定磁盘上驻留着什么类型的内容。接着,此确定将引导外壳就其应该执行哪种自动播放操作做出决定。关于探查的执行情况的准确的详细信息并没有被记录,这是因为它们是试探性方法,如果在将来找到了更好的算法,则可以更改。

正式记录算法将使其成为合同,从而阻止在随后的发布中对算法进行调整。因此,正式的做法是,将算法的详细信息保留为未指定状态。

如果您从未为 SDK 编写过文档,您可能就不曾意识到文档会产生合同。一旦您依据的是以某种方式行为的记录,就无法改变它。如果您改变它,依赖这种行为的人就会说,“嗨,文档上没这么说。游戏已经开始了,您竟然要更改规则。”

由于那个不显眼的警告,下面将以快速且惊人地过度简化的方式来介绍如何使用 Windows® XP Service Pack 2 (SP2) 分类缺少 autorun.inf 文件的数据 CD 和数据 DVD 的内容。(将来的服务包和将来的 Windows 版本可能有不同的行为。)我说“惊人地过度简化”是因为实际的算法是一个 61 步决策表,它考虑了各种信息(如前台应用程序是否响应过“Query cancel autoplay”(查询取消自动播放)通知,全屏程序是否正在运行,甚至还有计算机是不是最近插接或移除的便携式计算机)。但是我只想了解内容探查步骤。

  

首先,外壳将检查用户是否已将“Take no action”(不采取任何措施)指定为适用于所有内容类型的操作。如果已指定,则探查将毫无意义。决策只是“Take no action”(不采取任何措施)。

如果未指定,则外壳将做一些工作。它将查看磁盘上的每个文件(多达 4 个目录深)并根据所察觉的类型将这些文件放入以下的类别之一:图像、音乐、电影。

不适用于这些类别中任何一个的文件将被忽略。如果检查过的所有文件只表示了一个类别(比方说,例如,磁盘上的所有文件都是音乐文件),那么就以该类别来建立磁盘类型。如果表示了三个类别中的多个,那么磁盘就被认定为混合内容。

这意味着,您的装满音乐文件的 CD 上的唱片集画面会导致 CD 被 Windows XP SP2 作为混合内容处理。这是可能经受某种调整的那些内容之一。但是假设此算法经过了调整,而且我们确定,在装满 MP3 的 CD 上偶尔有一幅图片不会将天平倾向混合内容。一些公司的 CD 上可能有大量的音频文件和少数图片。这家公司(的确)依赖的就是检测为混合内容的 CD。但是当算法发生变化后,CD 会被误分类为音乐。现在那家公司很烦恼。但是这个问题该怪谁呢?可以怪公司依赖探查算法的详细信息吗?或者怪 Windows,因为它要为更改算法负责?

您瞧,在 Windows Vista™ 中,算法已经做出了更改(尽管只是略有更改)。在 Windows Vista 中,为了缩短某些著名的磁盘布局的算法,会预先进行若干检查。例如,如果磁盘的根目录中存在一个 DCIM 文件夹,那么就假定该文件夹由数字图片组成。现在我们将拭目以待,看看是否有人注意到这些。

Raymond Chen 的网站 The Old New Thing(英文)和他的与网站同名的书 (Addison-Wesley, 2007) 介绍的是 Windows 历史和 Win32 编程。Raymond 想了解这个世界。

© 2008 Microsoft Corporation 与 CMP Media, LLC.保留所有权利;不得对全文或部分内容进行复制.