2010年7月16日 星期五

查找註冊表的變動(WinDiff)

在寫Windows程式時,如果遇到比較冷門的功能
常常會遇到怎麼找都找不到API的狀況(甚至上msdn也沒人回應)
如果這時候你發現其實有手動的方式可以達到同樣的目的
(例如之前提過的DPI Virtualization)
那就可以考慮一下去比對註冊表的變動了

在Windows系統中幾乎所有的變動都會改變註冊表
在執行列打入regedit就可以看到一堆機碼
基本上真的無從找起

這時候就要用到WinDiff工具了
可以參考如何使用 Windiff.exe 公用程式
這個工具可以讓你比對兩個文字檔案,找到並瀏覽差異

1. 在做想要達到目的的操作前,先將註冊表匯出成文字檔
2. 做手動的操作
3. 重開註冊表,並匯出成另一個文字檔
4. 開啟WinDiff,從表單中選取File->CompareFiles...
並分別選取兩個文字檔
5. 如果兩個檔案相同,會顯示identical的訊息
6. 如果不同,會顯示紅字,雙擊紅字就會展開整份檔案
7. 首先會到第一筆差異處,利用下一筆(F8)或上一筆(F7)瀏覽

接下來就是用眼睛比對了
通常你會發現一些關鍵字出現,就是你要找的了
這裡有幾點需要注意的
1. 整份註冊表還蠻大的(100MB+是正常的)
可以考慮針對有關的註冊表查找,或是分成很多個表匯出
這樣可以節省比對的時間
2. 使用WinDiff比對完一對檔案後,最好是重開後再比對下一份
因為似乎還是會占用記憶體,所以會變慢很多
3. 一個動作可能會更動到註冊表的很多地方
就算已經找到,還是建議繼續搜索完其他的部分

在找到差異後,就可以透過編輯註冊表的API來做同樣的調整了
例如DPI Virtualization中的方法
不過這邊要強調,這種做法其實有一定的風險
(當然,如果只是檢查倒是無所謂,但是有修改就很難說了)
你有可能有漏掉沒有改到的地方(造成註冊表的關聯錯誤)
建議是先在測試的機器(可隨時重新安裝的電腦)上,手動做幾次
如果確定穩定而且達到目的的話再用程式去改

--
參考資料
如何使用 Windiff.exe 公用程式