專利名稱:有效地打補丁的制作方法
技術領域:
本發(fā)明涉及到升級已安裝的計算機程序的操作的領域。
背景技術:
打補丁是修改已經安裝的程序,包括應用程序、實用程序、操作系統(tǒng)和操作系統(tǒng)部件、設備驅動程序等等的過程。打補丁對于出于各種目的來修改程序是有用的,這些目的包括糾正程序錯誤、減少或消除安全風險或者提高所修改程序使用的邏輯。打補丁一般是由最初提供要打補丁的程序的公司或其它組織發(fā)起的。
安裝的程序主要是由可執(zhí)行代碼模塊組成的。作為一個例子,許多設計成在來自Washington Redmond的Microsoft Corp.的WINDOWS XP操作系統(tǒng)上執(zhí)行的程序主要是由叫做“DLL”的可執(zhí)行代碼模塊組成的。一個打補丁的流行的傳統(tǒng)方法是要在組成要打補丁的安裝程序的可執(zhí)行代碼模塊中標識出含有希望用補丁來修改的程序代碼的可執(zhí)行代碼模塊;創(chuàng)建一個新版本的已標識的可執(zhí)行代碼模塊,在其中已作了需要的修改;并且將新版本的已標識的可執(zhí)行代碼模塊與安裝程序一起分配給希望應用該補丁的用戶。然后每個用戶確定她/他是否希望應用這個補丁,如果是,執(zhí)行用新版本的已標識的可執(zhí)行代碼模塊取代原來版本的已標識的可執(zhí)行代碼模塊的安裝程序。
傳統(tǒng)的用于打補丁的方法有很多非常不利的地方。這些不利經常增加了與接收和應用補丁有關的負擔。一些情況下,這種增加的負擔延遲了一些用戶對一些補丁的應用,而且甚至阻止了一些用戶對一些補丁的應用。補丁應用中的這種延遲和阻礙在一些情況下可能對用戶有嚴重的負面效果,這對那些設計成減少或消除安全風險的補丁來說尤其顯著。
傳統(tǒng)的用于打補丁的方法的一個缺陷涉及到必須創(chuàng)建多個補丁進行分配以實現對單個程序的單獨修改的常例。一些情況下,要打補丁的程序有幾個不同的特定可執(zhí)行代碼模塊的“環(huán)境(flavor)”,比如程序被設計成可在其上執(zhí)行的每個操作系統(tǒng)或操作系統(tǒng)版本,和/或程序的每個自然語言版本的不同環(huán)境。這里標識的可執(zhí)行代碼模塊是這樣的一種可執(zhí)行代碼模塊以上描述的補丁的創(chuàng)建和分配過程必須為已標識的可執(zhí)行代碼模塊的每個環(huán)境而重復。然后用戶必須選擇并應用已標識的可執(zhí)行代碼模塊的適當環(huán)境的補丁。對大量結果補丁進行分類并選擇在每個用戶的計算機系統(tǒng)上適合的一組補丁是非常繁重的,如此之多以至于這種情況有時被叫做“補丁地獄(patch hell)”。一些情況下,管理員必須維持一個標識了安裝在每個目標系統(tǒng)上的一組可執(zhí)行模塊版本的目錄數據庫,它用于為每個目標系統(tǒng)選擇適當的常規(guī)補丁。
傳統(tǒng)的用于打補丁的方法的另一個缺陷涉及到分配的補丁的較大尺寸。這對于有以兆比特級大小的可執(zhí)行代碼模塊來說,并非罕見,這會導致單個補丁有一個可比較的大小,使得它對一些用戶來說難以分配和存儲,或者甚至不可能分配或存儲。這個問題對具有多個環(huán)境的補丁來說更要加倍嚴重。進一步說,因為每個常規(guī)補丁一般包括一個完整的可替代的可執(zhí)行模塊,應用常規(guī)補丁會產生代碼攪拌(code churn)的問題。
傳統(tǒng)的打補丁的方法的一個進一步的缺陷涉及到一些用戶在應用補丁到生產計算機系統(tǒng)之前要對其進行測試的需要。一些情況下,在計算機系統(tǒng)上安裝一個補丁可能會有相反的結果,比如補丁中包含的新版本的標識的可執(zhí)行代碼模塊產生一個新的程序錯誤的情況,或與在與補丁應用相對的計算機上運行的另一個程序之間產生新的、不可預料的相互作用的情況。因此,經常在生產系統(tǒng)上應用一個補丁之前,用戶首先對一個測試系統(tǒng)應用該補丁以估計該補丁應用在生產系統(tǒng)中是否安全,該生產系統(tǒng)的數據和操作的維持是重要的。這種獨立的補丁測試增加了與打補丁有關的負擔。此外,在常規(guī)補丁產生問題的情況下——比如應用程序兼容性問題或新的開發(fā)弱點——在應用補丁充分長的時間后,這種問題很難追溯到該補丁。
傳統(tǒng)的用于打補丁的方法的一個附加的缺陷涉及到補丁內包括的安裝程序的運行。通常,為了取代為執(zhí)行程序的一部分的可執(zhí)行代碼模塊,該安裝程序必須首先終止那個程序的執(zhí)行。同樣地,一些情況下,這種取代在沒有重新啟動計算機系統(tǒng)的情況下不能完成。所有這些步驟會在打補丁的計算機系統(tǒng)的使用中導致實質的中斷。
傳統(tǒng)的用于打補丁的方法的另一個缺陷包括試圖修補一個可執(zhí)行模塊,其中已經為那個可執(zhí)行模塊更早地發(fā)布“專用修補”,也叫做“熱修補”給該可執(zhí)行模塊的適合的用戶子集。這樣的情況下,因為在向根據用戶是否已經應用熱修補的每個用戶來分配取代不同新版本的可執(zhí)行代碼模塊的常規(guī)補丁過程中遇到的困難,通常代之以分配一個取代單個新版本的可執(zhí)行模塊的簡單的常規(guī)補丁,而不考慮用戶是否已經應用熱修補。如果那個新版本包含熱修補,該補丁就向用戶強加上熱修補,而不是接收該熱修補。另一方面,如果那個新版本沒有包含熱修補,它就剝奪了用戶想要接收熱修補的權利。
傳統(tǒng)的用于打補丁的方法另一個缺陷包括對依靠特定可執(zhí)行模塊,比如一個特定動態(tài)鏈接庫的軟件產品的安裝程序經常通過將該可執(zhí)行模塊存儲在目標計算機系統(tǒng)的文件系統(tǒng)內的一個非標準位置來“隱藏”那個可執(zhí)行模塊這一事實。因此,有時候確定特定的目標系統(tǒng)是否包含一個需要打補丁的可執(zhí)行模塊的副本是困難的或不可能的,并且,同樣,也很難確定它位于目標計算機系統(tǒng)的文件系統(tǒng)內的哪個位置。同樣地,一些軟件產品維持已經由安裝程序安裝的可執(zhí)行模塊版本的一個“目錄”。軟件產品可以依靠特定的可執(zhí)行模塊版本的目錄中指示的正確性。常規(guī)補丁在沒有更新該目錄而用可執(zhí)行模塊的新版本取代標識的可執(zhí)行模塊版本的情況下,這種依靠就會失敗了。
傳統(tǒng)的用于打補丁的方法的另一個缺陷根源于在要打補丁的可執(zhí)行模塊被安裝在目標計算機系統(tǒng)中之前的時間應用它們是不可能的這一事實。因此,如果要打補丁的可執(zhí)行模塊是在接收那個可執(zhí)行模塊的常規(guī)補丁之后才被安裝到目標計算機系統(tǒng)中,該補丁被應用于該可執(zhí)行模塊是不可能的。
傳統(tǒng)的用于打補丁的方法的另一個缺陷是它們典型地只能由使用具有自由的修改許可的管理賬戶登錄到目標計算機系統(tǒng)的用戶來應用。為此目的而登錄一個管理賬戶會使該目標計算機系統(tǒng)易受在目標計算機系統(tǒng)上存在的尋求修改該目標計算機系統(tǒng)并需要自由的修改許可的病毒的攻擊。
傳統(tǒng)的用于打補丁的方法的另一個缺陷是常規(guī)補丁很難或不可能失效,這需要比如倒轉可執(zhí)行模塊的取代步驟,或者倒轉一個或多個對系統(tǒng)注冊表的修改的步驟。
因此,一個克服了以上討論的傳統(tǒng)的打補丁方法的一些或所有缺陷方面的新的打補丁的方法具有重要的實用性。
圖1說明了一個適合的工具程序(facility)可在其中實現的計算系統(tǒng)環(huán)境的一個例子。
圖2是顯示一個典型的參照該工具程序的計算機系統(tǒng)間數據交換的流程圖。
圖3是顯示由該工具程序為接收并處理新補丁通常執(zhí)行的步驟的流程圖。
圖4是顯示由該工具程序使用的典型的樣本補丁表格的數據結構圖表。
圖5是顯示由該工具程序為更新一個為特定補丁的配置指令而通常執(zhí)行的步驟的流程圖。
圖6是顯示由該工具程序為完成一個由補丁指定的參數確認而通常執(zhí)行的步驟的流程圖。
具體實施例方式
提供了一個用于為安裝的計算機程序代碼(“該工具程序”)打補丁的軟件程序。一些實施例中,該工具程序增加了參數測試和對安裝的函數的測試結果處理。另一些實施例中,該工具程序為安裝函數增加不同的其他類型的泛函性(functionality),一些情況下是在安裝函數的執(zhí)行流程中的任意位置。
一些實施例中,對每個補丁而言,該工具程序向每個要打補丁的計算機系統(tǒng)——即每個“目標計算機系統(tǒng)”分配可以執(zhí)行測試的一個點的說明、要執(zhí)行測試的特性和怎樣動作以回應一個或多個不同的測試結果。一些實施例中,該工具程序提供了一組標準的參數確認和可在補丁中被指定的其它測試。例如,補丁可以指定對于一個特定的函數,如果該函數的特定參數沒有一個確定的值,那該函數的調用應該在它實質的執(zhí)行開始之前會失敗。另一個補丁可以指定對于一個特定的函數,如果特定的參數長度超過指定的最大長度值,那該參數應該在該函數的執(zhí)行被允許處理之前被截短到指定的最大長度。許多依賴于調用帶有參數值的函數的安全開發(fā),當它們在沒有原有函數代碼的版本內被阻塞時,會導致該函數創(chuàng)建或利用不安全的環(huán)境。一些情況下,這種開發(fā)可通過使用這種補丁來阻止帶有這種參數值的函數執(zhí)行而被阻止。一些實施例中,補丁指定了例如從文件中讀取或由用戶輸入的值的測試,而不是對函數參數進行測試。
一些實施例中,一個自動打補丁代理自動接收每個補丁,確認它,并將它們存儲在補丁表格內用于可能的應用程序。一些實施例中,每個補丁被應用于要打補丁的可執(zhí)行模塊的任何情況下,當接收到補丁時,該模塊已經被加載在目標計算機系統(tǒng)中上。這里該方法是稱作為“熱修補”,并且使得補丁一被接收立刻就有效,并且不要求該工具程序能夠確定要打補丁的可執(zhí)行模塊存儲在磁盤的哪個地方。一些實施例中,每個接收的補丁應用于要打補丁的可執(zhí)行模塊的磁盤映像,這樣,當磁盤映像在未來時間被加載時,加載的磁盤映像包括該補丁。這里該方法是指“冷修補”,允許補丁跨越多個會話的是持久的。一些實施例中,該工具程序執(zhí)行熱修補和冷修補。一些實施例中,每次要打補丁的可執(zhí)行模塊被操作系統(tǒng)加載者加載時,就將每個補丁應用于要打補丁的可執(zhí)行模塊。這里該方法是指“加載時間補丁”。一些實施例中,每次要打補丁的函數被調用時,就將每個補丁應用于要打補丁的可執(zhí)行模塊。這里該方法是指“調用截取補丁”。加載時間補丁和調用截取補丁都(1)不要求該工具程序能夠確定要打補丁的可執(zhí)行模塊存儲在磁盤的哪個地方,(2)方便了特定補丁的有準備的可逆性,并且(3)不要求對可執(zhí)行模塊的磁盤映像的修改。
一些實施例中,該工具程序允許用戶或管理員配置已被應用的補丁的運行。作為例子,這種配置可以包括,對一個特定的已應用的補丁由該補丁指定的測試在執(zhí)行到達為該補丁指定的點時是否被執(zhí)行;由該補丁指定的測試結果處理是被執(zhí)行還是被忽略;和/或是否測試的性能和/或其結果被記錄、顯示在警告消息中等等。這些實施例中,該工具程序允許通過最初使登陸有效而使結果處理無效而在生產計算機系統(tǒng)上測試補丁。這些實施例中,該工具程序進一步允許在補丁結果處理之后,將該補丁記錄在“詳細(verbose)的模式”中來幫助標識該補丁產生問題的情況,比如應用程序兼容性問題或其它IT問題。如果發(fā)現補丁產生問題之后,這些實施例也允許該補丁在應用之后迅速失效。該工具程序的一些實施例也允許通過簡單地從接收并存儲在目標計算機系統(tǒng)中的一組補丁中刪除該補丁而迅速失效。
一些實施例中,該工具程序使用“數據驅動”補丁方法,其中補丁不包含代碼,而包含數據,比如指定了執(zhí)行測試的點、要執(zhí)行的測試的特性和怎樣動作作為對一個或多個不同測試結果的響應的一段小的人類可讀的文本或XML文檔。這樣的實施例中,打補丁代理接收數據驅動補丁,并且附加由補丁指定的測試和測試處理。一些實施例中,該工具程序使用“代碼驅動”打補丁方法,其中每個補丁包含附加在要打補丁的可執(zhí)行模塊上的短程序,該短程序通過調用該工具程序的標準參數測試函數來自行執(zhí)行測試,并且自行執(zhí)行測試處理。使用數據驅動補丁或代碼驅動補丁,用單個補丁來處理要打補丁的可執(zhí)行模塊的所有環(huán)境有時候是可能的。
一些實施例中,該工具程序標記每個補丁來證明(1)該補丁來源于一個批準的源頭,并且(2)該補丁的內容從批準源頭創(chuàng)建補丁開始就未被修改。
一些實施例中,該工具程序分配每個補丁給每個目標計算機系統(tǒng),而且目標計算機系統(tǒng)上的打補丁代理基于目標計算機系統(tǒng)的特征自動確定哪個補丁將在目標計算機系統(tǒng)上應用和它們怎樣被應用。這減輕了用戶和管理員的許多傳統(tǒng)的與選擇和應用補丁有關的負擔,以及維持一個正確的、當前的目錄數據庫的負擔。例如,這些特征可以包括哪個版本的要打補丁的可執(zhí)行模塊被安裝在目標計算機系統(tǒng)上。這些實施例中,該工具程序可以通過分配為特定可執(zhí)行模塊的熱修補和未熱修補的環(huán)境指定了不同處理的補丁、為那個可執(zhí)行模塊打補丁時消除為特定可執(zhí)行模塊犧牲熱修補或使得熱修補普遍存在的需要來克服由熱修補所導致的該類型的問題。
一些實施例中,打補丁代理將每個接收的補丁存儲在目標系統(tǒng)中,而不考慮當該補丁被接收時,要由特定補丁打補丁的可執(zhí)行模塊是否被安裝在目標系統(tǒng)上。因為在許多情況下,該工具程序應用補丁作為對加載要打補丁的可執(zhí)行模塊或調用要打補丁的函數的響應,該工具程序可以對在接收補丁到目標系統(tǒng)之后安裝在目標系統(tǒng)上的可執(zhí)行模塊應用一個補丁。同樣地,補丁可以在要打補丁的可執(zhí)行模塊卸載和其后的重新安裝中繼續(xù)存在。
一些實施例中,打補丁代理在操作系統(tǒng)服務中實現。這些實施例中,工具程序符合打補丁代理應用補丁所需要的任何許可。這些實施例減少了當常規(guī)補丁被應用時通常強加的安全風險,因為它們消除了用戶使用具有很寬修改許可的管理賬戶登錄目標計算機系統(tǒng)的要求,上述要求會給目標計算機系統(tǒng)上存在的任何病毒修改目標計算機系統(tǒng)的敏感部分的較大機會。
這些由工具程序使用的補丁一般比較小,并因此提出了適度的對傳輸和存儲的資源要求。同樣地,因為工具程序使用的補丁易于以少數定義明確的方式來修改打補丁軟件的狀態(tài)(behavior),故該工具程序幫助減少了代碼攪拌的問題。
圖1說明了適合的在其中可以實現該工具程序的計算機系統(tǒng)環(huán)境100的一個例子。該計算系統(tǒng)環(huán)境100只是一個適合的計算環(huán)境的例子并沒有任何限制用戶范圍或程序功能性的意圖。對涉及到示例性計算環(huán)境100中說明的任一部件或其結合而言,計算環(huán)境100被認為與其既無任何依賴性,也非必需。
該工具程序對大量其它的常用或專用計算系統(tǒng)環(huán)境或配置中也是可以操作的。適合使用該工具程序的熟知的計算系統(tǒng)、環(huán)境和/或配置的例子包括,但不限于個人計算機、服務器計算機、手提或膝上設備、寫字板設備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機頂盒、可編程消費者電子設備、網絡PC、微型機、大型機、包括任何以上系統(tǒng)或設備的分布式計算環(huán)境等等。
該工具程序可在計算機可讀指令的普通上下文范圍,比如由計算機執(zhí)行的程序模塊中進行描述。一般來說,程序模塊包括基本例程、程序、對象、部件、數據結構等等,它們執(zhí)行特定的任務或實現特定的抽象數據類型。該工具程序也可以在任務由通過通信網絡鏈接的遠端處理設備執(zhí)行的分布式計算環(huán)境中施行。在分布式環(huán)境中,程序模塊可被安置在包括存儲器存儲設備的本地和/或遠程計算機存儲介質。
關于圖1,一個用于實現該工具程序的示例性系統(tǒng)包括以計算機110的形式的通用計算設備。計算機110的部件可以包括,但不限于處理單元120、系統(tǒng)存儲器130和把包括系統(tǒng)存儲器在內的不同部件耦合到處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可以是許多類型的總線結構,包括存儲器總線或存儲器控制器、外圍總線、和使用多種總線結構的任何一種的局部總線的任何一種。作為例子,而非限制,這種結構包括工業(yè)標準結構(ISA)總線、微通道結構(MCA)總線、增強型ISA(EISA)總線、視頻電子標準協(xié)會(VESA)局部總線以及外圍組件互聯(lián)(PCI)總線,也稱為Mezzanine總線。
計算機110典型地包括多種計算機可讀的介質。計算機可讀介質可以是由計算機110訪問的任何可用介質并包括易失的和非易失的介質、可移動的和不可移動的介質。作為例子,而非限制,計算機可讀介質可以包括計算機存儲介質和通信介質。計算機存儲介質包括易失的和非易失的介質、可移動的和不可移動的介質,這些介質以用于信息存儲的任何方法或技術,比如計算機可讀指令、數據結構、程序模塊或其它數據來實現。計算機存儲介質包括但不限于,RAM、ROM、EEPROM、閃存或其它存儲技術、CDROM、數字化視頻光盤(DVD)或其它的光盤存儲器、磁性磁帶、磁性錄音帶、磁性磁盤存儲器或其它的磁性存儲器設備,或可用于存儲需要的信息并可由計算機110存取的任何其它介質。通信介質典型地包括計算機可讀指令、數據結構、程序模塊或在一個調制數據信號比如載波或其它傳輸裝置中的其它數據并且包括任何信息傳遞介質。術語“調制數據信號”意思是具有一個或多個它的特征集或以信號中編碼信息的方式變換的信號。作為例子,而非限制,通信介質包括比如有線網絡或直接有線連接的有線介質和比如聲頻、RF、紅外線和其它無線介質。以上的任何組合也應該包括在計算機可讀介質的范圍內。
系統(tǒng)存儲器130包括以比如只讀存儲器(ROM)131和隨機存取存儲器(RAM)132的易失的和非易失的存儲器形式的計算機存儲介質。基本輸入/輸出系統(tǒng)133(BIOS)典型地存儲在ROM 131內,它包括如啟動時幫助在計算機110內的元件間傳輸信息的基本例程。RAM 132通常包含可由處理單元120即時存取和/或目前在操作的數據和/或程序模塊。作為例子而非限制,圖1說明了操作系統(tǒng)134、應用程序135、其它程序模塊136以及程序數據13。
計算機110還包括其它可移動/不可移動、易失/非易失計算機存儲介質。僅僅作為例子,圖1顯示了從不可移動的非易失磁性介質讀取或向其中寫入的硬盤驅動器141、從可移動的非易失磁性磁盤152讀取或向其中寫入的磁盤驅動器151、以及用于向諸如CD ROM或其它光學媒介這樣的可移動非易失光學介質156讀寫的光盤驅動器155。其它能用于示例性操作環(huán)境的可移動/不可移動、易失/非易失計算機存儲介質包括但不限于磁性盒式磁帶、閃存卡、數字多用途盤、數字視頻磁帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅動器141經常通過諸如接口140等不可移動存儲器接口連接到系統(tǒng)總線121,而磁盤驅動器151通過諸如接口150等可移動存儲器接口連接到系統(tǒng)總線121。
圖1討論并示出的驅動器及其關聯(lián)的計算機存儲介質為計算機110提供了計算機可讀指令、數據結構、程序模塊和其它數據的存儲。例如,在圖1中,示出硬盤驅動器141作為儲存操作系統(tǒng)144、應用程序145、其它程序模塊146和程序數據147。注意,這些組件可以與操作系統(tǒng)134、應用程序135、其它程序模塊136和程序數據137相同,也可以與它們不同。這里對操作系統(tǒng)144、應用程序145、其它程序模塊146和程序數據147給予不同的標號來說明至少它們是不同的副本。用戶可以通過輸入設備,如寫字板、電子數字化儀164、麥克風163、鍵盤162和定位設備161(通常指鼠標、跟蹤球或觸摸板)向計算機110輸入命令和信息。其它輸入設備(圖1中未示出)可包括操作桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀等。這些和其它輸入設備通常通過耦合至系統(tǒng)總線的用戶輸入接口160連接至處理單元120,但是也可以通過其它接口和總線結構相連,如并行端口、游戲端口或通用串行總線(USB)。監(jiān)視器191或其它類型的顯示設備也通過接口,如視頻接口190連接至系統(tǒng)總線121。監(jiān)視器191也可以與觸摸屏面板等集成。注意,監(jiān)視器和/或觸摸屏面板可以物理連接到含有計算設備110中的外殼,比如一個平板型的個人計算機。此外,比如計算設備110的計算機也可以包括其他外圍輸出設備,比如,揚聲器195和打印機196,它們通過外圍接口194等進行連接。
計算機110可能工作在使用一個或多個到諸如遠程計算機180的遠程計算機的邏輯連接的網絡化環(huán)境內。遠程計算機180可以是個人計算機、服務器、路由器、網絡PC、對等設備或其他公共網絡節(jié)點,并且一般包括與計算機110相關的許多或所有上述元件,雖然圖1中僅說明了存儲器存儲設備181。圖1所述的邏輯連接包括局域網(LAN)171以及廣域網(WAN)173,但也可以包括其他網絡。這種網絡環(huán)境常見于辦公室、企業(yè)范圍的計算機網絡、內聯(lián)網以及因特網。例如,現在的工具程序中,計算機系統(tǒng)110可以包含數據移植于其中的源頭裝置,而遠程計算機180可以包含目的裝置。然而注意到,源頭和目的裝置不需要由網絡或任何其他裝置連接,代之以數據可通過任何能夠由源頭平臺寫入并由目的平臺讀取的任何裝置進行轉移。
當用于LAN網絡環(huán)境時,計算機110通過網絡接口或適配器170連接到局域網LAN 171。當用于WAN網絡環(huán)境時,計算機110一般包括調制解調器172或其他裝置,用于在諸如因特網的廣域網173上建立通信。調制解調器172可能是內置或外置的,它通過用戶輸入接口160或其它適合的機制連接到系統(tǒng)總線121。在網絡化環(huán)境內,所述與個人計算機110相關的程序模塊或其中的一部分可能存儲在遠程存儲設備內。作為例子,而非限制,圖1說明了將遠程應用程序185駐留在存儲設備181上。應該認識到所示的網絡連接是示例性的,在計算機間建立連接的其他裝置也可以使用。
盡管圖1顯示了存在于特定計算機系統(tǒng)上以特定方式排列的各種功能性和數據,本領域的技術人員意識到這種功能性和數據可以通過不同排列的計算機系統(tǒng)以不同的其他方式分布。盡管以上述方式配置點計算機系統(tǒng)一般用于支持該工具程序的運行,然而本領域的一個普通技術人員意識到該工具程序可以用不同類型和配置并由不同部件的設備來實現。
圖2是顯示了參照本工具程序的計算機系統(tǒng)間一個典型的數據交換的數據流程圖。圖2顯示的計算機系統(tǒng)(計算機系統(tǒng)210、220、221、222、230、231和232)一般有顯示的一些或所有部件并且與圖1結合進行討論。在補丁分配服務器上,該工具程序產生一個或多個補丁。這些補丁201從補丁分配服務器發(fā)送到一個或多個管理服務器,比如管理服務器220和230。接著,每個管理服務器將補丁運送到一個或多個目標計算機系統(tǒng),比如目標計算機系統(tǒng)221、222、231和232。一些實施例中(未顯示),補丁分配服務器直接,或通過一個比通過單個管理服務器更為間接的路徑發(fā)送補丁到一個或多個目標計算機系統(tǒng)。在目標計算機系統(tǒng)接收到的補丁在目標計算機系統(tǒng)進行處理,下面將作更詳細的描述。管理服務器也可以發(fā)送補丁配置命令202到一個或多個目標計算機系統(tǒng),該系統(tǒng)應用補丁配置命令以重新配置特定補丁的運行。作為下面更為詳細的描述,補丁可以完全失效;如果補丁沒有失效,其運行通知和測試結果處理可以獨立地生效或失效。當運行通知為生效時,通知可以顯示或本地存儲在目標計算機系統(tǒng)上,或可以作為通知203被發(fā)送到適當的管理服務器上。
圖3是顯示該工具程序為了接收和處理新補丁而一般執(zhí)行的步驟的流程圖。在步驟301,該工具程序接收一個補丁。在步驟301接收的補丁可以是一個數據驅動補丁或是一個代碼驅動補丁。下面的表格1內顯示了一個樣本數據驅動補丁。
1<Softpatch Patch=″Q382429″>
2 <AffectedApplication AffectedExe=″sqlservr.exe″>
3 <AffectedVersion Version=″9.*″>
4 <AffectedModules Name=″SQLSORT.DLL″>
5<Version″8.0.*, 9.*″>
6 <Function Name=″SsrpEnumCore″Address=″0x0802E76B″7 Param=″2″Paramtype=″LPSTR″>
8<Filter MaxByteLength=″60″/>
9<Resolution ActionType=″BOOL″Action=″FALSE″/>
10 </Function>
11 </Version>
12 <Version″10.*,11.*″>
13 <Function Name=″SsrpEnumCore″Address=″0x0802D283″14 Param=″2″Paramtype=″LPSTR″>
15 <Filter MaxByteLength=″128″ />
16 <Resolution ActionType=″BOOL″Action=″FALSE″/>
17 </Function>
18 </Version>
19 </AffectedModules>
20</AffectedVersion>
21 </AffectedApplication>
2223 <Signature Hash=″MD5″signature=″C509-64AA-9161-8C52-249F6D-BF5A-AEF2-ECE1-0038-34D1″/>
25 </Softpatch>
表格1行1包含一個該補丁唯一的標識符。行2標識了受該補丁影響的應用程序。行3標識了受該補丁影響的應用程序版本。行4標識了受該補丁影響的可執(zhí)行模塊。行5標識了兩個版本的受影響的可執(zhí)行模塊——版本8.0.*和9.*——它們提供了打補丁的方向。行6-10包含為這些兩個版本的可執(zhí)行模塊打補丁的方向。行6-7標識了要打補丁的函數、它在可執(zhí)行模塊內的地址、由補丁測試的它的參數和要測試參數的類型。行8指示了在行6-7標識的參數應被測試以確定是否其長度超過60字節(jié)。行9指示了如果測試成功,該函數的調用應該失敗。行12標示了兩個更多版本的受影響的可執(zhí)行模塊——版本10.*和11.*——它們提供了打補丁的方向。行13-17包含為這些兩個版本的可執(zhí)行模塊打補丁的方向。行13-14標識了要打補丁的函數、它在可執(zhí)行模塊內的地址、由補丁測試的它的參數和要測試參數的類型。可以看到,在行13-14內為版本10.*和11.*標識的可執(zhí)行模塊內要打補丁的函數地址不同于在行6-7內為版本8.0.*和9.*標識的的可執(zhí)行模塊內要打補丁的函數地址。行15指示了在行13-14內標識的參數應被測試以確定是否其長度超過128字節(jié)。行16指示了如果測試成功,該函數的調用應該失敗。該補丁可以指定各種結果處理動作類型,包括補丁函數調用失敗、出現異常、終止打補丁的可執(zhí)行模塊正被執(zhí)行的進程、或者糾正違規(guī)值(比如通過截短過長的串)。行23-25包含對該補丁的識別標志,該標志標識了補丁的源頭并校驗了從離開源頭開始該補丁未被改變。
下面的表格2包含一個以上表格1中顯示的補丁的代碼驅動版本。
1 00411A7E push 3Ch2 00411A80 moveax,dword ptr[str]3 00411A83 push eax4 00411A84 call ValidateStringLength(411082h)5 00411A89 addesp,86 00411A8C movzx ecx,al7 00411A8F test ecx,ecx8 00411A91 je 411A9Ah9 00411A93 jmpfoo+2(411AD2h)10 00411A9A xoreax,eax11 00411A9C ret表格2行1-3將用于測試函數的參數推到堆棧上。行4調用測試函數。行5-8將用于測試函數的返回代碼分支。如果測試函數成功,行9跳回開始執(zhí)行打補丁函數主體部分。如果測試函數失敗,行10-11推動失敗的結果代碼到堆棧上并從打補丁函數返回到要打補丁函數的本色(color)。為了易讀,表格2忽略了顯示在一些代碼驅動補丁內的某些細節(jié),包括用于測試補丁配置標記的當前值的可驗證的標志、指令,和從打補丁函數的代碼的開始重新定位的指令。
一些實施例中,所有類型的補丁可包含附加信息,包括,為要打補丁的可執(zhí)行模塊的一個或多個版本中每一個版本的可用于校驗可執(zhí)行模塊的特定情況是適合的該版本的副本的文件簽名。這種文件簽名可以是,例如,為整個可執(zhí)行模塊版本的大小或校驗和,或者可能發(fā)生在可執(zhí)行模塊內的特定點,比如在要打補丁的可執(zhí)行模塊的偏移量處,的代碼。
在步驟302,如果補丁帶有合法標志被標記,那么該工具程序繼續(xù)到步驟303,否則該工具程序繼續(xù)到步驟301以接收下一個補丁。在步驟303,該工具程序增加補丁到本地補丁表格。在步驟304,該工具程序使用補丁的初始配置,比如通過發(fā)送它到缺省配置。
圖4是顯示該工具程序使用的一個典型的樣本補丁表格的數據結構圖。補丁表格400包含行,比如行401和402,每個行分為以下列包含從補丁中提取的補丁標識符的補丁標識符列411;包含標識要打補丁的可執(zhí)行模塊信息,比如其名字的可執(zhí)行模塊列412;標識了列412內標識的、要應用補丁的所有版本的可執(zhí)行模塊的可執(zhí)行模塊版本列413;包含當前配置值的測試性能有效列414,所述當前配置值用于確定打補丁函數被調用時是否每次都執(zhí)行由補丁指定的測試;包含當前配置值的測試性能通知有效列415,所述當前配置值用于確定補丁測試執(zhí)行時,是否每次都產生通知;包含當前配置值的測試結果通知有效列416,所述當前配置值用于確定當補丁測試成功時,是否每次都產生通知;包含當前配置值的測試結果處理有效列417,所述當前配置值用于確定當補丁測試失敗時,是否要執(zhí)行補丁結果處理;和包含到該補丁自身的指針、指定了測試失敗時每次要執(zhí)行的測試和測試結果處理的補丁列418。一些實施例中,不是如所示包含一個指針,而是該補丁列418直接包括每個補丁。一個特定的補丁表格可包括或指向各種不同類型的補丁,比如所有的代碼驅動的補丁、所有數據驅動的補丁,或者代碼驅動和數據驅動補丁的結合。
在步驟305,一旦該工具程序已經將接收的補丁增加到補丁表格并且初始化了它的配置,該補丁可由該工具程序自動應用于可執(zhí)行模塊。在步驟305,該工具程序可以使用許多不同的方法來應用該補丁,包括由參考結合的應用中描述的那些,也包括實時函數調用攔截、和/或(1)已經加載的可執(zhí)行模塊、(2)可執(zhí)行模塊的一個或多個磁盤映像、或者(3)由操作系統(tǒng)的加載程序加載的可執(zhí)行模塊的情況的代碼重寫。步驟305之后,該工具程序繼續(xù)到步驟301以接收下一個補丁。
圖5是顯示該工具程序為了為特定補丁更新配置指令而一般執(zhí)行的步驟的流程圖。在步驟501,該工具程序為特定補丁接收配置指令,比如從一個管理員那里。一些實施例中,這種配置指令可由使用組方針的管理員產生。在步驟502,該工具程序參照接收的指令升級補丁表格內補丁的配置。步驟502之后,該工具程序繼續(xù)到步驟501以接收下一個配置指令。
圖6是顯示該工具程序為執(zhí)行由補丁指定的參數變量而一般執(zhí)行的步驟的流程圖。在步驟601,打補丁函數被調用。在步驟602,如果對影響被調用函數的補丁的測試是可行的,那么該工具程序繼續(xù)到步驟603,否則該工具程序繼續(xù)到步驟601以處理下一個對打補丁函數的調用。在步驟603,如果對該補丁的測試性能通知可以有效,那么該工具程序繼續(xù)到步驟604,否則該工具程序繼續(xù)到步驟605。在步驟604,該工具程序產生一個執(zhí)行測試的通知。步驟604、608和610可以在該測試滿意的目標計算機系統(tǒng)上顯示或存儲一個指示,和/或傳送這種指示到一個遠程計算機系統(tǒng)用于在那里顯示或記錄。
在步驟605,該工具程序執(zhí)行由補丁指定的確認測試。一些實施例中,步驟605包括調用由該工具程序為測試所用的一組標準例程的其中一個。在步驟606,如果在步驟605執(zhí)行的測試令人滿意,那么該工具程序繼續(xù)到步驟601,否則該工具程序繼續(xù)到步驟607。在步驟607,如果為該補丁的測試結果通知無效,那么該工具程序繼續(xù)到步驟608,否則該工具程序繼續(xù)到步驟609。在步驟608,該工具程序產生一個測試不令人滿意的通知。在步驟609,如果測試結果處理對于補丁有效,那么該工具程序繼續(xù)到步驟610,否則,該工具程序繼續(xù)到步驟601。在步驟610,該工具程序執(zhí)行由補丁指定的測試結果處理。步驟610之后,該工具程序繼續(xù)到步驟601。
本領域的技術人員應該意識到,以上描述的程序可以直接應用或以不同的方式擴展。例如,可以以不同方式在為不同目的的不同類型的可執(zhí)行模塊的不同位置使用該工具程序來應用各種不同類型的補丁。同樣地,盡管這里描述的補丁是作為包含當值確認測試失敗時來為其指示一個問題的,但該工具程序也可以用當值確認測試成功時來為其指示一個問題的值確認來實現。一些實施例中,每個測試伴隨一個是成功還是失敗指示問題的一個指示。盡管前面的描述作為首選的實施例而參考,然而本發(fā)明的范圍僅僅以下面的權利要求和這里敘述的元件來定義。
權利要求
1.計算系統(tǒng)內的一種方法,包括在計算系統(tǒng)內接收一個鑒別的補丁包用于修改安裝程序的狀態(tài);自動從該鑒別的補丁包中提取(1)補丁應用信息,識別補丁要對其應用該補丁的已鑒別程序的鑒別部分,和(2)補丁狀態(tài)信息,指定了一種修改已鑒別程序的鑒別部分的狀態(tài)的方式;和自動增加鑒別的條目到補丁表格,該鑒別的條目包含提取的補丁應用信息和補丁狀態(tài)信息。
2.如權利要求1所述的方法,進一步包含使用鑒別條目的內容來修改已鑒別程序的鑒別部分的狀態(tài)。
3.如權利要求2所述的方法,其特征在于,當沒有管理用戶登錄計算系統(tǒng)時,鑒別條目的內容被用于修改已鑒別程序的鑒別部分的狀態(tài)。
4.如權利要求2所述的方法,其特征在于,不基于任何用戶許可,鑒別條目的內容被用于修改已鑒別程序的鑒別部分的狀態(tài)。
5.如權利要求2所述的方法,其特征在于,無需確定已鑒別程序被持久存儲的位置,鑒別條目的內容就被用于修改已鑒別程序的鑒別部分的狀態(tài)。
6.如權利要求2所述的方法,其特征在于,鑒別條目的內容被用于修改已鑒別程序的鑒別部分來作為對已鑒別程序加載的響應。
7.如權利要求2所述的方法,其特征在于,鑒別條目的內容被用于修改已鑒別程序的鑒別部分來作為對已鑒別程序的鑒別部分的執(zhí)行的響應。
8.如權利要求2所述的方法,其特征在于,被加載的已鑒別程序的兩種情況,和鑒別條目的內容被用于修改已鑒別程序的所有情況的鑒別部分的狀態(tài)。
9.如權利要求1所述的方法,進一步包括當補丁應用信息被提取時,確定已鑒別程序是否被加載在計算系統(tǒng)內;并且如果已鑒別程序被加載在計算系統(tǒng)內,使用提取的補丁應用信息參照補丁狀態(tài)信息來修改加載的已鑒別程序的狀態(tài)。
10.如權利要求1所述的方法,進一步包括,從補丁表格中刪除鑒別條目以阻止已鑒別程序的鑒別部分的狀態(tài)被參照包含在鑒別條目中的補丁狀態(tài)信息而被修改。
11.如權利要求1所述的方法,其特征在于,提取的補丁狀態(tài)信息指定了修改已鑒別程序的鑒別部分來執(zhí)行值確認。
12.如權利要求1所述的方法,其特征在于,提取的補丁狀態(tài)信息指定了修改已鑒別程序的鑒別部分來執(zhí)行參數確認。
13.如權利要求1所述的方法,其特征在于,提取的補丁狀態(tài)信息指定了修改已鑒別程序的鑒別部分來執(zhí)行從文件中讀取的值的確認。
14.如權利要求1所述的方法,其特征在于,提取的補丁狀態(tài)信息指定修改已鑒別程序的鑒別部分來執(zhí)行由用戶輸入的值的確認。
15.如權利要求1所述的方法,其特征在于,提取的補丁狀態(tài)信息指定修改已鑒別程序的鑒別部分來執(zhí)行在一個或多個網絡分組中接收的值的確認。
16.如權利要求1所述的方法,其特征在于,提取的補丁狀態(tài)信息通過調用鑒別確認函數指定了修改已鑒別程序的鑒別部分的狀態(tài)來執(zhí)行參數確認。
17.如權利要求16所述的方法,其特征在于,補丁表格內的條目而非鑒別條目也包括通過調用鑒別確認函數來指定修改已鑒別程序的鑒別部分的狀態(tài)來執(zhí)行參數確認。
18.如權利要求16所述的方法,進一步包括,為鑒別確認函數的執(zhí)行代碼以修改已鑒別程序的鑒別部分的狀態(tài),已鑒別的代碼不包括在鑒別的補丁包內。
19.一個計算機可讀的介質,其內容導致計算系統(tǒng)執(zhí)行一種方法,該方法包括在計算系統(tǒng)內接收一個鑒別的補丁包用于修改可編程實體的狀態(tài);自動從鑒別的補丁包中提取(1)補丁應用信息,識別要對其應用該補丁的已鑒別可編程實體,和(2)補丁狀態(tài)信息,確定一種修改已鑒別可編程實體的狀態(tài)的方式;和自動增加鑒別的條目到補丁表格,該鑒別的條目包含提取的補丁應用信息和補丁狀態(tài)信息。
20.如權利要求19所述的計算機可讀介質,其特征在于,鑒別的可編程實體有多個狀態(tài),其中只有補丁狀態(tài)信息指定了的一個適合的狀態(tài)子集才修改,并且其中接收的鑒別補丁包沒有包含有關補丁狀態(tài)信息未指定修改的已鑒別可編程實體的狀態(tài)的信息。
21.一個或多個共同存儲補丁表格數據結構的計算機存儲器,包含多個補丁條目,每個補丁條目包括補丁應用信息,識別補丁要對其應用該補丁的已鑒別的可編程實體的鑒別部分;和補丁狀態(tài)信息,指定修改已鑒別可編程實體的鑒別部分的狀態(tài)的一種方式,這樣,對一個特定的補丁實體來說,該補丁實體的內容可以以所指定的方式用于修改已鑒別可編程實體的可鑒別部分的狀態(tài)。
22.如權利要求21所述的計算機存儲器,其特征在于,補丁應用信息識別了一個與可編程實體相關的可執(zhí)行模塊。
23.如權利要求22所述的計算機存儲器,其特征在于,補丁應用信息識別了一個在識別的可執(zhí)行模塊中的位置。
24.如權利要求23所述的計算機存儲器,其特征在于,補丁應用信息進一步識別希望在識別的可執(zhí)行模塊內識別的位置的內容。
25.如權利要求21所述的計算機存儲器,其特征在于,選擇的補丁條目包括多個補丁應用信息情況,每個情況識別不同版本的已鑒別可編程實體的鑒別部分。
26.如權利要求25所述的計算機存儲器,其特征在于補丁應用信息情況的第一種情況是識別其中已經應用一個選擇的熱修補的一個已鑒別可編程實體的版本,而補丁應用信息情況的第二種情況是識別其中未應用所選擇的熱修補的一個已鑒別可編程實體的版本。
27.如權利要求26所述的方法,其特征在于,選擇的補丁條目可以應用于(1)選擇的熱修補已經應用的已鑒別可編程實體的版本,(2)選擇的熱修補未應用的已鑒別可編程實體的版本,或(3)兩者都有,但沒有用選擇的熱修補未應用的已鑒別可編程實體的版本來取代選擇的熱修補已經應用的已鑒別可編程實體的版本,而且沒有用選擇的熱修補已經應用的已鑒別可編程實體的版本來取代選擇的熱修補未應用的已鑒別可編程實體的版本。
28.如權利要求24所述的方法,其特征在于,選擇的補丁條目可被管理員配置到一個目標計算機系統(tǒng)而無需考慮哪個版本的已鑒別可編程實體在目標計算機系統(tǒng)上執(zhí)行。
29.如權利要求21所述的計算機存儲器,其特征在于,選擇的補丁條目的補丁狀態(tài)信息包含對修改已鑒別的可編程實體的鑒別部分的狀態(tài)有用的代碼。
30.如權利要求21所述的計算機存儲器,其特征在于,選擇的補丁條目的補丁狀態(tài)信息包含對修改已鑒別的可編程實體的鑒別部分的狀態(tài)有用的數據。
31.如權利要求21所述的計算機存儲器,其特征在于,選擇的補丁條目的補丁狀態(tài)信息指定了對應用于與已鑒別的可編程實體有關的指定參數的參數變量測試。
32.如權利要求21所述的計算機存儲器,其特征在于,存儲在補丁表格數據結構內的計算機存儲器的特性是可配置的。
33.如權利要求21所述的計算機存儲器,其特征在于,計算機存儲器直接連接到應用一個或多個補丁條目的計算機系統(tǒng)。
34.如權利要求21所述的計算機存儲器,其特征在于,計算機存儲器直接連接到沒有應用任何補丁條目的計算機系統(tǒng)。
35.一個自動實現接收的代碼補丁的計算系統(tǒng),包括一個預先安裝的幫助函數的庫;和一個接收代碼補丁的打補丁代理,每個代碼補丁對應一組可執(zhí)行模塊并識別庫中的幫助函數,并且,當接收代碼補丁對應的一組中的一個可執(zhí)行模塊被執(zhí)行時,調用由對應于包含該可執(zhí)行模塊的可執(zhí)行模塊組的代碼補丁所識別的幫助函數以執(zhí)行值確認呢。
36.如權利要求35所述的計算系統(tǒng),其特征在于,打補丁代理包括一個庫維持子系統(tǒng),用于接收新參數確認函數并自動將接收的新參數確認函數增加到該庫,這樣這些新的主要的確認函數可參照識別它們的代碼補丁被調用。
37.一種在計算系統(tǒng)內用于自動應用軟件補丁的方法,包括在計算系統(tǒng)內接收用于修改可編程實體的狀態(tài)的補丁,該補丁(1)指定一種修改可編程實體狀態(tài)的方式,和(2)為多個版本的可編程實體的每一個版本,(a)識別可編程實體的版本,(b)在可編程實體的版本內確定一個位置以用指定的方式修改可編程實體的狀態(tài),和(c)在可編程實體的狀態(tài)被修改之前,識別希望存在于可編程實體版本內指定位置的代碼;自動確定該補丁所識別的可編程實體的版本中的可編程實體的可鑒別版本是否安裝在所述計算系統(tǒng)上;并且僅當為可編程實體的可鑒別版本所指定的位置包含希望存在于指定位置的識別代碼時,參照該補丁在為可編程實體的鑒別版本指定的位置上修改可編程實體的狀態(tài)。
38.一種計算機可讀介質,其內容導致計算系統(tǒng)為自動應用軟件補丁而執(zhí)行一種方法,所述方法包括在計算系統(tǒng)內存儲一個補丁用于修改可編程實體的狀態(tài),該補丁(1)指定修改可編程實體狀態(tài)的方式,并且(2)為多個版本的可編程實體的每個版本,(a)標識可編程實體的版本,(b)在可編程實體版本內指定一個位置以用指定的方式修改可編程實體的狀態(tài),并(c)在可編程實體的狀態(tài)被修改之前,標識希望存儲在可編程實體的版本內的指定位置上的代碼;自動確定該補丁所識別的可編程實體的版本中的可編程實體的可鑒別版本是否安裝在所述計算系統(tǒng)上;和僅當為可編程實體的鑒別版本指定的位置包含希望存儲在指定位置的代碼時,參照該補丁在為可編程實體的鑒別版本指定的位置修改可編程實體的狀態(tài)。
全文摘要
這里描述了一個用于自動處理軟件補丁的工具程序。該工具程序在計算系統(tǒng)內接收鑒別的補丁包用于修改可編程實體的狀態(tài)。該工具程序自動從所鑒別的補丁包中提取(1)標識要應用該補丁的已鑒別可編程實體的補丁應用信息,和(2)指定用于修改已鑒別的可編程實體狀態(tài)方式的補丁狀態(tài)信息。該工具程序自動將一個包含提取的補丁應用信息和補丁狀態(tài)信息的已鑒別的條目增加到補丁表格。
文檔編號G06F11/36GK1696911SQ20051006507
公開日2005年11月16日 申請日期2005年4月8日 優(yōu)先權日2004年5月11日
發(fā)明者A·布魯姆菲爾德, G·古蘭, J·加姆斯, S·A·阿爾施巴尼, S·A·菲爾德 申請人:微軟公司