深入剖析Windows补丁
基本上來說,現在微軟Windows補丁包中的更新文件大致包含了兩類。一類叫做GDR(普通分發版本),一類叫做QFE(快速修補工程更新)。其中,GDR文件經過了大量嚴格的測試,穩定性很高。而對QFE所做的測試相對則要相對少一些,所以穩定性亦要低一些。
所以,微軟的補丁包也可以按此分為兩類。一類就是安全修補程序,這類補丁包中同時包含了GDR和QFE版本的更新文件,也就是兩個副本。微軟的很多關鍵性安全補丁就屬于此類。還有一類叫做修復程序,僅包含了QFE版的更新文件。常見的就是一些需要正版驗證的補丁。
那么為什么安全修補程序要包含兩種版本的文件呢?如果你要在系統中安裝修復程序,也就是說要安裝QFE更新文件。然而當前系統中需要被替換的文件為GDR版,而且版本號要比補丁包中的QFE文件版本號高,那么就不能用補丁包中的QFE文件來替換,而需要用與當前GDR文件版本相同的QFE文件來修補。那么到哪里取得這個文件呢?其實這個QFE文件在你以前安裝GDR版更新文件(就是當前系統中使用的文件)時就已經被同時復制到了你的硬盤中。這就是安全修補程序需要同時包含GDR和QFE更新文件,且兩類文件版本號都相同的原因。
以名為WindowsXP-KB896688-x86-CHS.exe的安全修補程序為例來說明,該補丁包需要更新MSHTML.DLL這個文件。如果安裝程序檢測到系統中當前的MSHTML.DLL為GDR版時,則會用補丁包中GDR版的MSHTML.DLL(文件說明為xpsp_sp2_gdr.051004-1415)來進行更新,并且把QFE版的MSHTML.DLL復制到"%windir%/$hf_mig$"這個文件夾。反之,如果安裝程序檢測到系統中當前的MSHTML.DLL為QFE版時,則會用補丁包中QFE版的MSHTML.DLL(文件說明為xpsp.051004-1419)來進行更新。兩個文件的版本號都是6.00.2900.2769。
同時在注冊表中也可以發現這個特點。在我的系統中反映為兩個注冊表項:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Updates/Windows XP/SP3/KB896688/Filelist/8和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Updates/Windows XP/SP3/KB896688/Filelist/50。兩個項下的FileName字串值都是"MSHTML.DLL",而Location字串值分別為"C:/WINDOWS/system32"和"c:/windows/$hf_mig$/KB896688/SP2QFE",也就是分別存放GDR和QFE文件的位置。
如果你在安裝了GDR版的KB896688補丁之后,又要重新安裝一個需要把MSHTML.DLL更新為QFE版的修復程序。但是該修復程序中的MSHTML.DLL版本號比6.00.2900.2769要低,那么這時候更新程序就不會選取補丁包中的MSHTML.DLL來更新,而是到"%windir%/$hf_mig$"去找之前預留的QFE版MSHTML.DLL來更新。所以說一般最好不要輕易刪除Windows目錄下的"$hf_mig$"文件夾。?
總結
以上是生活随笔為你收集整理的深入剖析Windows补丁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Qt智能仪器仪表通讯软件设计
- 下一篇: 微信接收QQ邮箱提醒