国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      有效地打補(bǔ)丁的制作方法

      文檔序號:6546100閱讀:203來源:國知局
      專利名稱:有效地打補(bǔ)丁的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及到升級已安裝的計(jì)算機(jī)程序的操作領(lǐng)域。
      背景技術(shù)
      打補(bǔ)丁是修改已經(jīng)安裝的程序,包括應(yīng)用程序、實(shí)用程序、操作系統(tǒng)和操作系統(tǒng)部件、設(shè)備驅(qū)動(dòng)程序等等的過程。打補(bǔ)丁對于出于各種目的來修改程序是有用的,這些目的包括糾正程序錯(cuò)誤、減少或消除安全風(fēng)險(xiǎn)或者提高所修改程序使用的邏輯。打補(bǔ)丁一般是由最初提供要打補(bǔ)丁的程序的公司或其它組織發(fā)起的。
      安裝的程序主要是由可執(zhí)行代碼模塊組成的。作為一個(gè)例子,許多設(shè)計(jì)成在來自Washington Redmond的Microsoft Corp.的WINDOWS XP操作系統(tǒng)上執(zhí)行的程序主要是由叫做“DLL”的可執(zhí)行代碼模塊組成的。一個(gè)打補(bǔ)丁的流行的傳統(tǒng)方法是要在組成要打補(bǔ)丁的安裝程序的可執(zhí)行代碼模塊中標(biāo)識出含有希望用補(bǔ)丁來修改的程序代碼的可執(zhí)行代碼模塊;創(chuàng)建一個(gè)新版本的已標(biāo)識的可執(zhí)行代碼模塊,在其中已作了需要的修改;并且將新版本的已標(biāo)識的可執(zhí)行代碼模塊與安裝程序一起分配給希望應(yīng)用該補(bǔ)丁的用戶。然后每個(gè)用戶確定她/他是否希望應(yīng)用這個(gè)補(bǔ)丁,如果是,執(zhí)行用新版本的已標(biāo)識的可執(zhí)行代碼模塊取代原來版本的已標(biāo)識的可執(zhí)行代碼模塊的安裝程序。
      傳統(tǒng)的用于打補(bǔ)丁的方法有很多非常不利的地方。這些不利經(jīng)常增加了與接收和應(yīng)用補(bǔ)丁有關(guān)的負(fù)擔(dān)。一些情況下,這種增加的負(fù)擔(dān)延遲了一些用戶對一些補(bǔ)丁的應(yīng)用,而且甚至阻止了一些用戶對一些補(bǔ)丁的應(yīng)用。補(bǔ)丁應(yīng)用中的這種延遲和阻礙在一些情況下可能對用戶有嚴(yán)重的負(fù)面效果,對那些設(shè)計(jì)成減少或消除安全風(fēng)險(xiǎn)的補(bǔ)丁來說尤其如此。
      傳統(tǒng)的用于打補(bǔ)丁的方法的一個(gè)缺陷涉及到必須創(chuàng)建多個(gè)補(bǔ)丁進(jìn)行分配以實(shí)現(xiàn)對單個(gè)程序的單獨(dú)修改的常例。一些情況下,要打補(bǔ)丁的程序有幾個(gè)不同的特定可執(zhí)行代碼模塊的“環(huán)境(flavor)”,比如程序被設(shè)計(jì)成可在其上執(zhí)行的每個(gè)操作系統(tǒng)或操作系統(tǒng)版本,和/或程序的每個(gè)自然語言版本的不同環(huán)境。這里標(biāo)識的可執(zhí)行代碼模塊是這樣的一種可執(zhí)行代碼模塊以上描述的補(bǔ)丁的創(chuàng)建和分配過程必須為已標(biāo)識的可執(zhí)行代碼模塊的每個(gè)環(huán)境而重復(fù)。然后用戶必須選擇并應(yīng)用已標(biāo)識的可執(zhí)行代碼模塊的適當(dāng)環(huán)境的補(bǔ)丁。對大量結(jié)果補(bǔ)丁進(jìn)行分類并選擇在每個(gè)用戶的計(jì)算機(jī)系統(tǒng)上適合的一組補(bǔ)丁來應(yīng)用是非常繁重的,如此之多以至于這種情況有時(shí)被叫做“補(bǔ)丁地獄(patch hell)”。一些情況下,管理員必須維持一個(gè)標(biāo)識了安裝在每個(gè)目標(biāo)系統(tǒng)上的一組可執(zhí)行模塊版本的目錄數(shù)據(jù)庫,它用于為每個(gè)目標(biāo)系統(tǒng)選擇適當(dāng)?shù)某R?guī)補(bǔ)丁。
      傳統(tǒng)的用于打補(bǔ)丁的方法的另一個(gè)缺陷涉及到分配的補(bǔ)丁的較大的尺寸。這對于有以兆比特級大小的可執(zhí)行代碼模塊來說,并非罕見,這會導(dǎo)致單個(gè)補(bǔ)丁有一個(gè)可比較的大小,使得它對一些用戶來說難以分配和存儲,或者甚至不可能分配或存儲。這個(gè)問題對具有多個(gè)環(huán)境的補(bǔ)丁來說更要加倍嚴(yán)重。進(jìn)一步說,因?yàn)槊總€(gè)常規(guī)補(bǔ)丁一般包括一個(gè)完整的可替代的可執(zhí)行模塊,應(yīng)用常規(guī)補(bǔ)丁會產(chǎn)生代碼攪拌(code churn)的問題。
      傳統(tǒng)的打補(bǔ)丁的方法的一個(gè)進(jìn)一步的缺陷涉及到一些用戶在應(yīng)用補(bǔ)丁到生產(chǎn)計(jì)算機(jī)系統(tǒng)之前要對其進(jìn)行測試的需要。一些情況下,在計(jì)算機(jī)系統(tǒng)上安裝一個(gè)補(bǔ)丁可能會有相反的結(jié)果,比如補(bǔ)丁中包含的新版本的標(biāo)識的可執(zhí)行代碼模塊產(chǎn)生一個(gè)新的程序錯(cuò)誤的情況,或與在與補(bǔ)丁應(yīng)用相對的計(jì)算機(jī)上運(yùn)行的另一個(gè)程序之間產(chǎn)生新的、不可預(yù)料的相互作用的情況。因此,經(jīng)常在生產(chǎn)系統(tǒng)上應(yīng)用一個(gè)補(bǔ)丁之前,用戶首先對一個(gè)測試系統(tǒng)應(yīng)用該補(bǔ)丁以估計(jì)該補(bǔ)丁應(yīng)用在生產(chǎn)系統(tǒng)中是否安全,該生產(chǎn)系統(tǒng)的數(shù)據(jù)和操作的維持是重要的。這種獨(dú)立的補(bǔ)丁測試增加了與打補(bǔ)丁有關(guān)的負(fù)擔(dān)。此外,在常規(guī)補(bǔ)丁產(chǎn)生問題的情況下——比如應(yīng)用程序兼容性問題或新的開發(fā)弱點(diǎn)——在應(yīng)用補(bǔ)丁充分長的時(shí)間后,這種問題很難追溯到該補(bǔ)丁。
      傳統(tǒng)的用于打補(bǔ)丁的方法的一個(gè)附加的缺陷涉及到補(bǔ)丁內(nèi)包括的安裝程序的運(yùn)行。經(jīng)常地,為了取代為執(zhí)行程序的一部分的可執(zhí)行代碼模塊,該安裝程序必須首先終止那個(gè)程序的執(zhí)行。同樣地,一些情況下,這種取代在沒有重新啟動(dòng)計(jì)算機(jī)系統(tǒng)的情況下不能完成。所有這些步驟會在打補(bǔ)丁的計(jì)算機(jī)系統(tǒng)的使用中導(dǎo)致實(shí)質(zhì)的中斷。
      傳統(tǒng)的用于打補(bǔ)丁的方法的另一個(gè)缺陷包括試圖修補(bǔ)一個(gè)可執(zhí)行模塊,其中已經(jīng)為那個(gè)可執(zhí)行模塊更早地發(fā)布“專用修補(bǔ)”,也叫做“熱修補(bǔ)”給該可執(zhí)行模塊的適合的用戶子集。這樣的情況下,因?yàn)樵谙蚋鶕?jù)用戶是否已經(jīng)應(yīng)用熱修補(bǔ)的每個(gè)用戶來分配取代不同新版本的可執(zhí)行代碼模塊的常規(guī)補(bǔ)丁過程中遇到的困難,通常代之以分配一個(gè)取代單個(gè)新版本的可執(zhí)行模塊的簡單的常規(guī)補(bǔ)丁,而不考慮用戶是否已經(jīng)應(yīng)用熱修補(bǔ)。如果那個(gè)新版本包含熱修補(bǔ),該補(bǔ)丁就向用戶強(qiáng)加上熱修補(bǔ),而不是接收該熱修補(bǔ)。另一方面,如果那個(gè)新版本沒有包含熱修補(bǔ),它就剝奪了用戶想要接收熱修補(bǔ)的權(quán)利。
      傳統(tǒng)的用于打補(bǔ)丁的方法另一個(gè)缺陷包括對依靠特定可執(zhí)行模塊,比如一個(gè)特定動(dòng)態(tài)鏈接庫的軟件產(chǎn)品的安裝程序經(jīng)常通過將該可執(zhí)行模塊存儲在目標(biāo)計(jì)算機(jī)系統(tǒng)的文件系統(tǒng)內(nèi)的一個(gè)非標(biāo)準(zhǔn)位置來“隱藏”那個(gè)可執(zhí)行模塊這一事實(shí)。因此,有時(shí)候確定特定的目標(biāo)系統(tǒng)是否包含一個(gè)需要打補(bǔ)丁的可執(zhí)行模塊的副本是困難的或不可能的,并且,同樣,也很難確定它位于目標(biāo)計(jì)算機(jī)系統(tǒng)的文件系統(tǒng)內(nèi)的哪個(gè)位置。同樣地,一些軟件產(chǎn)品維持已經(jīng)由安裝程序安裝的可執(zhí)行模塊版本的一個(gè)“目錄”。軟件產(chǎn)品可以依靠特定的可執(zhí)行模塊版本的目錄中指示的正確性。常規(guī)補(bǔ)丁在沒有更新該目錄而用可執(zhí)行模塊的新版本取代標(biāo)識的可執(zhí)行模塊版本的情況下,這種依靠就會失敗了。
      傳統(tǒng)的用于打補(bǔ)丁的方法的另一個(gè)缺陷根源于在要打補(bǔ)丁的可執(zhí)行模塊被安裝在目標(biāo)計(jì)算機(jī)系統(tǒng)中之前的時(shí)間應(yīng)用它們是不可能的這一事實(shí)。因此,如果要打補(bǔ)丁的可執(zhí)行模塊是在接收那個(gè)可執(zhí)行模塊的常規(guī)補(bǔ)丁之后才被安裝到目標(biāo)計(jì)算機(jī)系統(tǒng)中,該補(bǔ)丁被應(yīng)用于該可執(zhí)行模塊是不可能的。
      傳統(tǒng)的用于打補(bǔ)丁的方法的另一個(gè)缺陷是它們典型地只能由使用具有自由的修改許可的管理賬戶登錄到目標(biāo)計(jì)算機(jī)系統(tǒng)的用戶來應(yīng)用。為此目的而登錄一個(gè)管理賬戶會使該目標(biāo)計(jì)算機(jī)系統(tǒng)易受存在于目標(biāo)計(jì)算機(jī)系統(tǒng)上尋求修改該目標(biāo)計(jì)算機(jī)系統(tǒng)并需要自由的修改許可的病毒的攻擊。
      傳統(tǒng)的用于打補(bǔ)丁的方法的另一個(gè)缺陷是常規(guī)補(bǔ)丁很難或不可能失效,這需要比如倒轉(zhuǎn)可執(zhí)行模塊的取代步驟,或者倒轉(zhuǎn)一個(gè)或多個(gè)對系統(tǒng)注冊表的修改的步驟。
      因此,一個(gè)克服了以上討論的傳統(tǒng)的打補(bǔ)丁方法的一些或所有缺陷方面的新的打補(bǔ)丁的方法具有重要的實(shí)用性。
      附圖簡述

      圖1說明了一個(gè)適合的工具程序(facility)可在其中實(shí)現(xiàn)的計(jì)算系統(tǒng)環(huán)境的一個(gè)例子。
      圖2是顯示一個(gè)典型的參照該工具程序的計(jì)算機(jī)系統(tǒng)間數(shù)據(jù)交換的流程圖。
      圖3是顯示由該工具程序?yàn)榻邮詹⑻幚硇卵a(bǔ)丁一般執(zhí)行的步驟的流程圖。
      圖4是顯示由該工具程序使用的典型的樣本補(bǔ)丁表格的數(shù)據(jù)結(jié)構(gòu)圖表。
      圖5是顯示由該工具程序?yàn)楦乱粋€(gè)為特定補(bǔ)丁的配置指令而一般執(zhí)行的步驟的流程圖。
      圖6是顯示由該工具程序?yàn)橥瓿梢粋€(gè)由補(bǔ)丁指定的參數(shù)確認(rèn)而一般執(zhí)行的步驟的流程圖。
      具體實(shí)施例方式
      提供了一個(gè)用于為安裝的計(jì)算機(jī)程序代碼(“該工具程序”)打補(bǔ)丁的軟件程序。一些實(shí)施例中,該工具程序增加了參數(shù)測試和對安裝函數(shù)的測試結(jié)果處理。另一些實(shí)施例中,該工具程序?yàn)榘惭b函數(shù)增加不同的其他類型的泛函性(functionality),一些情況下是在安裝函數(shù)的執(zhí)行流程中的任意位置。
      一些實(shí)施例中,對每個(gè)補(bǔ)丁而言,該工具程序向每個(gè)要打補(bǔ)丁的計(jì)算機(jī)系統(tǒng)——即每個(gè)“目標(biāo)計(jì)算機(jī)系統(tǒng)”分配可以執(zhí)行測試的一個(gè)點(diǎn)的說明、要執(zhí)行測試的特性和怎樣動(dòng)作以回應(yīng)一個(gè)或多個(gè)不同的測試結(jié)果。一些實(shí)施例中,該工具程序提供了一組標(biāo)準(zhǔn)的參數(shù)確認(rèn)和可在補(bǔ)丁中被指定的其它測試。例如,補(bǔ)丁可以指定對于一個(gè)特定的函數(shù),如果該函數(shù)的特定參數(shù)沒有一個(gè)確定的值,那該函數(shù)的調(diào)用應(yīng)該在它實(shí)質(zhì)的執(zhí)行開始之前會失敗。另一個(gè)補(bǔ)丁可以指定對于一個(gè)特定的函數(shù),如果特定的參數(shù)長度超過指定的最大長度值,那該參數(shù)應(yīng)該在該函數(shù)的執(zhí)行被允許繼續(xù)進(jìn)行之前被截短到指定的最大長度。許多依賴于調(diào)用帶有參數(shù)值的函數(shù)的安全開發(fā),當(dāng)它們在沒有原有函數(shù)代碼的版本內(nèi)被阻塞時(shí),會導(dǎo)致該函數(shù)創(chuàng)建或利用不安全的環(huán)境。一些情況下,這種開發(fā)可通過使用這種補(bǔ)丁來阻止帶有這種參數(shù)值的函數(shù)執(zhí)行而被阻止。一些實(shí)施例中,補(bǔ)丁指定了例如從文件中讀取或由用戶輸入的值的測試,而不是對函數(shù)參數(shù)進(jìn)行測試。
      一些實(shí)施例中,一個(gè)自動(dòng)打補(bǔ)丁代理自動(dòng)接收每個(gè)補(bǔ)丁,確認(rèn)它,并將它們存儲在補(bǔ)丁表格內(nèi)用于可能的應(yīng)用程序。一些實(shí)施例中,每個(gè)補(bǔ)丁被應(yīng)用于要打補(bǔ)丁的可執(zhí)行模塊的任何情況下,當(dāng)接收到補(bǔ)丁時(shí),該模塊已經(jīng)被加載在目標(biāo)計(jì)算機(jī)系統(tǒng)中上。這里該方法稱作為“熱修補(bǔ)”,并且使得補(bǔ)丁一被接收立刻就有效,并且不要求該工具程序能夠確定要打補(bǔ)丁的可執(zhí)行模塊存儲在磁盤的哪個(gè)地方。一些實(shí)施例中,每個(gè)接收的補(bǔ)丁應(yīng)用于要打補(bǔ)丁的可執(zhí)行模塊的磁盤映像,這樣,當(dāng)磁盤映像在未來時(shí)間被加載時(shí),加載的磁盤映像包括該補(bǔ)丁。這里該方法是指“冷修補(bǔ)”,允許補(bǔ)丁跨越多個(gè)會話的是持久的。一些實(shí)施例中,該工具程序執(zhí)行熱修補(bǔ)和冷修補(bǔ)。一些實(shí)施例中,每次要打補(bǔ)丁的可執(zhí)行模塊被操作系統(tǒng)加載者加載時(shí),就將每個(gè)補(bǔ)丁應(yīng)用于要打補(bǔ)丁的可執(zhí)行模塊。這里該方法是指“加載時(shí)間補(bǔ)丁”。一些實(shí)施例中,每次要打補(bǔ)丁的函數(shù)被調(diào)用時(shí),就將每個(gè)補(bǔ)丁應(yīng)用于要打補(bǔ)丁的可執(zhí)行模塊。這里該方法是指“調(diào)用截取補(bǔ)丁”。加載時(shí)間補(bǔ)丁和調(diào)用截取補(bǔ)丁都(1)不要求該工具程序能夠確定要打補(bǔ)丁的可執(zhí)行模塊存儲在磁盤的哪個(gè)地方,(2)方便了特定補(bǔ)丁的有準(zhǔn)備的可逆性,并且(3)不要求對可執(zhí)行模塊的磁盤映像的修改。
      一些實(shí)施例中,該工具程序允許用戶或管理員配置已被應(yīng)用的補(bǔ)丁的運(yùn)行。作為例子,這種配置可以包括,對一個(gè)特定的已應(yīng)用的補(bǔ)丁由該補(bǔ)丁指定的測試在執(zhí)行到達(dá)為該補(bǔ)丁指定的點(diǎn)時(shí)是否被執(zhí)行;由該補(bǔ)丁指定的測試結(jié)果處理是被執(zhí)行還是被忽略;和/或是否測試的性能和/或其結(jié)果被記錄、顯示在警告消息中等等。這些實(shí)施例中,該工具程序允許通過最初使登陸有效并使結(jié)果處理無效而在生產(chǎn)計(jì)算機(jī)系統(tǒng)上測試補(bǔ)丁。這些實(shí)施例中,該工具程序進(jìn)一步允許在補(bǔ)丁結(jié)果處理之后,將該補(bǔ)丁記錄在“詳細(xì)(verbose)的模式”中來幫助標(biāo)識該補(bǔ)丁產(chǎn)生問題的情況,比如應(yīng)用程序兼容性問題或其它IT問題。如果發(fā)現(xiàn)補(bǔ)丁產(chǎn)生問題之后,這些實(shí)施例也允許該補(bǔ)丁在應(yīng)用之后迅速失效。該工具程序的一些實(shí)施例也允許通過簡單地從接收并存儲在目標(biāo)計(jì)算機(jī)系統(tǒng)中的一組補(bǔ)丁中刪除該補(bǔ)丁而迅速失效。
      一些實(shí)施例中,該工具程序使用“數(shù)據(jù)驅(qū)動(dòng)”補(bǔ)丁方法,其中補(bǔ)丁不包含代碼,而包含數(shù)據(jù),比如指定了執(zhí)行測試的點(diǎn)、要執(zhí)行的測試的特性和怎樣動(dòng)作作為對一個(gè)或多個(gè)不同測試結(jié)果的響應(yīng)的一段小的人類可讀的文本或XML文檔。這樣的實(shí)施例中,打補(bǔ)丁代理接收數(shù)據(jù)驅(qū)動(dòng)補(bǔ)丁,并且附加由補(bǔ)丁指定的測試和測試處理。一些實(shí)施例中,該工具程序使用“代碼驅(qū)動(dòng)”打補(bǔ)丁方法,其中每個(gè)補(bǔ)丁包含附加在要打補(bǔ)丁的可執(zhí)行模塊上的短程序,該短程序通過調(diào)用該工具程序的標(biāo)準(zhǔn)參數(shù)測試函數(shù)來自行執(zhí)行測試,并且自行執(zhí)行測試處理。使用數(shù)據(jù)驅(qū)動(dòng)補(bǔ)丁或代碼驅(qū)動(dòng)補(bǔ)丁,用單個(gè)補(bǔ)丁來處理要打補(bǔ)丁的可執(zhí)行模塊的所有環(huán)境有時(shí)候是可能的。
      一些實(shí)施例中,該工具程序標(biāo)記每個(gè)補(bǔ)丁來證明(1)該補(bǔ)丁來源于一個(gè)批準(zhǔn)的源頭,并且(2)該補(bǔ)丁的內(nèi)容從批準(zhǔn)源頭創(chuàng)建補(bǔ)丁開始就未被修改。
      一些實(shí)施例中,該工具程序分配每個(gè)補(bǔ)丁給每個(gè)目標(biāo)計(jì)算機(jī)系統(tǒng),而且目標(biāo)計(jì)算機(jī)系統(tǒng)上的打補(bǔ)丁代理基于目標(biāo)計(jì)算機(jī)系統(tǒng)的特征自動(dòng)確定哪個(gè)補(bǔ)丁將在目標(biāo)計(jì)算機(jī)系統(tǒng)上應(yīng)用和它們怎樣被應(yīng)用。這減輕了用戶和管理員的許多傳統(tǒng)的與選擇和應(yīng)用補(bǔ)丁有關(guān)的負(fù)擔(dān),以及維持一個(gè)正確的、當(dāng)前的目錄數(shù)據(jù)庫的負(fù)擔(dān)。例如,這些特征可以包括哪個(gè)版本的要打補(bǔ)丁的可執(zhí)行模塊被安裝在目標(biāo)計(jì)算機(jī)系統(tǒng)上。這些實(shí)施例中,該工具程序可以通過分配為特定可執(zhí)行模塊的熱修補(bǔ)和未熱修補(bǔ)的環(huán)境指定了不同處理的補(bǔ)丁、為那個(gè)可執(zhí)行模塊打補(bǔ)丁時(shí)消除為特定可執(zhí)行模塊犧牲熱修補(bǔ)或使得熱修補(bǔ)普遍存在的需要來克服由熱修補(bǔ)所導(dǎo)致的該類型的問題。
      一些實(shí)施例中,打補(bǔ)丁代理將每個(gè)接收的補(bǔ)丁存儲在目標(biāo)系統(tǒng)中,而不考慮當(dāng)該補(bǔ)丁被接收時(shí),要由特定補(bǔ)丁打補(bǔ)丁的可執(zhí)行模塊是否被安裝在目標(biāo)系統(tǒng)上。因?yàn)樵谠S多情況下,該工具程序應(yīng)用補(bǔ)丁作為對加載要打補(bǔ)丁的可執(zhí)行模塊或調(diào)用要打補(bǔ)丁的函數(shù)的響應(yīng),該工具程序可以對在接收補(bǔ)丁到目標(biāo)系統(tǒng)之后安裝在目標(biāo)系統(tǒng)上的可執(zhí)行模塊應(yīng)用一個(gè)補(bǔ)丁。同樣地,補(bǔ)丁可以在要打補(bǔ)丁的可執(zhí)行模塊卸載和其后的重新安裝中繼續(xù)存在。
      一些實(shí)施例中,打補(bǔ)丁代理在操作系統(tǒng)服務(wù)中實(shí)現(xiàn)。這些實(shí)施例中,工具程序符合打補(bǔ)丁代理應(yīng)用補(bǔ)丁所需要的任何許可。這些實(shí)施例減少了當(dāng)常規(guī)補(bǔ)丁被應(yīng)用時(shí)通常強(qiáng)加的安全風(fēng)險(xiǎn),因?yàn)樗鼈兿擞脩羰褂镁哂泻軐捫薷脑S可的管理賬戶登錄目標(biāo)計(jì)算機(jī)系統(tǒng)的任何要求,上述要求會給目標(biāo)計(jì)算機(jī)系統(tǒng)上存在的任何病毒修改目標(biāo)計(jì)算機(jī)系統(tǒng)的敏感部分的較大機(jī)會。
      這些由工具程序使用的補(bǔ)丁一般比較小,并因此提出了適度的對傳輸和存儲的資源要求。同樣地,因?yàn)楣ぞ叱绦蚴褂玫难a(bǔ)丁易于以少數(shù)定義明確的方式來修改打補(bǔ)丁軟件的行為(behavior),故該工具程序幫助減少了代碼攪拌的問題。
      圖1說明了適合的在其中可以實(shí)現(xiàn)該工具程序的計(jì)算機(jī)系統(tǒng)環(huán)境100的一個(gè)例子。該計(jì)算系統(tǒng)環(huán)境100只是一個(gè)適合的計(jì)算環(huán)境的例子并沒有任何限制用戶范圍或程序功能性的意圖。對涉及到示例性計(jì)算環(huán)境100中說明的任一部件或其結(jié)合而言,計(jì)算環(huán)境100被認(rèn)為與其既無任何依賴性,也非必需。
      該工具程序在大量其它的常用或?qū)S糜?jì)算系統(tǒng)環(huán)境或配置中也是可以操作的。適合使用該工具程序的熟知的計(jì)算系統(tǒng)、環(huán)境和/或配置的例子包括,但不限于個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手提或膝上設(shè)備、寫字板設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機(jī)頂盒、可編程消費(fèi)者電子設(shè)備、網(wǎng)絡(luò)PC、微型機(jī)、大型機(jī)、包括任何以上系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。
      該工具程序可在計(jì)算機(jī)可讀指令的普通上下文范圍,比如由計(jì)算機(jī)執(zhí)行的程序模塊中進(jìn)行描述。一般來說,程序模塊包括基本例程、程序、對象、部件、數(shù)據(jù)結(jié)構(gòu)等等,它們執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。該工具程序也可以在任務(wù)由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)端處理設(shè)備執(zhí)行的分布式計(jì)算環(huán)境中施行。在分布式環(huán)境中,程序模塊可被安置在包括存儲器存儲設(shè)備的本地和/或遠(yuǎn)程計(jì)算機(jī)存儲介質(zhì)。
      關(guān)于圖1,一個(gè)用于實(shí)現(xiàn)該工具程序的示例性系統(tǒng)包括以計(jì)算機(jī)110的形式的通用計(jì)算設(shè)備。計(jì)算機(jī)110的部件可以包括,但不限于處理單元120、系統(tǒng)存儲器130和把包括系統(tǒng)存儲器在內(nèi)的不同部件耦合到處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可以是許多類型的總線結(jié)構(gòu),包括存儲器總線或存儲器控制器、外圍總線、和使用多種總線結(jié)構(gòu)的任何一種的局部總線的任何一種。作為例子,而非限制,這種結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(ISA)總線、微通道結(jié)構(gòu)(MCA)總線、增強(qiáng)型ISA(EISA)總線、視頻電子標(biāo)準(zhǔn)協(xié)會(VESA)局部總線以及外圍組件互聯(lián)(PCI)總線,也稱為Mezzanine總線。
      計(jì)算機(jī)110典型地包括多種計(jì)算機(jī)可讀的介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是由計(jì)算機(jī)110訪問的任何可用介質(zhì)并包括易失的和非易失的介質(zhì)、可移動(dòng)的和不可移動(dòng)的介質(zhì)。作為例子,而非限制,計(jì)算機(jī)可讀介質(zhì)可以包括計(jì)算機(jī)存儲介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲介質(zhì)包括易失的和非易失的介質(zhì)、可移動(dòng)的和不可移動(dòng)的介質(zhì),這些介質(zhì)以用于信息存儲的任何方法或技術(shù),比如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)來實(shí)現(xiàn)。計(jì)算機(jī)存儲介質(zhì)包括但不限于,RAM、ROM、EEPROM、閃存或其它存儲技術(shù)、CDROM、數(shù)字化視頻光盤(DVD)或其它的光盤存儲器、磁性磁帶、磁性錄音帶、磁性磁盤存儲器或其它的磁性存儲器設(shè)備,或可用于存儲需要的信息并可由計(jì)算機(jī)110存取的任何其它介質(zhì)。通信介質(zhì)典型地包括計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或在一個(gè)調(diào)制數(shù)據(jù)信號比如載波或其它傳輸裝置中的其它數(shù)據(jù)并且包括任何信息傳遞介質(zhì)。術(shù)語“調(diào)制數(shù)據(jù)信號”意思是具有一個(gè)或多個(gè)它的特征集或以信號中編碼信息的方式變換的信號。作為例子,而非限制,通信介質(zhì)包括比如有線網(wǎng)絡(luò)或直接有線連接的有線介質(zhì)和比如聲頻、RF、紅外線和其它無線介質(zhì)。以上的任何組合也應(yīng)該包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。
      系統(tǒng)存儲器130包括以比如只讀存儲器(ROM)131和隨機(jī)存取存儲器(RAM)132的易失的和非易失的存儲器形式的計(jì)算機(jī)存儲介質(zhì)?;据斎?輸出系統(tǒng)133(BIOS)典型地存儲在ROM 131內(nèi),它包括如啟動(dòng)時(shí)幫助在計(jì)算機(jī)110內(nèi)的元件間傳輸信息的基本例程。RAM 132通常包含可由處理單元120即時(shí)存取和/或目前在操作的數(shù)據(jù)和/或程序模塊。作為例子而非限制,圖1說明了操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136以及程序數(shù)據(jù)13。
      計(jì)算機(jī)110還包括其它可移動(dòng)/不可移動(dòng)、易失/非易失計(jì)算機(jī)存儲介質(zhì)。僅僅作為例子,圖1顯示了從不可移動(dòng)的非易失磁性介質(zhì)讀取或向其中寫入的硬盤驅(qū)動(dòng)器141、從可移動(dòng)的非易失磁性磁盤152讀取或向其中寫入的磁盤驅(qū)動(dòng)器151、以及用于向諸如CD ROM或其它光學(xué)媒介這樣的可移動(dòng)非易失光學(xué)介質(zhì)156讀寫的光盤驅(qū)動(dòng)器155。其它能用于示例性操作環(huán)境的可移動(dòng)/不可移動(dòng)、易失/非易失計(jì)算機(jī)存儲介質(zhì)包括但不限于磁性盒式磁帶、閃存卡、數(shù)字多用途盤、數(shù)字視頻磁帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅(qū)動(dòng)器141經(jīng)常通過諸如接口140等不可移動(dòng)存儲器接口連接到系統(tǒng)總線121,而磁盤驅(qū)動(dòng)器151通過諸如接口150等可移動(dòng)存儲器接口連接到系統(tǒng)總線121。
      圖1討論并示出的驅(qū)動(dòng)器及其關(guān)聯(lián)的計(jì)算機(jī)存儲介質(zhì)為計(jì)算機(jī)110提供了計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲。例如,在圖1中,示出硬盤驅(qū)動(dòng)器141作為儲存操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147。注意,這些組件可以與操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136和程序數(shù)據(jù)137相同,也可以與它們不同。這里對操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147給予不同的標(biāo)號來說明至少它們是不同的副本。用戶可以通過輸入設(shè)備,如寫字板、電子數(shù)字化儀164、麥克風(fēng)163、鍵盤162和定位設(shè)備161(通常指鼠標(biāo)、跟蹤球或觸摸板)向計(jì)算機(jī)110輸入命令和信息。其它輸入設(shè)備(圖1中未示出)可包括操作桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀等。這些和其它輸入設(shè)備通常通過耦合至系統(tǒng)總線的用戶輸入接口160連接至處理單元120,但是也可以通過其它接口和總線結(jié)構(gòu)相連,如并行端口、游戲端口或通用串行總線(USB)。監(jiān)視器191或其它類型的顯示設(shè)備也通過接口,如視頻接口190連接至系統(tǒng)總線121。監(jiān)視器191也可以與觸摸屏面板等集成。注意,監(jiān)視器和/或觸摸屏面板可以物理連接到結(jié)合有計(jì)算設(shè)備110中的外殼,比如一個(gè)平板型的個(gè)人計(jì)算機(jī)。此外,比如計(jì)算設(shè)備110的計(jì)算機(jī)也可以包括其他外圍輸出設(shè)備,比如,揚(yáng)聲器195和打印機(jī)196,它們通過外圍接口194等進(jìn)行連接。
      計(jì)算機(jī)110可能工作在使用一個(gè)或多個(gè)到諸如遠(yuǎn)程計(jì)算機(jī)180的遠(yuǎn)程計(jì)算機(jī)的邏輯連接的網(wǎng)絡(luò)化環(huán)境內(nèi)。遠(yuǎn)程計(jì)算機(jī)180可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備或其他公共網(wǎng)絡(luò)節(jié)點(diǎn),并且一般包括與計(jì)算機(jī)110相關(guān)的許多或所有上述元件,雖然圖1中僅說明了存儲器存儲設(shè)備181。圖1所述的邏輯連接包括局域網(wǎng)(LAN)171以及廣域網(wǎng)(WAN)173,但也可以包括其他網(wǎng)絡(luò)。這種網(wǎng)絡(luò)環(huán)境常見于辦公室、企業(yè)范圍的計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)以及因特網(wǎng)。例如,現(xiàn)在的工具程序中,計(jì)算機(jī)系統(tǒng)110可以包含數(shù)據(jù)移植于其中的源頭裝置,而遠(yuǎn)程計(jì)算機(jī)180可以包含目的裝置。然而注意到,源頭和目的裝置不需要由網(wǎng)絡(luò)或任何其他裝置連接,代之以數(shù)據(jù)可通過任何能夠由源頭平臺寫入并由目的平臺讀取的任何裝置進(jìn)行轉(zhuǎn)移。
      當(dāng)用于LAN網(wǎng)絡(luò)環(huán)境時(shí),計(jì)算機(jī)110通過網(wǎng)絡(luò)接口或適配器170連接到局域網(wǎng)LAN 171。當(dāng)用于WAN網(wǎng)絡(luò)環(huán)境時(shí),計(jì)算機(jī)110一般包括調(diào)制解調(diào)器172或其他裝置,用于在諸如因特網(wǎng)的廣域網(wǎng)173上建立通信。調(diào)制解調(diào)器172可能是內(nèi)置或外置的,它通過用戶輸入接口160或其它適合的機(jī)制連接到系統(tǒng)總線121。在網(wǎng)絡(luò)化環(huán)境內(nèi),所述與個(gè)人計(jì)算機(jī)110相關(guān)的程序模塊或其中的一部分可能存儲在遠(yuǎn)程存儲設(shè)備內(nèi)。作為例子,而非限制,圖1說明了將遠(yuǎn)程應(yīng)用程序185駐留在存儲設(shè)備181上。應(yīng)該認(rèn)識到所示的網(wǎng)絡(luò)連接是示例性的,在計(jì)算機(jī)間建立連接的其他裝置也可以使用。
      盡管圖1顯示了存在于特定計(jì)算機(jī)系統(tǒng)上以特定方式排列的各種功能性和數(shù)據(jù),本領(lǐng)域的技術(shù)人員意識到這種功能性和數(shù)據(jù)可以通過不同排列的計(jì)算機(jī)系統(tǒng)以不同的其他方式分布。盡管以上述方式配置點(diǎn)計(jì)算機(jī)系統(tǒng)一般用于支持該工具程序的運(yùn)行,然而本領(lǐng)域的一個(gè)普通技術(shù)人員意識到該工具程序可以用不同類型和配置并由不同部件的設(shè)備來實(shí)現(xiàn)。
      圖2是顯示了參照本工具程序的計(jì)算機(jī)系統(tǒng)間一個(gè)典型的數(shù)據(jù)交換的數(shù)據(jù)流程圖。圖2顯示的計(jì)算機(jī)系統(tǒng)(計(jì)算機(jī)系統(tǒng)210、220、221、222、230、231和232)一般有顯示的一些或所有部件并且與圖1結(jié)合進(jìn)行討論。在補(bǔ)丁分配服務(wù)器上,該工具程序產(chǎn)生一個(gè)或多個(gè)補(bǔ)丁。這些補(bǔ)丁201從補(bǔ)丁分配服務(wù)器發(fā)送到一個(gè)或多個(gè)管理服務(wù)器,比如管理服務(wù)器220和230。接著,每個(gè)管理服務(wù)器將補(bǔ)丁運(yùn)送到一個(gè)或多個(gè)目標(biāo)計(jì)算機(jī)系統(tǒng),比如目標(biāo)計(jì)算機(jī)系統(tǒng)221、222、231和232。一些實(shí)施例中(未顯示),補(bǔ)丁分配服務(wù)器直接,或通過一個(gè)比通過單個(gè)管理服務(wù)器更為間接的路徑發(fā)送補(bǔ)丁到一個(gè)或多個(gè)目標(biāo)計(jì)算機(jī)系統(tǒng)。在目標(biāo)計(jì)算機(jī)系統(tǒng)接收到的補(bǔ)丁在目標(biāo)計(jì)算機(jī)系統(tǒng)進(jìn)行處理,下面將作更詳細(xì)的描述。管理服務(wù)器也可以發(fā)送補(bǔ)丁配置命令202到一個(gè)或多個(gè)目標(biāo)計(jì)算機(jī)系統(tǒng),該系統(tǒng)應(yīng)用補(bǔ)丁配置命令以重新配置特定補(bǔ)丁的運(yùn)行。作為下面更為詳細(xì)的描述,補(bǔ)丁可以完全失效;如果補(bǔ)丁沒有失效,其運(yùn)行通知和測試結(jié)果處理可以獨(dú)立地生效或失效。當(dāng)運(yùn)行通知為生效時(shí),通知可以顯示或本地存儲在目標(biāo)計(jì)算機(jī)系統(tǒng)上,或可以作為通知203被發(fā)送到適當(dāng)?shù)墓芾矸?wù)器上。
      圖3是顯示該工具程序?yàn)榱私邮蘸吞幚硇卵a(bǔ)丁而一般執(zhí)行的步驟的流程圖。在步驟301,該工具程序接收一個(gè)補(bǔ)丁。在步驟301接收的補(bǔ)丁可以是一個(gè)數(shù)據(jù)驅(qū)動(dòng)補(bǔ)丁或是一個(gè)代碼驅(qū)動(dòng)補(bǔ)丁。下面的表格1內(nèi)顯示了一個(gè)樣本數(shù)據(jù)驅(qū)動(dòng)補(bǔ)丁。
      1&lt;Softpatch Patch=″Q382429″&gt;
      2 &lt;AffectedApplication AffectedExe=″sqlservr.exe″&gt;
      3 &lt;AffectedVersion Version=″9.*″&gt;
      4 &lt;AffectedModules Name=″SQLSORT.DLL″&gt;
      5&lt;Version ″8.0.*, 9.*″&gt;
      6 &lt;Function Name=″SsrpEnumCore″Address=″0x0802E76B″7 Param=″2″Paramtype=″LPSTR″&gt;
      8&lt;Filter MaxByteLength=″60″/&gt;
      9&lt;Resolution ActionType=″BOOL″Action=″FALSE″/&gt;
      10 &lt;/Function&gt;
      11 &lt;/Version&gt;
      12 &lt;Version ″10.*,11.*″&gt;
      13 &lt;Function Name=″SsrpEnumCore″Address=″0x0802D283″14 Param=″2″Paramtype=″LPSTR″&gt;
      15 &lt;Filter MaxByteLength=″128″/&gt;
      16 &lt;Resolution ActionType=″BOOL″Action=″FALSE″/&gt;
      17 &lt;/Function&gt;
      18 &lt;/Version&gt;
      19 &lt;/AffectedModules&gt;
      20 &lt;/AffectedVersion&gt;
      21&lt;/AffectedApplication&gt;
      2223&lt;Signature Hash=″MD5″Signature=″C509-64AA-9161-8C52-24 9F6D-BF5A-AEF2-ECE1-0038-34D1″/&gt;
      25 &lt;/Softpatch&gt;
      表格1行1包含一個(gè)該補(bǔ)丁唯一的標(biāo)識符。行2標(biāo)識了受該補(bǔ)丁影響的應(yīng)用程序。行3標(biāo)識了受該補(bǔ)丁影響的應(yīng)用程序版本。行4標(biāo)識了受該補(bǔ)丁影響的可執(zhí)行模塊。行5標(biāo)識了兩個(gè)版本的受影響的可執(zhí)行模塊——版本8.0.*和9.*——它們提供了打補(bǔ)丁的方向。行6-10包含為這些兩個(gè)版本的可執(zhí)行模塊打補(bǔ)丁的方向。行6-7標(biāo)識了要打補(bǔ)丁的函數(shù)、它在可執(zhí)行模塊內(nèi)的地址、由補(bǔ)丁測試的它的參數(shù)和要測試參數(shù)的類型。行8指示了在行6-7標(biāo)識的參數(shù)應(yīng)被測試以確定是否其長度超過60字節(jié)。行9指示了如果測試成功,該函數(shù)的調(diào)用應(yīng)該失敗。行12標(biāo)示了兩個(gè)更多版本的受影響的可執(zhí)行模塊——版本10.*和11.*——它們提供了打補(bǔ)丁的方向。行13-17包含為這些兩個(gè)版本的可執(zhí)行模塊打補(bǔ)丁的方向。行13-14標(biāo)識了要打補(bǔ)丁的函數(shù)、它在可執(zhí)行模塊內(nèi)的地址、由補(bǔ)丁測試的它的參數(shù)和要測試參數(shù)的類型。可以看到,在行13-14內(nèi)為版本10.*和11.*標(biāo)識的可執(zhí)行模塊內(nèi)要打補(bǔ)丁的函數(shù)地址不同于在行6-7內(nèi)為版本8.0.*和9.*標(biāo)識的的可執(zhí)行模塊內(nèi)要打補(bǔ)丁的函數(shù)地址。行15指示了在行13-14內(nèi)標(biāo)識的參數(shù)應(yīng)被測試以確定是否其長度超過128字節(jié)。行16指示了如果測試成功,該函數(shù)的調(diào)用應(yīng)該失敗。該補(bǔ)丁可以指定各種結(jié)果處理動(dòng)作類型,包括補(bǔ)丁函數(shù)調(diào)用失敗、出現(xiàn)異常、終止要打補(bǔ)丁的可執(zhí)行模塊正被執(zhí)行的進(jìn)程、或者糾正違規(guī)值(比如通過截短過長的串)。行23-25包含對該補(bǔ)丁的識別標(biāo)志,該標(biāo)志標(biāo)識了補(bǔ)丁的源頭并校驗(yàn)了從離開源頭開始該補(bǔ)丁未被改變。
      下面的表格2包含一個(gè)以上表格1中顯示的補(bǔ)丁的代碼驅(qū)動(dòng)版本。
      1 00411A7E push3Ch2 00411A80 mov eax,dword ptr[str]3 00411A83 pusheax4 00411A84 cailValidateStringLength(411082h)5 00411A89 add esp,86 00411A8C movzx ecx,al7 00411A8F testecx,ecx8 00411A91 je 411A9Ah9 00411A93 jmp foo+2(411AD2h)10 00411A9A xor eax,eax11 00411A9C ret表格2行1-3將用于測試函數(shù)的參數(shù)推到堆棧上。行4調(diào)用測試函數(shù)。行5-8將用于測試函數(shù)的返回代碼分支。如果測試函數(shù)成功,行9跳回開始執(zhí)行打補(bǔ)丁函數(shù)主體部分。如果測試函數(shù)失敗,行10-11推動(dòng)失敗的結(jié)果代碼到堆棧上并從打補(bǔ)丁函數(shù)返回到要打補(bǔ)丁函數(shù)的本色(color)。為了易讀,表格2忽略了顯示在一些代碼驅(qū)動(dòng)補(bǔ)丁內(nèi)的某些細(xì)節(jié),包括用于測試補(bǔ)丁配置標(biāo)記的當(dāng)前值的可驗(yàn)證的標(biāo)志、指令,和從打補(bǔ)丁函數(shù)的代碼的開始重新定位的指令。
      一些實(shí)施例中,所有類型的補(bǔ)丁可包含附加信息,包括,為要打補(bǔ)丁的可執(zhí)行模塊的一個(gè)或多個(gè)版本中每一個(gè)版本的可用于校驗(yàn)可執(zhí)行模塊的特定情況是適合的該版本的副本的文件簽名。這種文件簽名可以是,例如,為整個(gè)可執(zhí)行模塊版本的大小或校驗(yàn)和,或者可能發(fā)生在可執(zhí)行模塊內(nèi)的特定點(diǎn),比如在要打補(bǔ)丁的可執(zhí)行模塊的偏移量處,的代碼。
      在步驟302,如果補(bǔ)丁帶有合法標(biāo)志被標(biāo)記,那么該工具程序繼續(xù)到步驟303,否則該工具程序繼續(xù)到步驟301以接收下一個(gè)補(bǔ)丁。在步驟303,該工具程序增加補(bǔ)丁到本地補(bǔ)丁表格。在步驟304,該工具程序使用補(bǔ)丁的初始配置,比如通過發(fā)送它到缺省配置。
      圖4是顯示該工具程序使用的一個(gè)典型的樣本補(bǔ)丁表格的數(shù)據(jù)結(jié)構(gòu)圖。補(bǔ)丁表格400包含行,比如行401和402,每個(gè)行分為以下列包含從補(bǔ)丁中提取的補(bǔ)丁標(biāo)識符的補(bǔ)丁標(biāo)識符列411;包含標(biāo)識要打補(bǔ)丁的可執(zhí)行模塊信息,比如其名字的可執(zhí)行模塊列412;標(biāo)識了列412內(nèi)標(biāo)識的、要應(yīng)用補(bǔ)丁的所有版本的可執(zhí)行模塊的可執(zhí)行模塊版本列413;包含當(dāng)前配置值的測試性能有效列414,所述當(dāng)前配置值用于確定打補(bǔ)丁函數(shù)被調(diào)用時(shí)是否每次都執(zhí)行由補(bǔ)丁指定的測試;包含當(dāng)前配置值的測試性能通知有效列415,所述當(dāng)前配置值用于確定補(bǔ)丁測試執(zhí)行時(shí),是否每次都產(chǎn)生通知;包含當(dāng)前配置值的測試結(jié)果通知有效列416,所述當(dāng)前配置值用于確定當(dāng)補(bǔ)丁測試成功時(shí),是否每次都產(chǎn)生通知;包含當(dāng)前配置值的測試結(jié)果處理有效列417,所述當(dāng)前配置值用于確定當(dāng)補(bǔ)丁測試失敗時(shí),是否要執(zhí)行補(bǔ)丁結(jié)果處理;和包含到該補(bǔ)丁自身的指針、指定了測試失敗時(shí)每次要執(zhí)行的測試和測試結(jié)果處理的補(bǔ)丁列418。一些實(shí)施例中,不是如所示包含一個(gè)指針,而是該補(bǔ)丁列418直接包括每個(gè)補(bǔ)丁。一個(gè)特定的補(bǔ)丁表格可包括或指向各種不同類型的補(bǔ)丁,比如所有的代碼驅(qū)動(dòng)的補(bǔ)丁、所有數(shù)據(jù)驅(qū)動(dòng)的補(bǔ)丁,或者代碼驅(qū)動(dòng)和數(shù)據(jù)驅(qū)動(dòng)補(bǔ)丁的結(jié)合。
      在步驟305,一旦該工具程序已經(jīng)將接收的補(bǔ)丁增加到補(bǔ)丁表格并且初始化了它的配置,該補(bǔ)丁可由該工具程序自動(dòng)應(yīng)用于可執(zhí)行模塊。在步驟305,該工具程序可以使用許多不同的方法來應(yīng)用該補(bǔ)丁,包括由參考結(jié)合的應(yīng)用中描述的那些,也包括實(shí)時(shí)函數(shù)調(diào)用攔截、和/或(1)已經(jīng)加載的可執(zhí)行模塊、(2)可執(zhí)行模塊的一個(gè)或多個(gè)磁盤映像、或者(3)由操作系統(tǒng)的加載程序加載的可執(zhí)行模塊的情況的代碼重寫。步驟305之后,該工具程序繼續(xù)到步驟301以接收下一個(gè)補(bǔ)丁。
      圖5是顯示該工具程序?yàn)榱藶樘囟ㄑa(bǔ)丁更新配置指令而一般執(zhí)行的步驟的流程圖。在步驟501,該工具程序?yàn)樘囟ㄑa(bǔ)丁接收配置指令,比如從一個(gè)管理員那里。一些實(shí)施例中,這種配置指令可由使用組方針的管理員產(chǎn)生。在步驟502,該工具程序參照接收的指令升級補(bǔ)丁表格內(nèi)補(bǔ)丁的配置。步驟502之后,該工具程序繼續(xù)到步驟501以接收下一個(gè)配置指令。
      圖6是顯示該工具程序?yàn)閳?zhí)行由補(bǔ)丁指定的參數(shù)變量而一般執(zhí)行的步驟的流程圖。在步驟601,打補(bǔ)丁函數(shù)被調(diào)用。在步驟602,如果對影響被調(diào)用函數(shù)的補(bǔ)丁的測試是可行的,那么該工具程序繼續(xù)到步驟603,否則該工具程序繼續(xù)到步驟601以處理下一個(gè)對打補(bǔ)丁函數(shù)的調(diào)用。在步驟603,如果對該補(bǔ)丁的測試性能通知可以有效,那么該工具程序繼續(xù)到步驟604,否則該工具程序繼續(xù)到步驟605。在步驟604,該工具程序產(chǎn)生一個(gè)執(zhí)行測試的通知。步驟604、608和610可以在該測試滿意的目標(biāo)計(jì)算機(jī)系統(tǒng)上顯示或存儲一個(gè)指示,和/或傳送這種指示到一個(gè)遠(yuǎn)程計(jì)算機(jī)系統(tǒng)用于在那里顯示或記錄。
      在步驟605,該工具程序執(zhí)行由補(bǔ)丁指定的確認(rèn)測試。一些實(shí)施例中,步驟605包括調(diào)用由該工具程序?yàn)闇y試所用的一組標(biāo)準(zhǔn)例程的其中一個(gè)。在步驟606,如果在步驟605執(zhí)行的測試令人滿意,那么該工具程序繼續(xù)到步驟601,否則該工具程序繼續(xù)到步驟607。在步驟607,如果為該補(bǔ)丁的測試結(jié)果通知無效,那么該工具程序繼續(xù)到步驟608,否則該工具程序繼續(xù)到步驟609。在步驟608,該工具程序產(chǎn)生一個(gè)測試不令人滿意的通知。在步驟609,如果測試結(jié)果處理對于補(bǔ)丁有效,那么該工具程序繼續(xù)到步驟610,否則,該工具程序繼續(xù)到步驟601。在步驟610,該工具程序執(zhí)行由補(bǔ)丁指定的測試結(jié)果處理。步驟610之后,該工具程序繼續(xù)到步驟601。
      本領(lǐng)域的技術(shù)人員應(yīng)該意識到,以上描述的程序可以直接應(yīng)用或以不同的方式擴(kuò)展。例如,可以以不同方式在為不同目的的不同類型的可執(zhí)行模塊的不同位置使用該工具程序來應(yīng)用各種不同類型的補(bǔ)丁。同樣地,盡管這里描述的補(bǔ)丁是作為包含當(dāng)值確認(rèn)測試失敗時(shí)來為其指示一個(gè)問題的,但該工具程序也可以用當(dāng)值確認(rèn)測試成功時(shí)來為其指示一個(gè)問題的值確認(rèn)來實(shí)現(xiàn)。一些實(shí)施例中,每個(gè)測試伴隨一個(gè)是成功還是失敗指示問題的一個(gè)指示。盡管前面的描述作為首選的實(shí)施例而參考,然而本發(fā)明的范圍僅僅以下面的權(quán)利要求和這里敘述的元件來定義。
      權(quán)利要求
      1.一種計(jì)算系統(tǒng)內(nèi)用于擴(kuò)充軟件的方法,包括在目標(biāo)計(jì)算機(jī)系統(tǒng)中接收一個(gè)擴(kuò)充規(guī)格表以指定(a)要擴(kuò)充的函數(shù),所指定的函數(shù)在計(jì)算系統(tǒng)中所執(zhí)行的軟件中,(b)要測試的函數(shù)的參數(shù),(c)應(yīng)用于所指定參數(shù)的測試,和(d)如果所指定的參數(shù)不滿足于所指定的測試,就執(zhí)行對函數(shù)狀態(tài)的修改;以及當(dāng)在目標(biāo)計(jì)算機(jī)系統(tǒng)上調(diào)用所指定的函數(shù)時(shí),如果所指定的參數(shù)不能滿足指定的測試時(shí),就對所指定函數(shù)的狀態(tài)進(jìn)行指定的修改。
      2.如權(quán)利要求1所述的方法,其特征在于,由所述擴(kuò)充規(guī)格表所指定的修改阻止了所指定函數(shù)的執(zhí)行。
      3.如權(quán)利要求1所述的方法,其特征在于,由所述擴(kuò)充規(guī)格表所指定的修改是在所指定參數(shù)改變之后執(zhí)行所指定的函數(shù)。
      4.如權(quán)利要求1所述的方法,其特征在于,在所述目標(biāo)計(jì)算機(jī)系統(tǒng)中接收多個(gè)擴(kuò)充規(guī)格表。
      5.如權(quán)利要求4所述的方法,其特征在于,進(jìn)一步包括在一種數(shù)據(jù)結(jié)構(gòu)內(nèi)來維護(hù)所有接收到的擴(kuò)充規(guī)格表。
      6.如權(quán)利要求1所述的方法,其特征在于,在接收所述擴(kuò)充規(guī)格表后,并不要求用戶干涉以執(zhí)行對所指定函數(shù)狀態(tài)的指定修改。
      7.如權(quán)利要求1所述的方法,其特征在于,所述擴(kuò)充規(guī)格表通過識別參數(shù)測試函數(shù)以進(jìn)行調(diào)用來指定將測試應(yīng)用于所指定的參數(shù),所述參數(shù)測試函數(shù)的代碼不包含在所述擴(kuò)充規(guī)格表中。
      8.如權(quán)利要求1所述的方法,其特征在于,所述擴(kuò)充規(guī)格表通過識別參數(shù)測試函數(shù)以進(jìn)行調(diào)用來指定將測試應(yīng)用于所指定的參數(shù),所述參數(shù)測試函數(shù)在接收所述擴(kuò)充規(guī)格表之前就已安裝。
      9.如權(quán)利要求1所述的方法,其特征在于,所述擴(kuò)充規(guī)格表包含代碼。
      10.如權(quán)利要求9所述的方法,其特征在于,由所述擴(kuò)充規(guī)格表包含的代碼包括調(diào)用參數(shù)測試函數(shù)的參數(shù),所述參數(shù)測試函數(shù)的代碼不包含在所述擴(kuò)充規(guī)格表中。
      11.如權(quán)利要求1所述的方法,其特征在于,所述擴(kuò)充規(guī)格表包含識別參數(shù)測試函數(shù)的文本,所述參數(shù)測試函數(shù)的代碼不包含在所述擴(kuò)充規(guī)格表中。
      12.如權(quán)利要求11所述的方法,其特征在于,由擴(kuò)充規(guī)格表含有的文本所識別的參數(shù)測試函數(shù)的代碼包含在所述擴(kuò)充規(guī)格表中。
      13.如權(quán)利要求11所述的方法,其特征在于,由擴(kuò)充規(guī)格表未含有的文本所識別的參數(shù)測試函數(shù)的代碼不包含在所述擴(kuò)充規(guī)格表中。
      14.如權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括提供一個(gè)用于配置控制所述擴(kuò)充規(guī)格表操作情況的接口,并且僅當(dāng)該情況為有效狀態(tài)時(shí),才對指定函數(shù)的狀態(tài)進(jìn)行指定修改。
      15.如權(quán)利要求14所述的方法,其特征在于,所提供的接口允許所述擴(kuò)充規(guī)格表的操作被本地配置。
      16.如權(quán)利要求14所述的方法,其特征在于,所提供的接口允許所述擴(kuò)充規(guī)格表的操作被遠(yuǎn)程配置。
      17.如權(quán)利要求14所述的方法,其特征在于,所提供的接口允許所述擴(kuò)充規(guī)格表的操作根據(jù)策略被配置。
      18.如權(quán)利要求14所述的方法,其特征在于,所指定的測試是在執(zhí)行所指定函數(shù)的任意實(shí)際代碼之前被執(zhí)行。
      19.如權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括提供一個(gè)用于配置與所述擴(kuò)充規(guī)格表相關(guān)警告的接口,并且如果所提供的接口用于使警告有效,就在由所述擴(kuò)充規(guī)格表指定的測試每次失敗時(shí)產(chǎn)生一個(gè)警告。
      20.如權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括提供一個(gè)用于配置與所述擴(kuò)充規(guī)格表相關(guān)通知的接口,并且如果所提供的接口用于使通知有效,就在由所述擴(kuò)充規(guī)格表指定的測試每次執(zhí)行時(shí)產(chǎn)生一個(gè)通知。
      21.如權(quán)利要求20所述的方法,其特征在于,進(jìn)一步包括將所產(chǎn)生的通知合并到單個(gè)已經(jīng)合并的通知中。
      22.如權(quán)利要求1所述的方法,其特征在于,所接收的擴(kuò)充規(guī)格表被標(biāo)記,該方法進(jìn)一步包括驗(yàn)證所述擴(kuò)充規(guī)格表的簽名,并且,僅當(dāng)對所述擴(kuò)充規(guī)格表的簽名的驗(yàn)證成功時(shí),才執(zhí)行對指定函數(shù)狀態(tài)進(jìn)行的指定修改。
      23.如權(quán)利要求22所述的方法,其特征在于,僅當(dāng)所述擴(kuò)充規(guī)格表的簽名的簽名人與含有指定函數(shù)的軟件的簽名人匹配時(shí),才執(zhí)行對指定函數(shù)的狀態(tài)進(jìn)行的指定修改。
      24.如權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括響應(yīng)于檢測到所指定函數(shù)已經(jīng)被調(diào)用來執(zhí)行所指定的測試,而不改變所指定函數(shù)的代碼。
      25.如權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括當(dāng)調(diào)用所指定函數(shù)時(shí),改變所指定函數(shù)的代碼以執(zhí)行所指定的測試。
      26.如權(quán)利要求25所述的方法,其特征在于,通過在所指定函數(shù)的代碼中插入一個(gè)到執(zhí)行所述指定測試的單獨(dú)例行程序的跳轉(zhuǎn)以改變所指定函數(shù)的代碼。
      27.如權(quán)利要求1所述的方法,其特征在于,在已鑒別的可執(zhí)行模塊中提供所指定的函數(shù),所述模塊使用加載程序進(jìn)行加載,而所述方法進(jìn)一步包括對加載程序進(jìn)行登記以具有一個(gè)例行程序,該程序在響應(yīng)對所指定函數(shù)的每次調(diào)用而執(zhí)行所指定函數(shù)之前來執(zhí)行所指定的測試。
      28.一種允許在計(jì)算系統(tǒng)中存在的軟件進(jìn)行擴(kuò)充的計(jì)算系統(tǒng),包括含有該軟件的存儲設(shè)備;補(bǔ)丁接收程序,在所述計(jì)算系統(tǒng)中接收補(bǔ)丁,該補(bǔ)丁指定了(a)一個(gè)指針,在該指針處要擴(kuò)充該軟件,(b)與在指定指針處要測試的函數(shù)相關(guān)的一個(gè)值,(c)應(yīng)用于所述指定值的測試,以及(d)如果指定的值不能滿足所指定的測試,就執(zhí)行對軟件狀態(tài)的修改;以及打補(bǔ)丁代理,在所指定指針處將代碼注入軟件,這樣,當(dāng)軟件的執(zhí)行到達(dá)目標(biāo)計(jì)算機(jī)系統(tǒng)的所指定指針時(shí),如果指定的值不能滿足所指定的測試,就執(zhí)行對軟件狀態(tài)的所指定修改。
      29.一種計(jì)算機(jī)可讀介質(zhì),其內(nèi)容引起目標(biāo)計(jì)算系統(tǒng)執(zhí)行一種為確認(rèn)所述目標(biāo)計(jì)算系統(tǒng)中可用的軟件添加值的方法,包括在所述計(jì)算系統(tǒng)中接收一個(gè)擴(kuò)充規(guī)格表,該規(guī)格表指定了(a)要添加值確認(rèn)的函數(shù),(b)在函數(shù)執(zhí)行期間,在目標(biāo)計(jì)算系統(tǒng)中存在的要進(jìn)行測試的數(shù)據(jù),(c)要應(yīng)用于所指定數(shù)據(jù)的測試,以及(d)如果指定的數(shù)據(jù)不能滿足所指定的測試,就執(zhí)行對函數(shù)狀態(tài)的所指定的修改;以及當(dāng)在目標(biāo)計(jì)算機(jī)系統(tǒng)上調(diào)用所指定的函數(shù)時(shí),如果所指定的數(shù)據(jù)不能滿足所指定的測試,就對所指定函數(shù)的狀態(tài)進(jìn)行指定的修改。
      30.如權(quán)利要求22所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所指定測試是一種通常都能滿足的測試,而不需要考慮所指定的數(shù)據(jù)值。
      31.一種傳送補(bǔ)丁數(shù)據(jù)結(jié)構(gòu)所生成的數(shù)據(jù)信號,包括識別要添加值確認(rèn)的函數(shù)的信息;識別在函數(shù)執(zhí)行期間存在的要測試的數(shù)據(jù)的信息;識別要應(yīng)用于所指定數(shù)據(jù)的測試的信息;以及識別如果所指定的數(shù)據(jù)不能滿足所指定的測試,就對所指定函數(shù)的狀態(tài)進(jìn)行修改的信息,這樣,如果在執(zhí)行指定函數(shù)的目標(biāo)計(jì)算機(jī)系統(tǒng)上接收到數(shù)據(jù)信號,該數(shù)據(jù)信號的內(nèi)容就能用于當(dāng)在目標(biāo)計(jì)算機(jī)系統(tǒng)上調(diào)用所指定函數(shù)時(shí),如果所指定的數(shù)據(jù)不能滿足所指定的測試,就對所指定函數(shù)的狀態(tài)進(jìn)行指定的修改。
      32.如權(quán)利要求31所述的所生成數(shù)據(jù)信號,其特征在于,所生成的數(shù)據(jù)信號在計(jì)算機(jī)系統(tǒng)之間進(jìn)行傳送。
      33.如權(quán)利要求31所述的所生成數(shù)據(jù)信號,其特征在于,所生成數(shù)據(jù)信號在計(jì)算機(jī)系統(tǒng)之間進(jìn)行傳送。
      34.一種用于為目標(biāo)計(jì)算系統(tǒng)中可用軟件添加值確認(rèn)的方法,包括在所述計(jì)算系統(tǒng)中接收一個(gè)擴(kuò)充規(guī)格表,該規(guī)格表指定了(a)要添加值確認(rèn)的軟件,(b)在所指定軟件中要添加值確認(rèn)的指針,(c)在所指定軟件執(zhí)行期間目標(biāo)計(jì)算系統(tǒng)上存在的在所指定指針處要測試的數(shù)據(jù),(d)要應(yīng)用于所指定數(shù)據(jù)的測試,以及(e)如果指定的數(shù)據(jù)不能滿足所指定的測試,就執(zhí)行對軟件狀態(tài)的修改;允許用戶配置所接收擴(kuò)充規(guī)格表的操作模式;以及當(dāng)在目標(biāo)計(jì)算機(jī)系統(tǒng)上所指定指針處執(zhí)行所指定的函數(shù)時(shí),以與配置的所接收的擴(kuò)充規(guī)格表的操作模式相一致的方式來應(yīng)用所接收的擴(kuò)充規(guī)格表。
      35.如權(quán)利要求34所述的方法,其特征在于,所述用戶配置用于所述擴(kuò)充規(guī)格表的有效操作模式,并且以與配置的所接收的擴(kuò)充規(guī)格表的操作模式相一致的方式來應(yīng)用所接收的擴(kuò)充規(guī)格表的步驟包括如果指定的數(shù)據(jù)不能滿足所指定的測試,就執(zhí)行對所指定軟件狀態(tài)的修改。
      36.如權(quán)利要求34所述的方法,其特征在于,所述用戶配置的所述擴(kuò)充規(guī)格表的有效診斷操作模式,并且,其中以與配置的所接收擴(kuò)充規(guī)格表的操作模式相一致的方式來應(yīng)用所接收的擴(kuò)充規(guī)格表的步驟包括如果指定的數(shù)據(jù)不能滿足所指定的測試,就執(zhí)行(1)執(zhí)行對所指定軟件狀態(tài)的指定修改,以及(2)產(chǎn)生指定的數(shù)據(jù)不能滿足所指定的測試的通知。
      37.如權(quán)利要求34所述的方法,其特征在于,所述用戶配置用于所述擴(kuò)充規(guī)格表的詳細(xì)有效操作模式,并且,以與配置用于所接收的擴(kuò)充規(guī)格表的操作模式相一致的方式來應(yīng)用所接收的擴(kuò)充規(guī)格表的步驟包括如果指定的數(shù)據(jù)不能滿足所指定的測試,就執(zhí)行對所指定軟件狀態(tài)的指定修改,以及產(chǎn)生指定的測試被執(zhí)行的通知。
      38.如權(quán)利要求34所述的方法,其特征在于,所述用戶配置用于所述擴(kuò)充規(guī)格表的詳細(xì)診斷操作模式,并且其中,以與配置用于所接收的擴(kuò)充規(guī)格表的操作模式相一致的方式來應(yīng)用所接收的擴(kuò)充規(guī)格表的步驟包括如果指定的數(shù)據(jù)不能滿足所指定的測試,就執(zhí)行(1)執(zhí)行對所指定軟件狀態(tài)的指定修改,以及(2)產(chǎn)生指定的數(shù)據(jù)不能滿足所指定的測試的通知。產(chǎn)生指定的測試被執(zhí)行的通知。
      39.如權(quán)利要求34所述的方法,其特征在于,所述用戶配置用于所述擴(kuò)充規(guī)格表的無效操作模式,并且其中,以與配置用于所接收的擴(kuò)充規(guī)格表的操作模式相一致的方式來應(yīng)用所接收的擴(kuò)充規(guī)格表的步驟包括忽略對所指定軟件的狀態(tài)進(jìn)行指定修改,而不考慮所指定的數(shù)據(jù)是否能滿足所指定的測試。
      40.如權(quán)利要求34所述的方法,其特征在于,所述用戶配置用于所述擴(kuò)充規(guī)格表的無效診斷操作模式,并且其中,以與配置用于所接收的擴(kuò)充規(guī)格表的操作模式相一致的方式來應(yīng)用所接收的擴(kuò)充規(guī)格表的步驟包括忽略對所指定軟件的狀態(tài)進(jìn)行指定修改,而不考慮所指定的數(shù)據(jù)是否能滿足所指定的測試;如果指定的數(shù)據(jù)不能滿足所指定的測試,就產(chǎn)生指定的數(shù)據(jù)不能滿足所指定測試的通知。
      41.如權(quán)利要求34所述的方法,其特征在于,所述用戶配置用于所述擴(kuò)充規(guī)格表的無效診斷操作模式,并且其中,以與配置用于所接收的擴(kuò)充規(guī)格表的操作模式相一致的方式來應(yīng)用所接收的擴(kuò)充規(guī)格表的步驟包括忽略對所指定軟件的狀態(tài)進(jìn)行指定修改,而不考慮所指定的數(shù)據(jù)是否能滿足所指定的測試;以及產(chǎn)生指定的測試被執(zhí)行的通知。
      42.如權(quán)利要求34所述的方法,其特征在于,所述用戶配置用于所述擴(kuò)充規(guī)格表的無效診斷操作模式,并且其中,以與配置用于所接收的擴(kuò)充規(guī)格表的操作模式相一致的方式來應(yīng)用所接收的擴(kuò)充規(guī)格表的步驟包括忽略對所指定軟件的狀態(tài)進(jìn)行指定修改,而不考慮所指定的數(shù)據(jù)是否能滿足所指定的測試;產(chǎn)生指定的測試被執(zhí)行的通知;如果指定的數(shù)據(jù)不能滿足所指定的測試,就產(chǎn)生指定的數(shù)據(jù)不能滿足所指定測試的通知。
      全文摘要
      這里描述了一個(gè)用于在目標(biāo)計(jì)算機(jī)系統(tǒng)中擴(kuò)充軟件的工具程序。該工具程序在計(jì)算系統(tǒng)內(nèi)接收擴(kuò)充規(guī)格表。所述擴(kuò)充規(guī)格表指定了(a)要擴(kuò)充的函數(shù),(b)要測試的函數(shù)參數(shù),(c)應(yīng)用于所指定參數(shù)的測試,和(d)如果所指定的參數(shù)不滿足于所指定的測試,就執(zhí)行對函數(shù)狀態(tài)的修改。當(dāng)在目標(biāo)計(jì)算機(jī)系統(tǒng)上調(diào)用所指定的函數(shù)時(shí),如果所指定的參數(shù)不能滿足所指定的測試,所述工具程序就對所指定函數(shù)的狀態(tài)進(jìn)行指定的修改。
      文檔編號G06F11/36GK1696910SQ20051006507
      公開日2005年11月16日 申請日期2005年4月8日 優(yōu)先權(quán)日2004年5月11日
      發(fā)明者A·布魯姆菲爾德, G·古蘭, J·加姆斯, S·A·阿爾施巴尼, S·A·菲爾德 申請人:微軟公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1