平時安裝Windows補丁時,經常會看到補丁中出現 GDR 或 QFE 等字樣,它們表示什麼意思呢?原來微軟已經為補丁中的更新系統檔案劃分了層級,其中 GDR 表示“普通分發版本”,而 QEF 則表示“重點補充工程更新版本”Quickfix engineering)。其中 GDR 更新檔案一般都進行了大量的嚴格測試,因此補丁的穩定性相對較高;而 QFE 更新檔案一般所做的測試相對較少,因此其穩定性不如 GDR。
Windows 補丁劃分為兩類:一類稱為“安全Hotfix”,這類補丁包同時包含 GDR 和 QEF 版本的更新檔案,也就是兩個副本,一般在Windows被發現嚴重漏洞時發布重大更新使用;第二類稱為“修複程式”,一般都是一些非關鍵性更新,僅包含 QFE 版本的更新檔案。
為什麼“安全Hotfix”要包含兩種更新檔案的版本呢?比如現在要安裝一個僅包含 QFE 版檔案的非關鍵性更新。如果這個補丁需要更新的舊系統檔案已經是 GDR 版,這時更新程式就會自動對比新舊檔案的版本號碼,假如原先的 GDR 檔案版本比補丁包中的 QEF 檔案版本還要高,那麼就會自動禁止補丁包中的 QFE 檔案進行更新,而會改用和原GDR 檔案版本號碼相同的 QEF 版檔案來更新。那麼到什麼地方去找這個和原 GDR 檔案版本號碼相同的 QFE 檔案呢?實際這個檔案已經在電腦硬碟裡了,因為在上一次安裝包含這個 GDR 檔案的“安全Hotfix”時,已經將同版本的 QFE 也複製到了系統中備用。這就是為什麼“安全Hotfix”要同時包含 GDR 和 QFE 兩個副本的原因。
舉一個例子:安裝KB896688 補丁,此補丁需要更新系統檔案 %SystemRoot%\system32\MSHTML.DLL。由於 KB89668 補丁是一個“安全Hotfix”,因此它同時包含 GDR 版和 QEF 版兩個版本的 MSHTML.DLL 副本,它們的檔案說明分別為“xpsp_sp2_gdr.051004-1415”和“xpsp.051004-1419”。執行更新程式後,安裝程式會自動檢測當前系統的 MSHTML.DLL 版本,如果發現原來的檔案就是 GDR 版,那麼就會用補丁包中的 GDR 版來更新;如果發現原來的檔案是 QEF 版,則會用補丁包中的 QFE 版來更新。不論是哪種情況,更新完畢後,新的系統檔案都將是更新後的 6.00.2900.2769 新版本號碼,只不過有 GDR 和 QFE 之分而已。
現在,我們再用KB896688 的例子回過頭說一說剛才提到的第一個例子。假設我們更新 KB896688 補丁之前,原系統檔案 MSHTML.DLL 已經是 GDR 版,那麼在更新補丁時,就會用 GDR 版的 xpsp_sp2_gdr.051004-1415 版的 MSHTML.DLL 進行更新。與此同時,更新程式會將那個 xpsp.051004-1419 的 QEF 檔案複製到硬碟中,具體位置是 Windows 檔案夾下的 $hf_mig$ 子檔案夾。假設我們日後需要安裝一個也需要修改 MSHTML.DLL 的其它非關鍵性補丁,這個補丁就會自動檢測自己提供的 QEF 檔案和 xpsp_sp2_gdr.051004-1415 相比哪個版本高。假如自己提供的 QEF 版本還不如 xpsp_sp2_gdr.051004-1415 版本高的話,就不會用自己的 QFE 檔案進行更新,而是會從 Windows\$hf_mig$ 裡把那個備用的 xpsp.051004-1419 拿出來,進行更新。
記得有人曾經問起系統檔案夾Windows下的$hf_mig$ 檔案夾是否可以刪除的問題。現在經過上面的說明解釋後就應該明白了,最好不要隨便刪除 Windows\$hf_mig$ 檔案夾。刪除此檔案夾雖然不會引起系統立即崩潰,但是一旦出現上面所說的那種情況,就可能會發生安裝新補丁後引起系統檔案版本不匹配導致的相容性問題。所以,不要輕易刪除$hf_mig$ 檔案夾。
本文出自 “天鬼皇” 部落格,請務必保留此出處http://ghostlan.blog.51cto.com/5413429/1301842