Share via


Windows 機密文件提醒我別再重蹈覆轍

Raymond Chen

有一個舊工具 是用於 Windows® 95 系列的作業系統,稱為「自動略過驅動程式」(Automatic Skip Driver)。您對這個工具的第一個反應可能是來自它可笑的名稱,甚至還可能懷疑 ASD 這幾個字一開始是代表別的意思。您猜的一點也沒錯。

由於當時市面上的系統大多是在隨插即用規格推出之前就存在了,因此 Windows 95 必須處理很多非隨插即用裝置。在缺乏可靠的隨插即用裝置的情況下,進行硬體偵測非常吃力不討好。

舉例來說,若要進行數據機偵測,就必須發出許多數據機登錄的值查詢。雖然已經建置了堪稱完備的基本數據機命令集,但是在命令語言的灰色地帶仍然存在重大的實作差異。不用多說,這種不一致的情況會造成通訊程式的困擾,因為必須考量到各種數據機模型的特殊個案,以便應付其個別差異;然而,這種不一致性反而為 Windows 帶來出乎意外的好處:由於每種數據機的行為都稍有不同,Windows 可以研究這些灰色地帶,並根據已知數據機與其回應的表格來對照數據機的行為。

  

Windows 95 小組裡面有個人專門負責安裝世人所知的所有數據機,執行一個小程式來按部就班準備好數據機,探索灰色地帶,然後收集每一次的結果以便建立最詳盡的數據機資料庫。若您仍有機會使用執行 Windows 95 的電腦,不妨到 Windows\Inf 目錄查看一下所有檔名以 MDM 開頭的檔案。裡面數據機特定的裝置資訊檔案就超過了 1 MB。這代表著將數年的人生光陰濃縮成 1 MB 無法人為辨讀的十六進位數字。

偵測數據機蠻單純的,因為幾乎所有數據機的整體行為都高度雷同;驚喜全都藏在細節中。相較之下,使用 I/O 連接埠的裝置可怕得多。譬如說,若要偵測是否已安裝特定視訊卡,Windows 95 設定管理員的視訊卡偵測模組需要將精挑細選的值傳送到特定 I/O 連接埠,然後接聽來自裝置的任何回應。如果裝置的回應方式正確,系統便會假設已找到所需的項目。否則,系統會接著執行下一個視訊卡模組。

不用說,如果安裝在該 I/O 連接埠上的裝置並非設定管理員所要測試的視訊卡,那麼這個裝置可能會因為一直收到毫無關係的值而心煩意亂。根據裝置的任性程度而定,裝置可能會停止回應或重新啟動電腦。這對設定管理員來說不是什麼好兆頭。ASD 這個模組於是應運而生。

執行這些可能釀成災難的硬體探測之前,設定管理員會先建立一個檔案,基本上它代表:「糟了!我馬上就要做出危險的 X 舉動!」就像動作片的英雄與壞蛋決一死戰之前,總會留給女友一封「萬一我死了再拆」的信,只不過變成電腦版本。

事實上,萬一危險的 X 真的造成電腦停止回應、當機或重新啟動,那麼下一次系統啟動時,它會看到這個神奇的檔案,「打開信封」並恍然大悟原來是危險的 X 造成電腦當機。接著,系統會歸納出嘗試偵測裝置 X 會造成災難的結論,並明白再也不要重蹈覆轍。

執行這項工作的模組名為 ASD。而 ASD 這 3 個字母代表「以身試險 (Attempting Something Dangerous)」。

Raymond Chen的網站 The Old New Thing 以及同名著作 (Addison-Wesley,2007 年) 均探討 Windows 的歷史和 Win32 程式設計。他在處理這些敏感主題時特別小心。

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.