Windows 11 點樣暗中幫舊遊戲續命:拆解相容性資料庫同 shim
3C 產品

Windows 11 點樣暗中幫舊遊戲續命:拆解相容性資料庫同 shim

圖片:via XDA Developers — https://www.xda-developers.com/windows-11-secret-database-makes-your-old-games-just-work/
TechLab 編輯部(譯)·

由辨認程式到攔截 API,睇清 Windows 背後點樣執手尾

「秘密資料庫」其實唔算秘密

XDA 將佢叫做 secret database,講法幾吸引,不過多少有啲誇張。Windows 呢套 Application Compatibility Database 有公開技術文件,Microsoft 仲提供 Compatibility Administrator 畀人查閱同建立自訂修正。佢一直收埋喺系統背後工作,普通玩家甚少會掂到,所以感覺神秘;本質上,佢係 Windows 長年維持舊程式相容性嘅基建,舊遊戲只係其中一批較多人留意嘅受惠軟件。

資料庫記住嘅係「邊個要用邊種補丁」

系統資料庫採用 .sdb 索引二進位格式。Microsoft 文件顯示,Windows 可以按 exe 嘅檔名、大小、checksum、版本、日期,甚至同一資料夾有冇其他指定檔案去配對程式。命中記錄之後,條目會指向相容模式、個別 compatibility fix,或者 AppHelp 提示。即係話,佢唔係收藏完整舊遊戲,更唔會預先改寫遊戲檔案;佢記低嘅主要係辨認條件同應該套用嘅處理方法。

Shim 點樣呃過廿年前嘅程式

真正郁手嗰部分叫 Appfix,常見做法就係 shim。Windows 會喺程式呼叫指定 API 時插入 hook,先交畀一小段相容邏輯處理,再視乎情況呼叫原本系統功能。官方列出嘅修正包括回報舊版 Windows 版本號、改變可用磁碟空間數字、redirect Registry 或檔案操作,同調整舊程式要求嘅權限。遊戲眼中收到熟悉嘅答案,Windows 本身仍然照行新架構,亦唔使開一部完整嘅 Windows XP 虛擬機。

玩家可以睇,但唔係用記事本打開

C:\Windows\AppPatch 下面可以見到 sysmain.sdb,但佢係二進位資料庫,直接打開冇乜意思。想睇清楚內容,可以由 Microsoft 下載 Windows ADK,安裝 Application Compatibility Tools,再用 Compatibility Administrator 瀏覽 System Database,搜尋遊戲或 exe 同查看相關 fix。32-bit 同 64-bit 程式要配合相應版本嘅工具;至於 Registry 入面 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers,見到嘅主要係明確套喺本機程式上嘅相容設定,唔等同整個系統資料庫。

對舊遊戲疑難排解有咩用

最實際嘅價值係幫手縮窄問題範圍。遊戲開唔到時,可以先打開 exe 嘅檔案內容,睇吓 Compatibility 分頁,再查系統資料庫有冇對應條目、Windows 預期會套用咩 fix。如果現成修正已經命中,亂加另一層相容模式可能只會令情況複雜;完全搵唔到條目,就要再查舊 DirectX 元件、copy protection、第三方 patch、顯示卡 driver 或遊戲本身檔案。Compatibility Administrator 亦做到自訂 .sdb,再用 Sdbinst.exe 註冊,不過錯配 shim 可以令程式行為變得更怪,普通玩家冇必要一開始就行到呢步。

一個資料庫救唔晒 Windows 遊戲史

XDA 原文話得有啲盡,舊遊戲今日仲行到,功勞亦唔可以全數記喺 sysmain.sdb。Windows 本身嘅 Win32 相容性、遊戲更新、社群 patch、runtime、driver 同硬件行為都有影響;資料庫只會處理 Microsoft 已知、能夠可靠辨認,同適合用 shim 修補嘅問題。Microsoft 官方文件用嘅講法都係修正「部分」跨版本相容問題。所以下次老遊戲一撳就開,可以當呢套機制幫過手;一撳就死,就由資料庫條目開始查,唔好假設轉做 Windows XP 模式一定搞得掂。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook