国产精品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>

      通過(guò)網(wǎng)絡(luò)以事務(wù)形式辦理文件操作的方法與系統(tǒng)的制作方法

      文檔序號(hào):6475083閱讀:229來(lái)源:國(guó)知局
      專(zhuān)利名稱(chēng):通過(guò)網(wǎng)絡(luò)以事務(wù)形式辦理文件操作的方法與系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      以下所述的各種實(shí)施例一般涉及網(wǎng)絡(luò)通信,尤其但非排他地涉及啟用通過(guò)網(wǎng)絡(luò)的以事務(wù)形式辦理的文件操作方法與系統(tǒng)。
      背景技術(shù)
      一直以來(lái),事務(wù)都由數(shù)據(jù)庫(kù)和事務(wù)處理系統(tǒng)所提供。通過(guò)將許多操作組合在一起成為單個(gè)原子操作,即,其每個(gè)單獨(dú)操作的結(jié)果共同成敗的一組操作,事務(wù)提供了一種應(yīng)用程序編程人員需要的簡(jiǎn)化的失敗模型。如果只有一個(gè)操作失敗,無(wú)論有多少個(gè)操作與此事務(wù)相關(guān)聯(lián),該組中的所有操作的效果就被“撤銷(xiāo)”或回退。對(duì)于任意數(shù)量的失敗,都提供了操作之中的該一致性,且最終各個(gè)事務(wù)處理系統(tǒng)到達(dá)兩個(gè)狀態(tài)之一,其中,要么應(yīng)用所有的操作,要么不應(yīng)用任何操作。
      發(fā)明概述依照各個(gè)所描述的實(shí)施例的各方面,提供了一種在一個(gè)網(wǎng)絡(luò)上以事務(wù)形式辦理文件操作的方法與系統(tǒng)。在一方面,一計(jì)算平臺(tái)(即,客戶(hù)機(jī))可以通過(guò)網(wǎng)絡(luò)遠(yuǎn)程地訪問(wèn)另一計(jì)算平臺(tái)(即,服務(wù)器)上的文件。在這一方面,該客戶(hù)機(jī)和服務(wù)器的每一個(gè)包含一事務(wù)管理器(TM)和一文件系統(tǒng)(FS)??蛻?hù)機(jī)還包含一重定向器(RDR),而服務(wù)器包含一服務(wù)器組件(SRV)。
      在操作中,重定向器(RDR)接收到對(duì)遠(yuǎn)程以事務(wù)形式辦理的文件操作的請(qǐng)求。響應(yīng)于此請(qǐng)求,RDR從請(qǐng)求中查尋此事務(wù),并將此事務(wù)封送(marshal)以向服務(wù)器傳送(例如,在一實(shí)現(xiàn)中由TM處理)。然后,RDR將事務(wù)信息(例如,在一實(shí)現(xiàn)中為封送二進(jìn)制大對(duì)象(blob))通過(guò)網(wǎng)絡(luò)發(fā)送到服務(wù)器。SRV接收該事務(wù)信息,然后其TM和FS用此信息進(jìn)行文件操作。隨即,服務(wù)器通過(guò)網(wǎng)絡(luò)將文件處理結(jié)果返回給客戶(hù)機(jī)。
      另一方面,RDR允許對(duì)一個(gè)文件打開(kāi)一個(gè)以上遠(yuǎn)程文件操作事務(wù)。當(dāng)RDR接收到對(duì)以事務(wù)形式辦理的遠(yuǎn)程文件操作的新請(qǐng)求,則RDR判定在此客戶(hù)機(jī)上是否此遠(yuǎn)程文件的“臟”版本(即,已被寫(xiě)過(guò)的版本)已知。RDR隨即使用該臟版本,而非文件的原始版本,用于新請(qǐng)求。在某些實(shí)施例中,對(duì)于一個(gè)給定的文件,RDR一次只允許打開(kāi)單個(gè)以事務(wù)形式辦理的寫(xiě)操作。
      在又一個(gè)方面,RDR判定對(duì)以事務(wù)形式辦理的遠(yuǎn)程文件操作的新請(qǐng)求是否可以使用在此客戶(hù)機(jī)上已知的文件信息。如果可以使用相同的文件信息,則RDR就使用該同一文件信息,而非存儲(chǔ)文件信息的另一副本。
      在再一方面,RDR可以把機(jī)會(huì)鎖與給定遠(yuǎn)程文件的事務(wù)相關(guān)聯(lián)。在一個(gè)實(shí)施例中,該鎖并不禁止本地服務(wù)器訪問(wèn)此文件,但會(huì)引發(fā)此服務(wù)器向客戶(hù)機(jī)發(fā)送鎖已被破壞的消息。RDR隨即可檢查對(duì)于給定的文件鎖是否已被破壞,進(jìn)而確定對(duì)以事務(wù)形式辦理的遠(yuǎn)程文件操作的新請(qǐng)求是否可以使用已在此客戶(hù)機(jī)上高速緩存的文件信息。
      附圖的簡(jiǎn)要描述參考附圖描述了非限制、非窮舉實(shí)施例,其中,若非另外指明,貫穿各個(gè)視圖,同樣的參考標(biāo)號(hào)是指同樣的部件。


      圖1所示是可以使用以事務(wù)形式辦理的遠(yuǎn)程文件操作的系統(tǒng)的示例;圖2示出圖1的系統(tǒng)的客戶(hù)機(jī)和服務(wù)器的組件的示例;圖3和圖3A示出圖2的客戶(hù)機(jī)與服務(wù)器之間以事務(wù)形式辦理的遠(yuǎn)程文件操作的示例處理流程;圖4示出圖2的客戶(hù)機(jī)和服務(wù)器的多個(gè)遠(yuǎn)程文件訪問(wèn)的示例;圖5示出通過(guò)網(wǎng)絡(luò)進(jìn)行事務(wù)的兩階段提交的示例處理流程;圖6示出實(shí)現(xiàn)事務(wù)管理的組件的示例;圖7示出內(nèi)核級(jí)事務(wù)的示例處理流程;圖8示出一個(gè)安全特征的示例;以及圖9示出一個(gè)通用的計(jì)算機(jī)環(huán)境,根據(jù)不同的實(shí)施例,此環(huán)境可用以實(shí)現(xiàn)本文描述的各種技術(shù)。
      較佳實(shí)施例的詳細(xì)描述示例環(huán)境示例如前所述,在數(shù)據(jù)庫(kù)與事務(wù)處理系統(tǒng)中使用了事務(wù),但在下述實(shí)施例中,事務(wù)被用于遠(yuǎn)程文件操作。圖1示出了系統(tǒng)100,其中,客戶(hù)機(jī)可通過(guò)網(wǎng)絡(luò)101在客戶(hù)機(jī)上以事務(wù)形式辦理文件操作。在圖1的示例網(wǎng)絡(luò)環(huán)境中,多個(gè)客戶(hù)機(jī)計(jì)算設(shè)備105、110、115和120——或亦可稱(chēng)之為客戶(hù)機(jī)設(shè)備——通過(guò)網(wǎng)絡(luò)101與至少一個(gè)服務(wù)器設(shè)備125耦合。網(wǎng)絡(luò)101用以代表各種常規(guī)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)和類(lèi)型的任意一種,包括有線和/或無(wú)線網(wǎng)絡(luò)。網(wǎng)絡(luò)101還可使用常規(guī)網(wǎng)絡(luò)協(xié)議之中的任意一種,包括公有和/或私有協(xié)議。例如,網(wǎng)絡(luò)101可以包含因特網(wǎng),以及至少一個(gè)或多個(gè)局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)的部分。
      客戶(hù)機(jī)設(shè)備105可包括各種常規(guī)計(jì)算設(shè)備中的任意一種,包括但不限于,臺(tái)式個(gè)人電腦(PC)、工作站、大型計(jì)算機(jī)、因特網(wǎng)設(shè)備和游戲控制臺(tái)。此外,與網(wǎng)絡(luò)101相關(guān)聯(lián)的客戶(hù)機(jī)設(shè)備還可包括個(gè)人數(shù)字助理(PDA)110、膝上計(jì)算機(jī)115以及蜂窩電話120,等等,這些設(shè)備可經(jīng)由有線和/或無(wú)線鏈路與網(wǎng)絡(luò)101進(jìn)行通信。另外,客戶(hù)機(jī)設(shè)備105、110、115和120的一個(gè)或多個(gè)可以包括同類(lèi)設(shè)備,或者可以包括不同類(lèi)設(shè)備。
      服務(wù)器設(shè)備125可以向計(jì)算設(shè)備105、110、115和120提供各種數(shù)據(jù)和/或功能的任一種。這些數(shù)據(jù)可以是公開(kāi)可用的或者可選擇地受限的,例如,僅限于某些用戶(hù),或僅當(dāng)支付了適當(dāng)?shù)馁M(fèi)用時(shí)才可用,等等。
      服務(wù)器設(shè)備125是網(wǎng)絡(luò)服務(wù)器和應(yīng)用程序服務(wù)器的至少一個(gè),或兩者的組合。服務(wù)器設(shè)備125是作為內(nèi)容來(lái)源的任何設(shè)備,而客戶(hù)機(jī)設(shè)備105、110、115和120包括接收此類(lèi)內(nèi)容的任何設(shè)備。因而,在一個(gè)對(duì)等網(wǎng)絡(luò)中,作為內(nèi)容來(lái)源的設(shè)備即稱(chēng)作服務(wù)器設(shè)備,而接收內(nèi)容的設(shè)備即稱(chēng)作客戶(hù)機(jī)設(shè)備。依照本文描述的示例實(shí)施例,這兩類(lèi)設(shè)備都能夠加載并運(yùn)行軟件程序,包括操作系統(tǒng)和應(yīng)用程序。此外,數(shù)據(jù)與功能可以在客戶(hù)機(jī)設(shè)備105、110、115和120之間共享。即,服務(wù)器設(shè)備125對(duì)各個(gè)客戶(hù)機(jī)設(shè)備來(lái)說(shuō),并非僅有的數(shù)據(jù)和/或功能源。
      在數(shù)據(jù)源130或135處,為服務(wù)器設(shè)備125或客戶(hù)機(jī)設(shè)備105、110、115和120的任一個(gè)準(zhǔn)備和/或提供了包括操作系統(tǒng)和應(yīng)用程序的軟件程序,以供其執(zhí)行。為保持一致性起見(jiàn),如本領(lǐng)域中所已知的,此后的討論均稱(chēng)之為“應(yīng)用程序”,應(yīng)用程序單獨(dú)或組合地至少包括軟件程序、操作系統(tǒng)和應(yīng)用程序中的任一個(gè)。此外,應(yīng)用程序可以離線地從數(shù)據(jù)源130,或在線地從數(shù)據(jù)源135傳播到服務(wù)器設(shè)備125。并且,應(yīng)用程序通常在線地從服務(wù)器設(shè)備125或數(shù)據(jù)源135傳播到客戶(hù)機(jī)設(shè)備105、110、115和120。離線傳播的裝置和方法也是已知的。
      依照下述的各種實(shí)施例,設(shè)備105、110、115、120和125中或在其之間的數(shù)據(jù)和功能的至少一個(gè)的傳播可以被實(shí)現(xiàn)為事務(wù)。更具體地來(lái)說(shuō),事務(wù)是一組操作,它們?cè)谠O(shè)備105、110、115、120和125之一內(nèi),或在諸如圖1的示例等網(wǎng)絡(luò)環(huán)境下,作為單個(gè)原子操作被同步或異步地執(zhí)行。下面將結(jié)合圖2-7,描述通過(guò)網(wǎng)絡(luò)上以事務(wù)形式辦理的遠(yuǎn)程文件操作的一個(gè)示例。
      以事務(wù)形式辦理的遠(yuǎn)程文件操作圖2示出了系統(tǒng)100的兩個(gè)設(shè)備(例如,從設(shè)備105、110、115、120和125中選出)的組件,上述設(shè)備作為客戶(hù)機(jī)202和服務(wù)器204運(yùn)行,目的是以事務(wù)形式辦理的的遠(yuǎn)程文件操作。在此實(shí)施例中,客戶(hù)機(jī)202和服務(wù)器204均使用MicrosoftWindows操作系統(tǒng)的一個(gè)版本。在其它實(shí)施例中,可以使用不同的操作系統(tǒng)。
      在此實(shí)施例中,客戶(hù)機(jī)202包含應(yīng)用程序212、輸入/輸出(I/O)管理器214、文件系統(tǒng)(FS)216、重定向器選擇器218、事務(wù)管理器(TM)222以及重定向器(RDR)220。在此實(shí)施例中,服務(wù)器204包括服務(wù)器組件(SRV)234、I/O管理器214A、FS 216ATM 222A。在此實(shí)施例中,客戶(hù)機(jī)202和服務(wù)器204可通過(guò)網(wǎng)絡(luò)100(圖1)相互通信。在某些實(shí)施例中,這些組件是用軟件實(shí)現(xiàn)的。
      在這個(gè)“Windows”實(shí)施例中,I/O管理器214和214A、FS 216和216A是由NT文件系統(tǒng)(NTFS)實(shí)現(xiàn)的,而重定向器選擇器218是由多重UNC供應(yīng)器(MUP)實(shí)現(xiàn)的,其中UNC是統(tǒng)一命名協(xié)定的縮寫(xiě)。因而,重定向器選擇器218在此亦稱(chēng)為MUP 218。另外,MicrosoftWindows操作系統(tǒng)RDR和SRV(包含附加功能)分別實(shí)現(xiàn)了RDR 220和SRV 234。對(duì)于MicrosoftWindows操作系統(tǒng)的RDR和SRV的示例性添加將會(huì)在下面描述。此外,在此實(shí)施例中,TM 222和TM 222A是作為內(nèi)核層事務(wù)管理器來(lái)實(shí)現(xiàn)的,接下來(lái)將做更詳細(xì)的描述。其它實(shí)施例可以使用不同的I/O管理器、文件系統(tǒng)、重定向器選擇器、TM和/或RDR。
      圖3示出客戶(hù)機(jī)202和服務(wù)器204(見(jiàn)圖2)之間以事務(wù)形式辦理的遠(yuǎn)程文件操作的示例處理流程。參考圖2和圖3,根據(jù)一個(gè)實(shí)施例,以事務(wù)形式辦理的遠(yuǎn)程文件操作如下執(zhí)行。
      在框302中,RDR 220接收對(duì)駐留在服務(wù)器204的文件進(jìn)行以事務(wù)形式辦理的文件操作的請(qǐng)求。典型的文件操作包括創(chuàng)建新文件、讀文件、寫(xiě)文件、復(fù)制文件、重命名文件,等等。在此實(shí)施例中,對(duì)以事務(wù)形式辦理的文件操作的請(qǐng)求是由應(yīng)用程序212生成的,它是如圖2所示的用戶(hù)級(jí)應(yīng)用程序。此請(qǐng)求使用包含事務(wù)上下文的字段的結(jié)構(gòu)。I/O管理器214接收此請(qǐng)求,并判定此請(qǐng)求是針對(duì)本地文件還是遠(yuǎn)程文件。在此實(shí)施例中,I/O管理器214是MicrosoftWindows操作系統(tǒng)的一個(gè)標(biāo)準(zhǔn)組件。例如,應(yīng)用程序212可以通過(guò)以UNC名稱(chēng)(以\\server\share\subdirectory\filename的形式)對(duì)I/O管理器214的調(diào)用來(lái)作出請(qǐng)求。I/O管理器214隨即將此請(qǐng)求傳遞給MUP 218。對(duì)一個(gè)事務(wù)可以有多個(gè)句柄,而對(duì)一給定文件亦可有多個(gè)事務(wù)。另一方面,如果此請(qǐng)求是針對(duì)客戶(hù)機(jī)上的一個(gè)文件,則I/O管理器214將以標(biāo)準(zhǔn)方式把請(qǐng)求傳遞給NTFS 216。
      然后,MUP 218查找執(zhí)行該請(qǐng)求所需的重定向器。在此例中,重定向器是RDR220。在這個(gè)實(shí)施例中,MUP 218是MicrosoftWindows操作系統(tǒng)的一個(gè)標(biāo)準(zhǔn)組件。在此實(shí)施例中,RDR 220是MicrosoftWindows操作系統(tǒng)RDR的一個(gè)版本,但具有附加功能,因此RDR可TM 222交互來(lái)執(zhí)行事務(wù)。這些附加功能包括以下能力,例如,從請(qǐng)求中為以事務(wù)形式辦理的文件操作檢索事務(wù)上下文、為以事務(wù)形式辦理的文件操作分配FCB、通過(guò)網(wǎng)絡(luò)向遠(yuǎn)程設(shè)備發(fā)送事務(wù)、為以事務(wù)形式辦理的文件操作接收回復(fù)(包括文件標(biāo)識(shí)符和版本標(biāo)識(shí)符)、在TM 222指示下執(zhí)行事務(wù)操作、以及向TM 222登記為資源管理器,從而RDR 220可以獲知事務(wù)的狀態(tài)。在某些實(shí)施例中,RDR 220如在共同提交且共同轉(zhuǎn)讓的待決美國(guó)專(zhuān)利申請(qǐng)第09/539,233號(hào)中描述的來(lái)實(shí)現(xiàn),此專(zhuān)利申請(qǐng)于2000年3月30日提交,名為“Transacted FileSystem(以事務(wù)形式辦理的文件系統(tǒng))”,申請(qǐng)?zhí)枮閇代理案卷號(hào)MS1-1781US]。登記為資源管理器將在下面描述。RDR 220包含用于緩沖事務(wù)的資源、高速緩存映射、文件控制塊(FCB)、文件對(duì)象擴(kuò)展(FOBX)以及處理事務(wù)和請(qǐng)求所需的其它結(jié)構(gòu)。
      在框304中,RDR 220從TM 222檢索事務(wù),并封送該事務(wù)以向客戶(hù)機(jī)204發(fā)送。在一實(shí)施例中,RDR 220通過(guò)調(diào)用由TM 222對(duì)外設(shè)置的API(其實(shí)施例在下面進(jìn)行描述)來(lái)檢索事務(wù),隨后通過(guò)對(duì)事務(wù)信息進(jìn)行格式化(例,封送二進(jìn)制大對(duì)象)來(lái)封送該事務(wù),以使用被擴(kuò)展成支持事務(wù)的SMB協(xié)議的一個(gè)版本來(lái)發(fā)送。一個(gè)示例性實(shí)施例的SMB擴(kuò)展將在下文結(jié)合表1-3進(jìn)行總結(jié)。在框306,RDR 220向服務(wù)器204發(fā)送事務(wù)與請(qǐng)求,如箭頭236所示。在框308,RDR 220從服務(wù)器204接收文件操作的結(jié)果。例如,服務(wù)器204發(fā)送對(duì)該請(qǐng)求的響應(yīng),此響應(yīng)包含前述的文件和版本標(biāo)識(shí)符。在此實(shí)施例中,SRV234是MicrosoftWindows操作系統(tǒng)SRV的一個(gè)版本,但具有附加功能,因此SRV可經(jīng)網(wǎng)絡(luò)與客戶(hù)機(jī)交互,以使用SMB的擴(kuò)展來(lái)執(zhí)行事務(wù),包括在以事務(wù)形式辦理的遠(yuǎn)程文件操作過(guò)程中向客戶(hù)機(jī)傳送文件和版本標(biāo)識(shí)符。

      表1REQ_CREATE_WITH_EXTRA_OPTIONS


      表2RESP_CREATE_WITH_EXTRA_OPTIONS


      表3REQ_FIND_FIRST2


      表4RSP_FIND_FIRST2

      表5REQ_ECHO

      表6RSP_ECHO

      表7圖3A根據(jù)一個(gè)實(shí)施例,更為詳細(xì)地描述了框302(見(jiàn)圖3)。在框312中,RDR 220為所請(qǐng)求的文件操作檢索事務(wù)上下文。在打開(kāi)以事務(wù)形式辦理的的遠(yuǎn)程文件時(shí),RDR 220判定事務(wù)是否已與此請(qǐng)求相關(guān)聯(lián)。例如,在一個(gè)實(shí)施例中,是通過(guò)把事務(wù)附加到線程的方式來(lái)將其與請(qǐng)求相關(guān)聯(lián),但在其它實(shí)施例中,可以使用不同的方法來(lái)將事務(wù)與請(qǐng)求相關(guān)聯(lián)。在一個(gè)實(shí)施例中,RDR 220通過(guò)檢查此請(qǐng)求是否有與其相關(guān)聯(lián)的事務(wù)句柄來(lái)執(zhí)行這個(gè)操作。若有,則該請(qǐng)求被加入到已經(jīng)存在的事務(wù)中。若無(wú),RDR 220非事務(wù)請(qǐng)求的標(biāo)準(zhǔn)方式處理此請(qǐng)求。
      RDR 220隨即對(duì)此請(qǐng)求分配一FCB。如前所述,具有多個(gè)請(qǐng)求的多個(gè)事務(wù)可打開(kāi)一給定文件。因而在框302(見(jiàn)圖3)的一個(gè)實(shí)施例中,執(zhí)行框314的操作,RDR 220可判定對(duì)是否有現(xiàn)存的FCB可用于該請(qǐng)求。在此實(shí)施例中,RDR 220檢查請(qǐng)求的文件(即,路徑名)及與作出請(qǐng)求的線程相關(guān)聯(lián)的事務(wù)上下文是否與現(xiàn)存FCB的那些相匹配。例如,如果在同一事務(wù)中提出了兩個(gè)對(duì)同一文件的寫(xiě)操作請(qǐng)求,則在處理第二個(gè)請(qǐng)求時(shí),對(duì)于第一個(gè)請(qǐng)求應(yīng)該已經(jīng)存在FCB。因?yàn)閮蓚€(gè)操作都是寫(xiě)操作,同一個(gè)FCB可以同時(shí)被兩者所使用。
      如果在框314中,RDR 220判定存在具有同一事務(wù)上下文、同一文件(即,路徑名)和同一版本的FCB,則在框316中,為該請(qǐng)求使用此現(xiàn)存FCB。在某些實(shí)現(xiàn)中,RDR 220會(huì)使用具有最新版本的FCB。例如,如果文件的讀操作在尚未提交的同一文件的寫(xiě)操作之后,則RDR 220會(huì)使用當(dāng)前由寫(xiě)操作所使用的文件的版本。這個(gè)方法考慮到對(duì)高速緩存的更高效率的利用。
      然而,如果在框314中,無(wú)法為此請(qǐng)求使用現(xiàn)存的FCB,則在框318中,RDR為此請(qǐng)求創(chuàng)建一個(gè)新的FCB。在一個(gè)可選的實(shí)施例中,為每個(gè)請(qǐng)求創(chuàng)建一個(gè)新的FCB。
      圖4示出對(duì)于同一文件的多個(gè)尚未提交的事務(wù)請(qǐng)求的示例。如圖4所示,操作401相對(duì)應(yīng)于對(duì)文件的讀操作的請(qǐng)求,。即,此文件操作是“讀打開(kāi)”。操作401有句柄H1和事務(wù)T1與其相關(guān)聯(lián)。RDR 220(圖2)所請(qǐng)求的文件版本記為版本A。假設(shè)對(duì)此文件,這是首個(gè)尚未提交的事務(wù),則從服務(wù)器204(圖2)中檢索版本A,并將其緩存在客戶(hù)機(jī)202中(見(jiàn)圖2)。
      之后,對(duì)于同一文件請(qǐng)求操作402。在此例中,操作402也是讀操作,它具有句柄H2和事務(wù)T2。因?yàn)樵撌聞?wù)與操作401的事務(wù)不同,因此RDR 220從服務(wù)器204再次檢索該文件的版本A。
      在此例中,然后在與操作402相同的事務(wù)中,對(duì)同一文件請(qǐng)求操作403。因此,操作403有句柄H3,且被加入到事務(wù)T2中。然而,此例中的操作403是寫(xiě)操作,因而RDR 220在本地記住(例,高速緩存)該文件的版本B。版本B有時(shí)被稱(chēng)為“臟版本”。
      接下來(lái),在與操作402和403的相同事務(wù)中,對(duì)于同一文件請(qǐng)求操作404。因而,操作404有句柄H4,且被加入到事務(wù)T2中。在此例中,操作404是讀操作。在此實(shí)施例中,作為框314(見(jiàn)圖3A)的結(jié)果,RDR 220會(huì)為操作404記住并可能高速緩存版本B。
      在一個(gè)不同的事務(wù)中,對(duì)于同一文件請(qǐng)求操作405。因而,操作405有句柄H5,且被與一新事務(wù)T3相關(guān)聯(lián)。因?yàn)樵撌聞?wù)與先前的操作所屬事務(wù)均不同,在一個(gè)實(shí)施例中,RDR 220再次從服務(wù)器204檢索此文件的版本A。在另一實(shí)施例中,RDR 220無(wú)需向服務(wù)器204(圖2)查詢(xún)即可認(rèn)識(shí)到版本A仍是當(dāng)前版本,隨即使用此“本地”版本A。例如,此可選的實(shí)施例可以使用機(jī)會(huì)鎖,從而可以得知駐留在服務(wù)器204上的文件的任何更新的版本。即,RDR 220可以將一機(jī)會(huì)鎖與該文件相關(guān)聯(lián),此鎖并不禁止對(duì)服務(wù)器204上的文件的寫(xiě)操作,但引發(fā)服務(wù)器204發(fā)信號(hào)通知RDR 220該鎖已被破壞。在這樣的情況下,RDR 220從而得知版本A不再是當(dāng)前版本。在又一實(shí)施例中,RDR 220可以向服務(wù)器204查詢(xún),以判定該文件的當(dāng)前版本,然后重用與當(dāng)前版本相關(guān)聯(lián)的現(xiàn)存FCB。
      接下來(lái),在操作406中,提交事務(wù)T2。這具有改變服務(wù)器204上的版本的效果。在服務(wù)器204上存儲(chǔ)的該新版本被記為版本C。如前所述,由于RDR 220在所有遠(yuǎn)程事務(wù)期間登記為資源管理器,因此RDR 220知道服務(wù)器204具有該文件的新版本。
      接下來(lái),在與操作401相同的事務(wù)中,對(duì)同一文件請(qǐng)求操作407。于是,操作407有句柄H6,且被加入到事務(wù)T1。然而,因?yàn)镽DR 220知道服務(wù)器204上該文件的版本C,因此RDR 220為此操作記住并可能高速緩存版本C。在某些實(shí)施例中,RDR 220從服務(wù)器204檢索版本C。
      類(lèi)似地,當(dāng)由與操作405相同的事務(wù)對(duì)同一文件請(qǐng)求操作408時(shí),操作408有句柄H7,且被加入到事務(wù)T3中。因?yàn)镽DR 220知道服務(wù)器204上該文件的版本C,因此RDR 220也為該操作記住并可能高速緩存版本C。
      圖5示出依據(jù)一個(gè)實(shí)施例,如何將緩存在客戶(hù)機(jī)202(見(jiàn)圖2)的數(shù)據(jù)轉(zhuǎn)儲(chǔ)清除到(即,持久地保存)服務(wù)器204(圖2)。參考圖2和5,依據(jù)一個(gè)實(shí)施例,客戶(hù)機(jī)202如下所述地地將數(shù)據(jù)轉(zhuǎn)儲(chǔ)清除到服務(wù)器204。
      在框502中,生成數(shù)據(jù)的應(yīng)用程序作出調(diào)用或者發(fā)出請(qǐng)求以提交事務(wù)。該調(diào)用或請(qǐng)求被傳遞給TM 222。作為響應(yīng),TM 222生成一個(gè)預(yù)準(zhǔn)備通知(將在下面結(jié)合示例事務(wù)管理器進(jìn)行描述)。
      在此實(shí)現(xiàn)中,RDR 220從TM 222接收到預(yù)準(zhǔn)備通知,如框504所示。作為響應(yīng),RDR 220通過(guò)網(wǎng)絡(luò)將數(shù)據(jù)轉(zhuǎn)儲(chǔ)清除到SRV 234。SRV 234進(jìn)而將數(shù)據(jù)傳遞給NTFS 216A。這些操作由框506表示。在某些實(shí)施例中,服務(wù)器204的TM 222A發(fā)信號(hào)通知RDR 220預(yù)準(zhǔn)備操作何時(shí)完成。框504和506幫助確定在執(zhí)行準(zhǔn)備操作(將在下面結(jié)合示例事務(wù)管理器進(jìn)行描述)前,要從客戶(hù)機(jī)202寫(xiě)到服務(wù)器204的數(shù)據(jù)已在服務(wù)器204上存在。
      在框508中,RDR 220從TM 222接收到準(zhǔn)備通知(將在下面結(jié)合示例事務(wù)管理器進(jìn)行描述)。在一個(gè)實(shí)施例中,響應(yīng)于準(zhǔn)備通知,RDR 220向服務(wù)器204發(fā)送準(zhǔn)備通知的消息,此消息被傳遞給TM 222A。TM 222A進(jìn)而將該準(zhǔn)備通知傳遞給NTFS 216A。這些操作由框510和512表示。該準(zhǔn)備通知使得客戶(hù)機(jī)202和服務(wù)器204以如下方式存儲(chǔ)數(shù)據(jù),即允許數(shù)據(jù)被提交或被回退。在某些實(shí)施例中,服務(wù)器204的TM 222A發(fā)信號(hào)通知RDR 220準(zhǔn)備操作何時(shí)完成。隨即使用標(biāo)準(zhǔn)的兩階段提交操作(例,使事務(wù)被提交或中止的操作)來(lái)處理數(shù)據(jù),如框514所示。
      盡管在上文中,事務(wù)管理被描述成使用單獨(dú)的TM組件(即,TM 222和222A)來(lái)執(zhí)行,然而在其它實(shí)施例中,事務(wù)管理的基礎(chǔ)結(jié)構(gòu)可被集成到文件系統(tǒng)的基礎(chǔ)結(jié)構(gòu)中。且在上述的集成實(shí)施例中,事務(wù)消息(例,預(yù)準(zhǔn)備、準(zhǔn)備、提交、中止等等,如下所述)在傳輸信道上隨文件消息一同流動(dòng)。
      示例事務(wù)管理器圖6示出依照一個(gè)實(shí)施例在執(zhí)行事務(wù)時(shí)所用的組件。組成特定事務(wù)的一組操作共有一些至少為本領(lǐng)域技術(shù)人員所知的屬性,這些特性縮寫(xiě)為“ACID”,包括有“原子性”、“一致性”、“隔離性”以及“持久性”。更具體地從事務(wù)中相應(yīng)操作所得的數(shù)據(jù)更新要么都是永久性的,要么無(wú)一是永久性的(原子性);事務(wù)使底層數(shù)據(jù)處于一致的狀態(tài)(一致性);事務(wù)更新的效果對(duì)其它并發(fā)運(yùn)行的操作不可見(jiàn),直到整個(gè)事務(wù)變?yōu)橛谰?隔離性);以及,當(dāng)事務(wù)的輸出已被確定的情況下,結(jié)果可確保不再改變(持久性)。
      圖6的內(nèi)核級(jí)事務(wù)管理示例針對(duì)分布式事務(wù)的例子,此分布式事務(wù)牽涉一個(gè)以上設(shè)備,且需維持事務(wù)所期望的“ACID”特征。此外,盡管圖6的示例參考了內(nèi)核對(duì)象,然而此例絕非僅限于由內(nèi)核對(duì)象所實(shí)現(xiàn)的事務(wù)。更具體地,此處所描述的事務(wù)可由內(nèi)核對(duì)象之外的其它對(duì)象所實(shí)現(xiàn),或者可由不同種類(lèi)的事務(wù)管理器實(shí)現(xiàn)。
      在圖6中,對(duì)應(yīng)于客戶(hù)機(jī)應(yīng)用程序600的事務(wù)至少使用在第一設(shè)備上的事務(wù)管理器605,以及第二設(shè)備上的客戶(hù)機(jī)應(yīng)用程序600B和事務(wù)管理器635??蛻?hù)機(jī)應(yīng)用程序600B與客戶(hù)機(jī)應(yīng)用程序600相關(guān)聯(lián)。相互通信的事務(wù)管理器605和635可以是內(nèi)核對(duì)象的集合,這些內(nèi)核對(duì)象維護(hù)關(guān)于所有事務(wù)和資源的狀態(tài)信息,此外還協(xié)調(diào)客戶(hù)機(jī)應(yīng)用程序與相關(guān)聯(lián)的資源管理器(RM)之間的交互或協(xié)議。
      圖6的示例中的資源管理器,包括RM 625和RM 630,維護(hù)能夠以穩(wěn)定狀態(tài)存儲(chǔ)數(shù)據(jù)的至少一個(gè)底層資源的狀態(tài)。這類(lèi)資源的非排他示例包括數(shù)據(jù)庫(kù)和消息隊(duì)列。在圖6的示例實(shí)施例中的第一設(shè)備中,RM 625對(duì)應(yīng)于資源627;RM 630對(duì)應(yīng)于資源632;在第二設(shè)備中,RM 655對(duì)應(yīng)于資源657。
      如圖6所示,第一設(shè)備上的事務(wù)管理器605包括以下內(nèi)核對(duì)象事務(wù)對(duì)象(TX)610,資源管理器對(duì)象(RMO)615以及登記對(duì)象(EN)620;第二設(shè)備上的事務(wù)管理器635包括以下內(nèi)核對(duì)象TX 640,RMO 645以及EN 650。TX代表特定的事務(wù),并可由參與此事務(wù)的操作打開(kāi)。
      RMO代表參與特定事務(wù)的資源。RMO對(duì)事務(wù)的參與包括接收兩階段提交消息。此外,RMO是持久的,因而對(duì)應(yīng)的事務(wù)管理器知道哪個(gè)事務(wù)的輸出結(jié)果可被發(fā)送到對(duì)應(yīng)的RM?;蛘?,RMO可以是暫時(shí)性的,從而使得客戶(hù)機(jī)應(yīng)用程序能夠無(wú)需越過(guò)失敗來(lái)管理持久性RMO,就可訂閱事務(wù)通知流。
      EN代表事務(wù)與資源管理器間的關(guān)系。資源管理器通過(guò)在其上創(chuàng)建登記來(lái)表示它將參與此事務(wù)。當(dāng)RMO被請(qǐng)求對(duì)特定事務(wù)執(zhí)行操作(例如準(zhǔn)備、提交,等等),它使用EN來(lái)表示此參與。對(duì)特定事務(wù),資源管理器可以有一個(gè)以上的登記對(duì)象(EN)。
      參考圖6和7的示例對(duì)于內(nèi)核環(huán)境,如下描述了被實(shí)現(xiàn)來(lái)確保事務(wù)能成功地更新所有適當(dāng)?shù)奈募膬山財(cái)嗵峤粎f(xié)議。特別地,在客戶(hù)機(jī)應(yīng)用程序600打開(kāi)與第一設(shè)備上的事務(wù)管理器605相對(duì)應(yīng)的內(nèi)核對(duì)象,而SRV 234(圖2)打開(kāi)與第二設(shè)備上的事務(wù)管理器635相對(duì)應(yīng)的內(nèi)核對(duì)象之后,“準(zhǔn)備”階段705就開(kāi)始了,此時(shí)事務(wù)中的每一RM從對(duì)應(yīng)的事務(wù)管理器發(fā)送(705)“準(zhǔn)備”命令。當(dāng)接到警報(bào),RM通過(guò)使資源數(shù)據(jù)處于持久狀態(tài),使得各個(gè)資源中的數(shù)據(jù)能夠被“提交”或者“回退”,來(lái)作好準(zhǔn)備(710)。準(zhǔn)備好之后,RM發(fā)送(715)一個(gè)確認(rèn)消息給對(duì)應(yīng)事務(wù)管理器的TX。
      當(dāng)解決事務(wù)時(shí),即執(zhí)行“提交”階段720,由此,該事務(wù)管理器的TX向每個(gè)相關(guān)聯(lián)的RM發(fā)送(725)“已提交”或“中止/回退”的事務(wù)結(jié)果。RM隨即將此結(jié)果記錄在相關(guān)聯(lián)的日志中,并且底層數(shù)據(jù)則根據(jù)該事務(wù)結(jié)果被提交或被回退。替換實(shí)施例可允許易失性的登記,即對(duì)其事務(wù)的數(shù)據(jù)不是持久性的,因而這些數(shù)據(jù)也不被記入日志或恢復(fù)。
      內(nèi)核級(jí)的事務(wù)管理可通過(guò)使用應(yīng)用程序接口(API)來(lái)實(shí)現(xiàn),這些API適用的系統(tǒng)體系結(jié)構(gòu)包括,但不限于,MicrosoftWin32應(yīng)用編程接口和MicrosoftWindows操作系統(tǒng)。此處描述的API通過(guò)基于句柄的接口來(lái)展現(xiàn),“句柄”指的是為API所設(shè)的對(duì)象。此外,除非明確地請(qǐng)求異步操作,否則相應(yīng)內(nèi)核對(duì)象——尤其是TX和RMO——的操作都是同步的。另外,對(duì)應(yīng)于事務(wù)的不同實(shí)施例的操作可由此處描述的一個(gè)或多個(gè)API的各種組合來(lái)實(shí)現(xiàn)。亦即,某些實(shí)施例可以使用此文所描述的所有API,而其它實(shí)現(xiàn)可以使用其不同的組合。
      下面將提供用來(lái)在TX內(nèi)核對(duì)象上實(shí)現(xiàn)操作的API,以及API功能的對(duì)應(yīng)描述(相關(guān)例程的更為詳盡的描述將在之后進(jìn)行)·PreprepareEnlistment亦稱(chēng)作“階段0”處理,請(qǐng)求TX向所有相關(guān)聯(lián)的RM發(fā)送預(yù)準(zhǔn)備消息;·PrepareEnlistment請(qǐng)求TX向所有已登記的RM發(fā)送準(zhǔn)備請(qǐng)求;·CreateTransaction打開(kāi)新TX;·OpenTransaction打開(kāi)已存在的TX;·CommitTransaction請(qǐng)求提交TX;·RollbackTransaction請(qǐng)求TX中止或回退該事務(wù);·SavepointTransaction請(qǐng)求TX保存該事務(wù)狀態(tài);
      ·GetTransactionInfo檢索關(guān)于該TX的信息;以及·SetTransactionInfo設(shè)置關(guān)于該TX的信息。
      下面將提供對(duì)RMO內(nèi)核對(duì)象實(shí)現(xiàn)操作的API,以及對(duì)該API功能的相應(yīng)描述(相關(guān)例程的更為詳盡的描述將在之后進(jìn)行)·CreateResourceManager創(chuàng)建表示資源的新RMO;·OpenResourceManager打開(kāi)已存在的RMO;·DestroyREsourceManager銷(xiāo)毀RMO,使之不再持久;·GetResourceManagerInfo檢索關(guān)于RMO的信息;·SetResourceMangerInfo設(shè)置關(guān)于RMO的信息;·CreateEnlistment使RMO加入到一個(gè)事務(wù)中,并檢索相關(guān)通知;以及·GetNotificationResourceManager排隊(duì)等候并返回可用RM通知。
      下面將提供用于在加入事務(wù)后由RMO內(nèi)核對(duì)象在TX內(nèi)核對(duì)象上實(shí)現(xiàn)操作的API,以及對(duì)該API功能的相應(yīng)描述(相關(guān)例程更為詳盡的描述將在之后進(jìn)行)·PrePrepareComplete表明RM已完成了對(duì)應(yīng)事務(wù)管理器所請(qǐng)求的預(yù)準(zhǔn)備;·PrepareComplete表明RM已完成了對(duì)應(yīng)事務(wù)管理器所請(qǐng)求的事務(wù)準(zhǔn)備;·RollbackComplete表明RM已完成對(duì)應(yīng)事務(wù)管理器所請(qǐng)求的對(duì)已執(zhí)行事務(wù)工作的回退;以及·CommitComplete表明RM已完成對(duì)應(yīng)事務(wù)管理器所請(qǐng)求的對(duì)事務(wù)的提交。
      不幸的是,與用于實(shí)現(xiàn)事務(wù)管理的內(nèi)核對(duì)象TX、RMO以及EN相關(guān)聯(lián)的API可能會(huì)使一個(gè)或多個(gè)內(nèi)核對(duì)象暴露在各種安全攻擊之下。例如,惡意或無(wú)效的RM可以把自己登記到事務(wù)中,從而導(dǎo)致通過(guò)不響應(yīng)函數(shù)調(diào)用,或強(qiáng)制事務(wù)中斷的服務(wù)拒絕攻擊。因而,涉及圖6中的更進(jìn)一步的說(shuō)明性示例針對(duì)安全、內(nèi)核級(jí)分布式事務(wù)。
      圖6的實(shí)施例通過(guò)向相應(yīng)內(nèi)核對(duì)象的至少一個(gè)應(yīng)用安全描述符,為易受攻擊的內(nèi)核對(duì)象進(jìn)一步提供一種安全解決方案,該描述符可包含訪問(wèn)控制列表(ACL)。
      在第一設(shè)備中,向TX 610應(yīng)用ACL 660,向RMO 615應(yīng)用ACL 665,并向EN 620應(yīng)用ACL 670。在第二設(shè)備中,向TX 640應(yīng)用ACL 675,向RMO 645應(yīng)用ACL 680,并向EN 650應(yīng)用ACL 685。
      ACL定義了特定用戶(hù)或用戶(hù)組被允許或拒絕通過(guò)特定對(duì)象行使的“權(quán)限”。更具體地,如圖8的示例ACL 810所示,應(yīng)用或附加到內(nèi)核對(duì)象的ACL至少包括訪問(wèn)控制條目(ACE),該條目包含對(duì)應(yīng)的安全標(biāo)識(shí)符(SID)和一組對(duì)應(yīng)的權(quán)限。圖8中的ACE條目1-12分別包括了對(duì)應(yīng)的SID 1-12,以及對(duì)應(yīng)的權(quán)限1-12。
      SID 1-12標(biāo)識(shí)了可以試圖在應(yīng)用該ACL的內(nèi)核對(duì)象上實(shí)現(xiàn)一個(gè)操作或一系列操作的用戶(hù)或用戶(hù)組。權(quán)限1-12指定了能夠由此SID所標(biāo)識(shí)的用戶(hù)或用戶(hù)組可對(duì)相應(yīng)內(nèi)核對(duì)象執(zhí)行的一個(gè)操作或一系列操作,并進(jìn)一步指定了該一個(gè)或多個(gè)操作對(duì)所標(biāo)識(shí)的用戶(hù)或用戶(hù)組的可訪問(wèn)性。即,權(quán)限1-12可表明所標(biāo)識(shí)的用戶(hù)或用戶(hù)組被允許執(zhí)行指定的操作,或所標(biāo)識(shí)的用戶(hù)或用戶(hù)組被禁止執(zhí)行指定的操作。
      下面是可由應(yīng)用于TX的ACL中的權(quán)限1-12所指定的示例操作的列表,緊接著是該操作功能的描述。權(quán)限1-12進(jìn)一步指定,對(duì)由相應(yīng)SID所標(biāo)識(shí)的用戶(hù)或用戶(hù)組,該操作在TX上是被允許或拒絕的。
      ·TRANSACTION_QUERY_INFORMATION獲得關(guān)于TX的信息;·TRANSACTION_SET_INFORMATION設(shè)置關(guān)于TX的信息;·TRANSACTION_ENLIST在此事務(wù)中向TX登記;·TRANSACTION_COMMIT使所有與TX相關(guān)聯(lián)的數(shù)據(jù)更新為持久的;·TRANSACTION_ROLLBACK中止,即,回退TX上的操作;·TRANSACTION_PROPOGATE從TX向另一對(duì)象發(fā)送數(shù)據(jù);·TRANSACTION_SAVEPOINT保存該事務(wù)的當(dāng)前點(diǎn);以及·TRANSACTION_MARSHAL向另一設(shè)備發(fā)送關(guān)于該事務(wù)的數(shù)據(jù)。
      下面是應(yīng)用于RMO的ACL中的權(quán)限1-12所指定的示例操作的列表,緊接著是該操作功能的描述。權(quán)限1-12進(jìn)一步指定,對(duì)由相應(yīng)SID所標(biāo)識(shí)的用戶(hù)或用戶(hù)組,該操作在RMO上是被允許或拒絕的。
      ·RESOURCEMANAGER_QUERY_INFORMATION獲得關(guān)于RMO的信息;·RESOURCEMANAGER_SET_INFORMATION設(shè)置關(guān)于RMO的信息;·RESOURCEMANAGER_RECOVER在事務(wù)失敗的時(shí)刻確定事務(wù)的狀態(tài);·RESOURCEMANAGER_ENLIST在事務(wù)中登記RMO;·RESOURCEMANAGER_GET_NOTIFICATION當(dāng)事務(wù)被解決后,從事務(wù)管理器接收通知;·RESOURCEMANAGER_REGISTER_PRORTOCOL在事務(wù)中注冊(cè)RMO所支持的協(xié)議;以及·RESOURCEMANAGER_COMPLETE_PROPOGATION根據(jù)事務(wù)解決設(shè)置資源。
      下面是應(yīng)用于EN的ACL中的權(quán)限1-12所指定的示例操作的列表,緊接著是該操作功能的描述。權(quán)限1-12進(jìn)一步指定,對(duì)由相應(yīng)SID所標(biāo)識(shí)的用戶(hù)或用戶(hù)組,該操作在EN上是被允許或拒絕的。
      ·ENLISTMENT_QUERY_INFORMATION獲得關(guān)于EN的信息;·ENLISTMENT_SET_INFORMATION設(shè)置關(guān)于EN的信息;·ENLISTMENT_RECOVER在事務(wù)失敗的時(shí)刻確定事務(wù)的狀態(tài);·ENSLITMENT_REFERENCE獲得并引用(或解除引用)登記鍵;·ENLISTMENT_SUBORDINATE_RIGHTS回退事務(wù)并響應(yīng)通知;以及·ENLISTMENT_SUPERIOR_RIGHTS執(zhí)行高級(jí)事務(wù)管理器將執(zhí)行的操作;例如啟動(dòng)預(yù)準(zhǔn)備、準(zhǔn)備,或事務(wù)中的高級(jí)回退操作。
      因此,每個(gè)內(nèi)核對(duì)象TX、RMO以及EN可有分別對(duì)其應(yīng)用的ACL。因而,當(dāng)API試圖在內(nèi)核對(duì)象的相應(yīng)一個(gè)上啟動(dòng)操作時(shí),必須使該ACL有權(quán)確定,對(duì)于發(fā)起該API的用戶(hù)或用戶(hù)組,此操作是被允許還是被拒絕。
      更特定情況下,當(dāng)打開(kāi)句柄來(lái)執(zhí)行操作時(shí),對(duì)照ACL中的SID來(lái)檢查對(duì)應(yīng)于該API的用戶(hù)或用戶(hù)組;生成被允許的操作的列表;然后對(duì)照對(duì)給定句柄上SID所允許的操作,來(lái)檢查由該API所指示的操作。
      用于保護(hù)內(nèi)核對(duì)象間的事務(wù)管理并實(shí)施安全參數(shù)的替換實(shí)施例包括,依據(jù)MicrosoftWindows操作系統(tǒng)的安全模型,向參與事務(wù)的內(nèi)核對(duì)象應(yīng)用安全描述符。
      如上所述,這些API被展示為基于句柄的接口,此接口被用來(lái)實(shí)現(xiàn)該安全模型。下文包括對(duì)上面所列出的、可在TX內(nèi)核對(duì)象上實(shí)現(xiàn)操作的API的更詳盡的描述。這些描述包含了對(duì)例程、相應(yīng)參數(shù)和返回值的描述。
      PreprepareEnlistment(IN PHANDLE TransactionHandle;IN PHANDLEResourceManagerHandle)·該例程通過(guò)向所有相關(guān)聯(lián)的RM發(fā)出預(yù)準(zhǔn)備請(qǐng)求來(lái)請(qǐng)求對(duì)一個(gè)事務(wù)進(jìn)行“預(yù)準(zhǔn)備”。預(yù)準(zhǔn)備給于有類(lèi)似于高速緩存屬性的RM在事務(wù)進(jìn)入已準(zhǔn)備狀態(tài)前將其高速緩存轉(zhuǎn)儲(chǔ)清除到可能其它RM的機(jī)會(huì),在準(zhǔn)備狀態(tài)中,下游的RM將不能再接受改變。
      ·如果此例程未被調(diào)用,而事務(wù)參與者請(qǐng)求階段0處理,則發(fā)出預(yù)準(zhǔn)備請(qǐng)求,以請(qǐng)求何時(shí)接收準(zhǔn)備。然而,如果沒(méi)有PreprepareEnlistment,包括類(lèi)似于高速緩存的RM的某些配置可能導(dǎo)致分布式情況下的不必要的事務(wù)回退。
      ·自變量TransactionHandle提供表示需預(yù)準(zhǔn)備的事務(wù)的句柄;ResourceManagerHandle向預(yù)準(zhǔn)備該事務(wù)的高級(jí)TM/CRM提供句柄。只有該高級(jí)TM/CRM能夠在此事務(wù)上調(diào)用PrepareEnlistment、SuperiorCommitTransaction和SuperioRollbackTransaction。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_TM_TOO_LATEPrepareEnlistment(IN PHANDLE TransactionHandle;IN PHANDLEResourceMangerHandle);·該例程通過(guò)向所有與其相關(guān)聯(lián)的ResourceManager(資源管理器)發(fā)出準(zhǔn)備請(qǐng)求,來(lái)請(qǐng)求“準(zhǔn)備”事務(wù)。此請(qǐng)求啟動(dòng)了兩階段提交協(xié)議。
      ·發(fā)出PrepareEnlistment的事務(wù)參與者使得Transaction(事務(wù))對(duì)象進(jìn)入能夠幸免于系統(tǒng)或應(yīng)用程序崩潰的持久狀態(tài);為能交付結(jié)果,在任何類(lèi)型的失敗后,前述參與者對(duì)該事務(wù)執(zhí)行恢復(fù)。若不能滿足此要求,可能導(dǎo)致資源泄漏,以及不一致的事務(wù)結(jié)果。
      ·自變量TransactionHandle為需準(zhǔn)備的事務(wù)提供一個(gè)句柄;和ResourceManagerHandle向正在準(zhǔn)備該事務(wù)的TM提供一個(gè)句柄。如果該事務(wù)已(經(jīng)由對(duì)PreprepareEnlistment的調(diào)用)被預(yù)準(zhǔn)備,則ResourceManagerHandle將在調(diào)用中所使用的高級(jí)TM/CRM與PreprepareEnlistment匹配。并且在此事務(wù)中,只有調(diào)用該API的高級(jí)TM/CRM被允許調(diào)用SuperiorCommittransaction和SuperiorRollbackTransaction。
      ·返回值
      STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_TM_TOO_LATESTATUS_RM_NOT_RECOVERABLECreateTransaction(OUT PHANDLE TransactionHandle,INULONG DesiredAccess OPTIONAL;INPOBJECT_ATTRIBUTESObjectAttfibutes OPTIONAL;INULONG CreateOptions OPTIONAL;INPHANDLE ResourceManagerHandleOPTIONAL;INNOTIFICATION_MASK NotificationMask OPTIONAL;INLPVOIDTransactionKey OPTIONAL)·該例程創(chuàng)建一個(gè)新的Transaction對(duì)象,并返回此新對(duì)象的句柄。
      ·可選地(若指定ResourceManagerHandle參數(shù)),當(dāng)其被成功創(chuàng)建后,此例程在該事務(wù)上執(zhí)行“Join(加入)”操作。
      ·客戶(hù)機(jī)用CloseHandle API來(lái)關(guān)閉該事務(wù)句柄。如果最后一個(gè)事務(wù)句柄關(guān)閉,且沒(méi)有任何人在該事務(wù)上調(diào)用CommitTransaction,則該事務(wù)被隱式地回退。
      ·自變量TransactionHandle提供指向?qū)⑹盏皆撔率聞?wù)句柄的位置的指針。
      DesiredAccess提供指明期望的訪問(wèn)級(jí)別的掩碼。有效的訪問(wèn)掩碼選項(xiàng)有SYNCHRONIZE可在此句柄上執(zhí)行同步操作TRANSACTION_COMMIT 可用此句柄提交事務(wù)TRANSACTION_PREPARE可用此句柄提交事務(wù)TRANSACTION_ROLLBACK 可用此句柄中止事務(wù)TRANSACTION_SAVEPOINT 可用此句柄為該事務(wù)創(chuàng)建保存點(diǎn)TRANSACTION_JOIN 可用此句柄作為RM加入該事務(wù)TRANSACTION_READ_ATTRIBUTES 可讀與事務(wù)相關(guān)聯(lián)的屬性TRANSACTION_WRITE_ATTRIBUTES 可寫(xiě)與事務(wù)相關(guān)聯(lián)的屬性O(shè)bjectAttributes為一個(gè)可選對(duì)象屬性結(jié)構(gòu)提供一個(gè)指針;CreateOptions提供可選事務(wù)標(biāo)記。有效的創(chuàng)建標(biāo)志選項(xiàng)包括TRANSACTION_CREATE_PRESUMED_NOTHING創(chuàng)建一個(gè)“假定為空”的事務(wù)ResourceManagerHandle提供接收關(guān)于指定事務(wù)的通知的ResourceManager的句柄;NotificationMask指明該資源管理器關(guān)于此事務(wù)所希望接收的通知;以及TransactionKey指定該RM所希望與此事務(wù)的任何通知一同接收的不透明指針值。RM可以此將通知與在該RM地址空間中的某個(gè)對(duì)象相關(guān)聯(lián),從而避免每當(dāng)通知出現(xiàn)都需要進(jìn)行查找。
      ·返回值STATUS_SUCCESSSTATUS_INVALID_PARAMETERSTATUS_OBJECT_NAME_COLLISIONSTATUS_OBJECT_NAME_INVALIDSTATUS_PRIVILEGE_NOT_HELDSTATUS_INSUFFICIENT_RESOURCESOpenTransaction(OUT PHANDLE TransactionHandle,INACCESS_MASK DesiredAccess,INPOBJECT_ATTRIBUTESObjectAttributesINPHANDLE ResourceManagerHandleoptional,INNOTIFICATION_MASK NotificationMask optional,INLPVOIDTransactionKey optional);·此例程查詢(xún)一個(gè)存在的Transaction對(duì)象,然后返回此Transaction的句柄。調(diào)用者在ObjectAttributes的ObjectName字段中指定GUID的字符表示。
      ·可選地(若指定了ResourceManagerHandle參數(shù)),當(dāng)該事務(wù)被打開(kāi)后,此例程也在該事務(wù)上執(zhí)行“Join”的操作。
      ·客戶(hù)機(jī)用CloseHandle API來(lái)關(guān)閉該事務(wù)句柄。如果最后一個(gè)事務(wù)句柄關(guān)閉,且沒(méi)有人在該事務(wù)上調(diào)用CommitTransaction,則該事務(wù)被隱式地回退。
      ·自變量TransactionHandle提供一個(gè)指向若打開(kāi)操作成功則將收該事務(wù)句柄的位置的指針。
      DesiredAccess提供指定期望的訪問(wèn)級(jí)別的掩碼。
      ObjectAttributes提供指向可任選對(duì)象屬性結(jié)構(gòu)的指針;ResourceManagerHandle提供接收關(guān)于指定事務(wù)的通知的ResourceManager的句柄;NotificationMask指定該ResourceManager對(duì)于此事務(wù)可接收的通知;以及TransactionKey可任選地指定該RM希望與此事務(wù)的任何通知一同接收的不透明指針值。該RM可以此將通知與在該RM地址空間中的某個(gè)對(duì)象相關(guān)聯(lián),從而避免每當(dāng)通知出現(xiàn)都需要進(jìn)行查找。
      ·返回值STATUS_SUCCESSSTATUS_INVALID_PARAMETERSTATUS_OBJECT_NAME_INVALIDSTATUS_OBJECT_NAME_NOT_FOUNDSTATUS_OBJECT_PATH_SYNTAX_BADSTATUS_PRIVILEGE_NOT_HELDSTATUS_INSUFFICIENT_RESOURCESCommitTransaction(IN PHANDLE TransactionHandle,INULONG CommitOptions Optional);·此例程請(qǐng)求提交與TransactionHandle相關(guān)聯(lián)的事務(wù)。已被打開(kāi)或創(chuàng)建的任何事務(wù)句柄可用Transaction Commit所期望的訪問(wèn)來(lái)提交。因?yàn)椴⒉淮嬖谝?guī)定只有事務(wù)的創(chuàng)建者才允許提交它的限制。
      ·如果所討論的事務(wù)先前未發(fā)出PrepareEnlistment請(qǐng)求,則可在所有登記的RM上啟動(dòng)兩階段提交協(xié)議。此調(diào)用可被視為由客戶(hù)機(jī)所發(fā)出的單階段提交請(qǐng)求。
      ·若事務(wù)先前已通過(guò)PrepareEnlistment被準(zhǔn)備,則此例程不被調(diào)用。只有調(diào)用PrepareEnlistment的RM可以用例程SuperiorCommitTransaction來(lái)解析事務(wù)狀態(tài)。
      ·自變量TransactionHandle提供標(biāo)明要提交的事務(wù)的句柄;以及CommitOptionsCOMMIT_RETAINING事務(wù)將被提交。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_TM_TRANSACTION_ABORTEDRollbackTransaction(IN PHANDLE TransactionHandle,INSAVEPOINT SavePointOptional,INROLLBACK_REASON RollbackReason Optional);·此例程請(qǐng)求將與TransactionHandle相聯(lián)的事務(wù)回退。如果指定可任選的SavePoint,且是有效的保存點(diǎn),則此回退可以是部分回退。NULL的SavePoint參數(shù)表明該事務(wù)應(yīng)被完全回退或中止。可提供可任選的RollbackReason結(jié)構(gòu);這將被保留在Transaction對(duì)象中,并可由感興趣的事務(wù)參與者通過(guò)調(diào)用GetInformationTransaction來(lái)檢索。
      ·自變量TransactionHandle提供指明應(yīng)被回退的事務(wù)的句柄;SavePoint提供指明事務(wù)的狀態(tài)應(yīng)當(dāng)被回退到什么程度的SavePoint的名稱(chēng);以及RollbackReason提供回退理由。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_TM_TRANSACTION_COMMITTEDSavepointTransaction(IN PHANDLE TransactionHandle,INLONGSavepointFlags Optional,OUT LPSAVEPOINT SavePoint);·此例程請(qǐng)求為與TransactionHandle相關(guān)聯(lián)的事務(wù)生成一個(gè)“保存點(diǎn)”;該保存點(diǎn)用作后續(xù)的回退請(qǐng)求的目標(biāo)。
      ·自變量TransactionHandle提供指明對(duì)其應(yīng)當(dāng)建立保存點(diǎn)的事務(wù)的句柄;SavepointFlags可任選地提供影響保存點(diǎn)生成的一組標(biāo)記;以及SavePoint提供指向儲(chǔ)存保存點(diǎn)標(biāo)識(shí)符的位置的指針。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_TM_TRANSACTION_COMMITTEDSTATUS_TM_TRANSACTION_ABORTEDQueryInformationTransaction(IN HANDLE TransactionHandle,INTRANSACTION_INFORMATION_CLASSTransactionInformationClass,OUT PVOID TransactionInformation,INULONG TransactionInformationLength,
      OUT PULONG ReturnLength Optional);·此例程返回關(guān)于由TransactionHandle所表示的Transaction對(duì)象的請(qǐng)求信息。
      ·自變量TransactionHandle提供指明對(duì)其請(qǐng)求信息的事務(wù)的句柄;TransactionInformationClass說(shuō)明請(qǐng)求關(guān)于該Transaction對(duì)象的哪一類(lèi)消息;TransactionInformation提供指向保存所請(qǐng)求的事務(wù)信息的緩沖區(qū)的指針。
      TransactionInformationLength說(shuō)明TransactionInformation所指向的緩沖區(qū)的長(zhǎng)度;以及ReturnLength提供指向?qū)⒔邮諏?xiě)到TransactionInformation緩沖區(qū)的信息的長(zhǎng)度的位置。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_INVALID_INFO_CLASSSTATUS_INFO_LENGTH_MISMATCHSetInformationTransaction(IN TRANSACTION_INFORMATION_CLASSTransactionInformationClass,INPVOIDTransactionInformation,INULONGTransactionInformationLength);·此例程設(shè)置關(guān)于TransactionHandle所表示的Transaction對(duì)象的請(qǐng)求信息。
      ·自變量TransactionHandle提供指明將更改其信息的事務(wù)的句柄;TransactionInformationClass指明正在請(qǐng)求的是關(guān)于該Transaction對(duì)象的哪一類(lèi)信息;
      TransactionInformation提供指向保存所請(qǐng)求的事務(wù)信息的緩沖區(qū)的指針。
      TransactionInformationLength說(shuō)明由TransactionInformation所指向的緩沖區(qū)的長(zhǎng)度;以及ReturnLength提供指向?qū)⒔邮諏?xiě)到TransactionInformation緩沖區(qū)的信息的長(zhǎng)度的位置的指針。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_INVALID INFO_CLASSSTATUS_INFO_LENGTH_MISMATCH下文包括對(duì)上面所列的在RMO內(nèi)核對(duì)象上實(shí)現(xiàn)操作的API的更詳盡描述。這些描述包括例程、對(duì)應(yīng)自變量和返回值的描述。
      CreateResourceManager(OUT PHANDLE ResourceMangerHandle,INACCESS_MASK DesiredAccess Optional,INPOBJECT_ATTRIBUTES ObjectAttributes,INULONG CreateOptions Optional,INRM_NOTIFICATION_ROUTINE NotificationRoutineOptional);·此例程創(chuàng)建一個(gè)表示資源的新ResourceManager對(duì)象。
      ·ResourceManager對(duì)象亦擔(dān)當(dāng)關(guān)于RM所加入的事務(wù)的TM通知的端點(diǎn);RM通過(guò)調(diào)用GetNotificationResourceManager來(lái)請(qǐng)求這些通知。
      ·ResourceManager通常是永久性的對(duì)象,即,每次(系統(tǒng)或RM的)失敗后,該對(duì)象必須被重新打開(kāi)并且執(zhí)行恢復(fù)??赏ㄟ^(guò)指定RESOURCEMANAGER_NO_RECOVERY選項(xiàng)來(lái)創(chuàng)建ResourceManager對(duì)象的暫時(shí)性版本。暫時(shí)性RM不被強(qiáng)制或允許執(zhí)行恢復(fù)。不可恢復(fù)RM選項(xiàng)允許應(yīng)用程序或者RM接收關(guān)于事務(wù)進(jìn)度的通知(例,PREPREPARE(預(yù)準(zhǔn)備),PREPARE(準(zhǔn)備),COMMIT(提交)),而無(wú)需被要求實(shí)現(xiàn)記錄準(zhǔn)備和執(zhí)行恢復(fù)的完全復(fù)雜性。
      ·自變量ResourceManagerHandle提供指向?qū)⒔邮招翿esourceManager的句柄的位置的指針。
      DesiredAccess提供說(shuō)明預(yù)期的訪問(wèn)級(jí)別的掩碼。有效的訪問(wèn)掩碼選項(xiàng)包括有SYNCHRONIZE同步句柄上的操作RESOURCE_MANAGER_DESTROY 銷(xiāo)毀該資源管理器RESOURCE_MANAGER_READ_ATTRRIBUTES 讀與資源管理器相關(guān)聯(lián)的屬性RESOURCE_MANAGER_WRITE_ATTRIBUTES 寫(xiě)與資源管理器相關(guān)聯(lián)的屬性O(shè)bjectAttributes指定新RM對(duì)象的屬性;這包括RM名;CreateOptions為已創(chuàng)建的對(duì)象指定選項(xiàng);RESOURCEMANAGER_NO_RECOVERYResourceManager對(duì)象是非永久性的,且不執(zhí)行恢復(fù)操作;RESOURCEMANAGER_COMMUNICATIONResourceManager知道如何與其它計(jì)算機(jī)通信。ResourceManager可以用來(lái)封送或解封送(unmarshall)事務(wù);RESOURCEMANAGER_CLUSTER_RECOVERYResourceManager知道如何將失敗到此群集中的其它節(jié)點(diǎn)的結(jié)果讀出/發(fā)送到日志文件;以及NotificationRoutine指定當(dāng)通知對(duì)該ResourceManager可用時(shí)要調(diào)用的通知例程。
      ·返回值STATUS_SUCCESSSTATUS_INVALID_PARAMETERSTATUS_OBJECT_NAME_COLLISIONSTATUS_OBJECT_NAME_INVALIDSTATUS_PRIVILEGE_NOT_HELDSTATUS_INSUFFICIENT_RESOURCESOpenResourceManager
      (OUT PHANDLE ResourceManagerHandle,INACCESS_MASK DesiredAccess Optional,INPOBJECT_ATTRIBUTES ObjectAttributes,INULONG OpenOptionsOptional,INRM_NOTIFICATION_ROUTINE NotificationRoutineOptional);·此例程依名稱(chēng)打開(kāi)一個(gè)存在的ResourceManager對(duì)象。如果目標(biāo)ResourceManager對(duì)象是永久性的,但目前未打開(kāi),則此對(duì)象最初處于“恢復(fù)中”的狀態(tài),必須被恢復(fù);當(dāng)恢復(fù)完成,必須調(diào)用RecoveryCompleteResourceManager。
      ·自變量ResourceManagerHandle提供指向?qū)⒔邮宅F(xiàn)存ResourceManager對(duì)象句柄的位置的指針;DesiredAccess提供說(shuō)明對(duì)此對(duì)象所期望的訪問(wèn)的掩碼。
      ObjectAttributes為該新RM對(duì)象指定屬性;OpenOptions指定該對(duì)象的選項(xiàng)。有效選項(xiàng)包括有RESOURCE_MANAGER_DET 該資源管理器接收詳細(xì)的恢AILED_RECOVERY_NOTIFIC 復(fù)通知(包含關(guān)于通信端點(diǎn)ATIONS 的附加信息),而非普通的恢復(fù)通知;以及NotificationRoutine指定當(dāng)通知對(duì)此ResourceManager可用時(shí)要調(diào)用的通知例程。
      ·返回值STATUS_SUCCESSSTATUS_INVALID_PARAMETERSTATUS_OBJECT_NAME_INVALIDSTATUS_OBJECT_NAME_NOT_FOUNDSTATUS_OBJECT_PATH_SYNTAX_BADSTATUS_PRIVILEGE_NOT_HELDSTATUS_INSUFFICIENT_RESOURCES
      DestroyResourceManager(IN PHANDLE ResourceManagerHandle);·此例程銷(xiāo)毀ResourceManager對(duì)象,使之不再持久。
      ·自變量ResourceManagerHandle提供指明要銷(xiāo)毀的ResourceManager對(duì)象的句柄。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_TM_NEEDS_RECOVERYQueryInformationResourceManager(IN HANDLEResourceManagerHandle,INRESOURCEMANAGER_INFORMATION_CLASSResourceManagerInformationClass,OUT PVOID ResourceManagerInformation,INULONG ResourceManagerInformationLength,OUT PULONGReturnLength Optional);·此例程返回關(guān)于由ResourceManagerHandle表示的RMO的請(qǐng)求信息。
      ·自變量ResourceManagerHandle提供指明對(duì)其請(qǐng)求信息的ResourceManager的句柄;ResourceManagerInformationClass指明被請(qǐng)求的是關(guān)于該ResourceManager對(duì)象的哪類(lèi)信息;ResourceManagerInformation提供指向存儲(chǔ)所請(qǐng)求的ResourceManager信息的緩沖區(qū)的指針;ResourceManagerInformationLength說(shuō)明由ResourceManagerInformation所指向的緩沖區(qū)的長(zhǎng)度,以及ReturnLength提供指向接收寫(xiě)到該ResourceManagerInformation緩沖區(qū)中的信息的長(zhǎng)度的指針。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_INFALID_INFO_CLASSSTATUS_INFO_LENGTH_MISMATCHSetInformationResourceManager(IN HANDLE ResourceManagerHandle,INRESOURCEMANAGER_INFORMATION_CLASSResourceManagerInformationClass,INPVOID ResourceManagerInformation,INULONG ResourceManagerInformationLength);·此例程設(shè)置關(guān)于由ResourceMaaagerHandle表示的RMO的請(qǐng)求信息。
      ·自變量ResourceMaaagerHandle提供指明對(duì)其修改信息的ResourceManager的句柄;ResourceManagerInformationClass指明請(qǐng)求關(guān)于ResourceMaaager對(duì)象的哪一類(lèi)信息;ResourceMaaagerInformation提供指向存儲(chǔ)所請(qǐng)求的ResourceMaaager信息的緩沖區(qū)的指針;以及ResourceMaaagerInformationLength指明由ResourceMaaagerInformation所指向的緩沖區(qū)的長(zhǎng)度。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_INFALID_INFO_CLASS
      STATUS_INFO_LENGTH_MISMATCHCreateEnlistment(IN PHANDLE ResourceManagerHandle,INPHANDLE TransactionHandle,INNOTIFICATION_MASK NotificationMask,INLPVOIDTransactionKey Optional);·此例程使RMO“加入”一特定事務(wù),并接收與其相關(guān)的通知。
      ·CreateEnlistment的調(diào)用是冪等的,一個(gè)RM可多次調(diào)用此例程,以改變其N(xiāo)otificationMask或TransactionKey。對(duì)CreateEnlistment的后續(xù)調(diào)用替換了通知掩碼和事務(wù)鍵,而無(wú)需在此事務(wù)上創(chuàng)建新登記。
      ·NotificationMask可被用于請(qǐng)求多次接收通知。例如,正在接收PREPREPARE通知的RM可以通過(guò)調(diào)用JoinTransaction并指定PREPREPARE標(biāo)志來(lái)請(qǐng)求另一個(gè)通知。因而,一個(gè)RM可接收多個(gè)PREPREPARE請(qǐng)求。上述請(qǐng)求可被拒絕,如果該事務(wù)已進(jìn)行至超過(guò)本應(yīng)接收所請(qǐng)求的通知的點(diǎn)的話,拒絕該請(qǐng)求是合適的。例如,當(dāng)某個(gè)RM已被通知進(jìn)行準(zhǔn)備時(shí),請(qǐng)求預(yù)準(zhǔn)備則不能被批準(zhǔn)。
      ·自變量ResourceManagerHandle向RM提供句柄,以接收關(guān)于此指定事務(wù)的通知;TransactionHandle提供該RM希望加入的事務(wù)的句柄;NotificationMask指定RM愿意接收的關(guān)于此事務(wù)的通知。有效的掩碼如下所述,且各掩碼可以用OR(或)組合TRANSACTION_NOTIFY_MASK_RMRM所期望的公用通知(PREPARE、COMMIT、ROLLBACK、SAVEPOINT)TRANSACTION_NOTIFY_MASK_CRMCRM或高級(jí)TM所期望的公用通知(PrePrepare_Complete、PrepareComplete、CommitComplete、RollbackComplete、SavebackComplete)TRANSACTION_NOTIFY_PREPREPARE預(yù)準(zhǔn)備通知TRANSACTION_NOTIFY_PREPARE準(zhǔn)備通知TRANSACTION_NOTIFY_COMMIT提交通知TRANSACTION_NOTIFY_ROLLBACK回退通知
      TRANSACTION_NOTIFY_PREPREPARE_COMPLETE預(yù)準(zhǔn)備完成的通知TRANSACTION_NOTIFY_PREPARE_COMPLETE準(zhǔn)備完成的通知TRANSACTION_NOTIFY_COMMIT_COMPLETE提交完成的通知TRANSACTION_NOTIFY_ROLLBACK_COMPLETE回退完成的通知TRANSACTION_NOTIFY_SAVEPOINT_COMPLETE保存點(diǎn)完成的通知;以及TransactionKey指定該RM希望與關(guān)于此事務(wù)的任何通知一同接收的不透明指針值。該RM可以此將通知與該RM地址空間中的某個(gè)對(duì)象相關(guān)聯(lián),從而避免每次通知出現(xiàn)時(shí)都需要執(zhí)行查找。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_PARAMETERSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_TM_TOO_LATEGetNotificationResourceManager(IN PHANDLE ResourceManagerHandle,INPTRANSACTION_NOTIFICATION TransactionNotification,INPLARGE INTEGERTimeout Optional);·此例程排隊(duì)等候并返回RM通知(如果有任何可用的話)。
      ·自變量ResourceManagerHandle提供指明該為其返回通知的ResourceManager的句柄;TransactionNotification提供指向?qū)⒈惶钊胧讉€(gè)可用通知的TRANSACTION_NOTIFICATION結(jié)構(gòu)的指針;以及Timeout提供一時(shí)間,當(dāng)?shù)却ㄖ優(yōu)榭捎脮r(shí),調(diào)用者在該時(shí)間之前希望阻塞。如果當(dāng)該超時(shí)到期時(shí)仍未有通知,則調(diào)用者返回STATUS_TIMEOUT。
      ·返回值STATUS_SUCCESSSTATUS_TIMEOUTSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCES下文包括對(duì)上面所列的、由RMO內(nèi)核對(duì)象在加入事務(wù)后在TX內(nèi)核對(duì)象上實(shí)現(xiàn)操作的API更詳盡的描述。這些描述包例程,對(duì)應(yīng)自變量和返回值的描述。
      PrePrepareComplete(IN PHANDLE EnlistmentHandle);·此例程表明,RM已完成了KTM所請(qǐng)求的事務(wù)的預(yù)準(zhǔn)備處理(也稱(chēng)作“階段0”)。
      ·自變量TransactionHandle提供指示對(duì)其已完成預(yù)準(zhǔn)備操作的事務(wù)的句柄。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_TM_NOT_REQUESTEDPrepareComplete(IN PHANDLE EnlistmentHandle);·此例程表明RM已完成該KTM所請(qǐng)求的事務(wù)的準(zhǔn)備。
      ·自變量TransactionHandlel提供指明對(duì)其完成了準(zhǔn)備操作的事務(wù)的句柄。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLE
      STATUS_INSUFFICIENT_RESOURCESSTATUS_TM_NOT_REQUESTEDRollbackComplete(INPHANDLE EnlistmentHandle);·此例程表明該RM已成功地如所請(qǐng)求地完成了對(duì)由事務(wù)所執(zhí)行的工作的回退。如果RM無(wú)法成功地如所請(qǐng)求地回退該事務(wù),它應(yīng)當(dāng)通過(guò)RollbackTransaction發(fā)出對(duì)完全回退的請(qǐng)求。
      ·自變量TransactionHandle提供指明對(duì)其完成該回退操作的事務(wù)的句柄。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_TM_NOT_REQUESTEDCommitComplete(INPHANDLEEnlistmentHandle);·該例程表明RM已完成了如所請(qǐng)求地提交由事務(wù)執(zhí)行的工作。
      ·自變量TransactionHandle提供指示對(duì)其完成提交操作的事務(wù)的句柄。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESSTATUS_TM_NOT_REQUESTED另外,可以為內(nèi)核對(duì)象提供傳播例程。下面是此類(lèi)例程的示例。
      RegisteredProtocolAddressInformation
      (IN HANDLE ResourceManager,INPROTOCOL_ID ProtocolId,INULONG ProtocolInformationSize,INPVOID ProtocolInformation Optional);·此例程將資源管理器注冊(cè)為特定協(xié)議的通信資源管理器。此程序還將二進(jìn)制大對(duì)象與此協(xié)議相關(guān)聯(lián)。在一個(gè)給定機(jī)器上,對(duì)一個(gè)協(xié)議僅可注冊(cè)一個(gè)資源管理器。
      ·自變量ResourceManager提供我們正在注冊(cè)的資源管理器的句柄;ProtocolId此GUID標(biāo)識(shí)該協(xié)議;ProtocolInformationSizeProtocolInformation的大小;ProtocolInformation可任選的與此協(xié)議相關(guān)聯(lián)的二進(jìn)制大對(duì)象;·返回值STATUS_SUCCESSSTATUS_INVALID_HANDLEMarshallTransaction(IN PHANDLE TransactionHandle,INULONG NumberOfProtocols,IN PPROTOCOL_ID ProtocolArray,IN ULONG BufferLength,IN PVOID Buffer,OUT PULONGBufferUsed Optional);·此例程請(qǐng)求與TransactionHandle相對(duì)應(yīng)的事務(wù)的表示被串行化到緩沖區(qū)。
      ·自變量TransactionHandle提供指明是對(duì)其完成了提交操作的事務(wù)的句柄;NumberOfProtocols指明該協(xié)議數(shù)組的大?。籔rotocolArrayPROTOCOL_ID(GUID)數(shù)組,此數(shù)組指定了可用于封送該事務(wù)的協(xié)議。此數(shù)組須按優(yōu)先級(jí)排序——數(shù)組中第一個(gè)協(xié)議是首選的協(xié)議,第二個(gè)協(xié)議是第二優(yōu)選的協(xié)議,等等;BufferLength提供可用的緩沖區(qū)長(zhǎng)度;
      Buffer提供指向應(yīng)儲(chǔ)存該事務(wù)的串行化的緩沖區(qū)的指針;以及BufferUsed提供指向應(yīng)儲(chǔ)存寫(xiě)入到緩沖區(qū)的實(shí)際字節(jié)的位置的指針。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESGetProtocolAddressInformation(INULONGAddressBufferSize,OUTPVOIDAddressBuffer,OUTPULONG AddressBufferUsed Optional);·此例程請(qǐng)求將表示該機(jī)器上已注冊(cè)的所有協(xié)議的信息串行化至AddressBuffer。然后此信息可被傳遞到其它機(jī)器,并用作PushTransaction的自變量,以將事務(wù)入棧到生成該AddressInformation的機(jī)器。
      ·自變量AddressBufferSize提供可用緩沖的長(zhǎng)度;AddressBuffer提供可得緩沖的長(zhǎng)度;AddressBufferUsed提供指向保存該事務(wù)的串行化的緩沖區(qū)位置的指針。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESPullTransaction(OUT PHANDLE TransactionHandle,INULONG NumberOfProtocols,INPCRM_PROTOCOL_IDProtocolArray,INULONG BufferLength,INPVOID Buffer);
      ·此例程請(qǐng)求由事務(wù)管理器使緩沖區(qū)中的串行化所表示的事務(wù)變?yōu)榭捎?。?dāng)該事務(wù)已被已注冊(cè)的資源管理器之一成功地傳播,則返回該新Transaction對(duì)象的句柄。
      ·自變量TransactionHandle提供指向應(yīng)保存表示該新事務(wù)的句柄的位置的指針;NumberOfProtocols說(shuō)明協(xié)議數(shù)組的大小;ProtocolArrayPROTOCOL_ID(GUID)數(shù)組,此數(shù)組說(shuō)明了用于封送該事務(wù)的協(xié)議。此數(shù)組須按優(yōu)先級(jí)排序——數(shù)組中第一個(gè)協(xié)議是首選的協(xié)議,第二個(gè)協(xié)議是第二優(yōu)選的協(xié)議,等等;BufferLength提供可用緩沖區(qū)的長(zhǎng)度;Buffer提供指向保存該事務(wù)的串行化的緩沖區(qū)的指針。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESPushTransaction(IN HANDLETransactionHandle,INULONG NumberOfProtocols,INPCRM_PROTOCOL_ID ProtocolArray,INULONG DestimationInfoLength,INPVOID DestinationInfo,INULONG ResponseBufferLength,OUT PVOID ResponseBuffer,OUT PULONGResponseBufferUsed Optional,OUT PULONGPushCookie Optional);·此例程請(qǐng)求用入棧風(fēng)格傳播將該事務(wù)傳播至目的機(jī)器。協(xié)議將按照其在ProtocolArray中所列的順序被使用,直至有一個(gè)成功。如果無(wú)一協(xié)議成功地將該事務(wù)傳播至目的機(jī)器,則該例程返回失敗。
      ·自變量
      TransactionHandle提供指向應(yīng)被傳播至遠(yuǎn)程機(jī)器的事務(wù)對(duì)象的指針。
      DestinationInfoLength提供可用的DestinationInfo的長(zhǎng)度;DestinationInfo提供指向存儲(chǔ)該目的的“端點(diǎn)”信息的緩沖區(qū)的指針。這可以是從對(duì)目的機(jī)器上的GetProtocolAddressInformation的調(diào)用所收到的結(jié)果;ResponseBufferLength提供可用的ResponseBuffer的長(zhǎng)度。
      ResponseBuffer提供指向保存該事務(wù)的串行化的緩沖區(qū)的指針;以及PushCookie提供指向儲(chǔ)存表示入棧請(qǐng)求的cookie的緩沖區(qū)的指針。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESGetPushTransactionBuffer(IN HANDLE TransactionHandle,INULONG PushCookie,INULONG ResponseBufferLength,OUT PVOID ResponseBuffer,OUT PULONG ResponseBufferUsed Optional);·如果對(duì)PushTransaction的初始調(diào)用收到STATUS_BUFFER_TOO_SMALL返回代碼,則此調(diào)用被用來(lái)檢索對(duì)PushTransaction的調(diào)用的輸出。在那種情況下,調(diào)用者將調(diào)用GetPushTransactionBuffer,并傳入充足的緩沖區(qū)大小。
      ·自變量TransactionHandle提供指向儲(chǔ)存表示新事務(wù)的句柄的位置的指針;ResponseBufferLength提供可用緩沖區(qū)的長(zhǎng)度;以及ResponseBuffer提供指向儲(chǔ)存該事務(wù)的串行化的緩沖區(qū)的指針。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIED
      STATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESPropagationComplete(IN HANDLEEnlistmentHandle,INULONG RequestCookie,INULONG BufferLength,INPVOID Buffer);·當(dāng)CRM成功地完成傳播完事務(wù)后,此例程由CRM調(diào)用。
      ·自變量TransactionHandle提供指向儲(chǔ)存表示新事務(wù)的句柄的位置的指針;RequestCookie提供在原始PROPAGATE通知自變量中接收到的RequestCookie,來(lái)指明已完成哪一個(gè)請(qǐng)求。
      BufferLength指明可用緩沖區(qū)的長(zhǎng)度;以及Buffer提供指向保存該事務(wù)的串行化的緩沖區(qū)的指針。
      ·返回值STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCESPropagationFailed(IN HANDLE ResourceManagerHandle,INULONG RequestCookie,INSTATUS PropStatus);·CRM使用此例程來(lái)說(shuō)明其未能如所請(qǐng)求地傳播事務(wù)。
      ·自變量TransactionHandle提供指向儲(chǔ)存表示新事務(wù)的句柄的位置的指針;BufferLength提供可用緩沖區(qū)的長(zhǎng)度;以及Buffer提供指向保存該事務(wù)的串行化的緩沖區(qū)的指針。
      ·返回值
      STATUS_SUCCESSSTATUS_ACCESS_DENIEDSTATUS_INVALID_HANDLESTATUS_INSUFFICIENT_RESOURCES示例性計(jì)算環(huán)境圖9示出了一個(gè)通用計(jì)算機(jī)環(huán)境900,此環(huán)境可用來(lái)實(shí)現(xiàn)此文所描述的技術(shù)。計(jì)算機(jī)環(huán)境900僅僅是計(jì)算環(huán)境的一個(gè)示例,并非暗示了對(duì)該計(jì)算機(jī)和網(wǎng)絡(luò)體系結(jié)構(gòu)的使用范圍和功能的任何限制。也不能認(rèn)為計(jì)算機(jī)環(huán)境900對(duì)在示例計(jì)算機(jī)環(huán)境900環(huán)境中示出的任一組件或其組合具有任何依賴(lài)性或需求。
      計(jì)算機(jī)環(huán)境900包括計(jì)算機(jī)902形式的通用的計(jì)算設(shè)備。計(jì)算機(jī)902的組件可包括但不限于,一個(gè)或多個(gè)處理器或處理單元904、系統(tǒng)存儲(chǔ)器906、以及將包括處理器904在內(nèi)的各種系統(tǒng)組件與系統(tǒng)存儲(chǔ)器906耦合的系統(tǒng)總線098。
      系統(tǒng)總線908表示一個(gè)或多個(gè)各種類(lèi)型的總線結(jié)構(gòu),包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外設(shè)總線、加速圖形端口、以及使用任何總線體系結(jié)構(gòu)的處理器或局部總線。作為例子,此類(lèi)體系結(jié)構(gòu)可包括工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線、微通道體系結(jié)構(gòu)(MCA)總線、增強(qiáng)型ISA(EISA)總線、視頻電子技術(shù)標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局部總線、亦稱(chēng)作Mezzanine總線的外圍部件互連(PCI)總線、PCI Express總線、通用串行總線(USB)、安全數(shù)字(SD)總線或IEEE 1394(即火線)總線。
      計(jì)算機(jī)902可包括各種計(jì)算機(jī)可讀介質(zhì)。此類(lèi)介質(zhì)可以是計(jì)算機(jī)902可訪問(wèn)的任何介質(zhì),包括易失性或非易失性介質(zhì)、可移動(dòng)或不可移動(dòng)介質(zhì)。
      系統(tǒng)存儲(chǔ)器906包括易失性存儲(chǔ)器形式(例如隨機(jī)存取存儲(chǔ)器(RAM)910);和/或非易失性存儲(chǔ)器(例如只讀存儲(chǔ)器(ROM)912或閃存RAM))形式的計(jì)算機(jī)可讀介質(zhì)?;据斎?輸出系統(tǒng)(BIOS)914存儲(chǔ)于ROM 912或閃存RAM中,BIOS包含例如在啟動(dòng)時(shí),幫助在計(jì)算機(jī)902內(nèi)各元件間傳遞信息的基本例程。RAM 910通常含有處理單元904即時(shí)可訪問(wèn)和/或當(dāng)前正在操作的數(shù)據(jù)和/或程序模塊。
      計(jì)算機(jī)902可包含其它可移動(dòng)/不可移動(dòng),易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)。作為例子,圖9示出了可讀出與寫(xiě)入到不可移動(dòng),非易失性的磁介質(zhì)(未畫(huà)出)的硬盤(pán)驅(qū)動(dòng)器916、可讀出與寫(xiě)入到可移動(dòng),非易失性磁盤(pán)920(例,軟盤(pán))的磁盤(pán)驅(qū)動(dòng)器918、以及可讀出并/或?qū)懭氲娇梢苿?dòng),非易失性的光盤(pán)924(例如CD-ROM、DVD-ROM或其它光介質(zhì))的可移動(dòng),非易失性光盤(pán)驅(qū)動(dòng)器922。硬盤(pán)驅(qū)動(dòng)器916,磁盤(pán)驅(qū)動(dòng)器918以及光盤(pán)驅(qū)動(dòng)器922分別通過(guò)一個(gè)或多個(gè)數(shù)據(jù)介質(zhì)接口925連接到系統(tǒng)總線908??蛇x擇地,硬盤(pán)驅(qū)動(dòng)器916、磁盤(pán)驅(qū)動(dòng)器918以及光盤(pán)驅(qū)動(dòng)器922可由一個(gè)或多各接口(未畫(huà)出)連接到系統(tǒng)總線908。
      盤(pán)驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)可讀介質(zhì)為計(jì)算機(jī)902提供計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊及其它數(shù)據(jù)的非易失性存儲(chǔ)。盡管示例中示出了硬盤(pán)916、可移動(dòng)磁盤(pán)920以及可移動(dòng)光盤(pán)924,然而可以理解,可存儲(chǔ)計(jì)算機(jī)可訪問(wèn)的數(shù)據(jù)的其它類(lèi)型的計(jì)算機(jī)可讀介質(zhì)也可被用以實(shí)現(xiàn)該示例計(jì)算系統(tǒng)和環(huán)境,這些介質(zhì)諸如磁帶盒或其它磁存儲(chǔ)設(shè)備、閃存卡、CD-ROM、數(shù)字多功能盤(pán)(DVD)或其它光存儲(chǔ)、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦可編程只讀存儲(chǔ)器(EEPROM)等等。
      任意數(shù)量的程序模塊可被存儲(chǔ)于硬盤(pán)916、磁盤(pán)920、光盤(pán)924、ROM 912和/或RAM 910中,這些程序模塊包括,例如操作系統(tǒng)926、一個(gè)或多個(gè)應(yīng)用程序928、其它程序模塊930以及程序數(shù)據(jù)932。這些操作系統(tǒng)926、一個(gè)或多個(gè)應(yīng)用程序928、其它程序模塊930以及程序數(shù)據(jù)932的每一個(gè)(或其某種組合)都可以根據(jù)上述示例實(shí)施例來(lái)制定事務(wù),以實(shí)現(xiàn)支持分布式文件系統(tǒng)的全部或部分常駐組件。
      用戶(hù)可通過(guò)輸入設(shè)備,例如鍵盤(pán)934和定位設(shè)備936(例,“鼠標(biāo)”),向計(jì)算機(jī)902輸入命令和信息。其它輸入設(shè)備938(未具體示出)可包括話筒、操縱桿、游戲墊、圓盤(pán)式衛(wèi)星天線、串行端口、掃描儀和/或其它類(lèi)似設(shè)備。上述及其它輸入設(shè)備通過(guò)與系統(tǒng)總線908耦合的輸入/輸出接口940連接到處理單元904,但也可通過(guò)例如并行端口、游戲端口或通用串行總線(USB)之類(lèi)的其它接口和總線結(jié)構(gòu)連接。
      顯示器942或其它類(lèi)型的顯示設(shè)備也可通過(guò)如視頻適配器944之類(lèi)的接口連接到系統(tǒng)總線908。除顯示器942之外,其它輸出外圍設(shè)備可包括例如揚(yáng)聲器(未示出)和打印機(jī)946等,這些設(shè)備可通過(guò)I/O接口940連接到計(jì)算機(jī)902。
      計(jì)算機(jī)902可使用到一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī),如遠(yuǎn)程計(jì)算設(shè)備948的邏輯連接在網(wǎng)絡(luò)化環(huán)境下運(yùn)作。舉例來(lái)說(shuō),遠(yuǎn)程計(jì)算設(shè)備948可以是PC、,便攜式計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)計(jì)算機(jī)、對(duì)等設(shè)備或其它普通網(wǎng)絡(luò)節(jié)點(diǎn)等等。這里將遠(yuǎn)程計(jì)算設(shè)備948描述成可包含許多或所有相對(duì)于計(jì)算機(jī)902所描述的元件和特征的便攜式計(jì)算機(jī)??蛇x地,計(jì)算機(jī)902也可在非網(wǎng)絡(luò)化環(huán)境下運(yùn)作。
      計(jì)算機(jī)902和遠(yuǎn)程計(jì)算機(jī)948之間的邏輯連接被描述成局域網(wǎng)(LAN)950和普通廣域網(wǎng)(WAN)952。對(duì)于辦公室、企業(yè)內(nèi)部計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)來(lái)說(shuō),這樣的網(wǎng)絡(luò)環(huán)境是很常見(jiàn)的。
      當(dāng)于LAN網(wǎng)絡(luò)環(huán)境下實(shí)現(xiàn)時(shí),計(jì)算機(jī)902通過(guò)網(wǎng)絡(luò)接口或適配器954連接到局域網(wǎng)950。當(dāng)于WAN網(wǎng)絡(luò)環(huán)境下實(shí)現(xiàn)時(shí),計(jì)算機(jī)902通常包含調(diào)制解調(diào)器956,或用于通過(guò)廣域網(wǎng)952建立通信的其它裝置。調(diào)制解調(diào)器956對(duì)計(jì)算機(jī)902來(lái)說(shuō)可以是內(nèi)部的,亦可是外部的,它可通過(guò)I/O接口940或其它適當(dāng)?shù)臋C(jī)制連接到系統(tǒng)總線908。圖示的網(wǎng)絡(luò)連接只是示例,也可使用在計(jì)算機(jī)902與948間建立至少一個(gè)通信鏈路的其它裝置。
      在如相對(duì)于計(jì)算環(huán)境900所示的網(wǎng)絡(luò)環(huán)境中,相對(duì)于計(jì)算機(jī)902所描述的程序模塊或其一部分可以被存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。舉例來(lái)說(shuō),遠(yuǎn)程應(yīng)用程序958駐留在遠(yuǎn)程計(jì)算機(jī)948的存儲(chǔ)器設(shè)備中。為說(shuō)明目的,應(yīng)用或程序及其它可執(zhí)行程序組件,例如操作系統(tǒng),在此均被示出為分離的框,盡管可以認(rèn)識(shí)到,這些程序與組件在不同的時(shí)刻駐留于計(jì)算設(shè)備902的不同儲(chǔ)存組件中,且被計(jì)算機(jī)的至少一個(gè)數(shù)據(jù)處理器執(zhí)行。
      各種模塊和技術(shù)在此處可以在諸如由一個(gè)或多個(gè)計(jì)算機(jī)或其它設(shè)備執(zhí)行的程序模塊等計(jì)算機(jī)可執(zhí)行指令的上下文中描述。一般而言,程序模塊包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等,它們執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)結(jié)構(gòu)。這些程序模塊及其類(lèi)似物可作為本機(jī)代碼執(zhí)行,也可在如虛擬機(jī)器或其它當(dāng)場(chǎng)(just-in-time)編譯執(zhí)行環(huán)境中被下載并執(zhí)行。通常,程序模塊的功能可按不同實(shí)施例的期望被組合或分發(fā)。
      這些模塊與技術(shù)的實(shí)現(xiàn)可以被存儲(chǔ)于某種形式的計(jì)算機(jī)可讀介質(zhì)或通過(guò)其發(fā)送。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可訪問(wèn)的任何可用介質(zhì)。作為示例而非局限,計(jì)算機(jī)可讀介質(zhì)可包含“計(jì)算機(jī)儲(chǔ)存介質(zhì)”和“通信介質(zhì)”。
      “計(jì)算機(jī)存儲(chǔ)介質(zhì)”包括易失性和非易失性,可移動(dòng)和不可移動(dòng)介質(zhì),這些介質(zhì)可以用用于儲(chǔ)存諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊與其它數(shù)據(jù)等信息的任何方法或技術(shù)來(lái)實(shí)現(xiàn)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但不限于,RAM、ROM、EEPROM、閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(pán)(DVD)或其它光存儲(chǔ)、盒式磁帶、磁帶磁盤(pán)存儲(chǔ)或其它磁存儲(chǔ)設(shè)備、或可用于存儲(chǔ)期望信息且可被計(jì)算機(jī)訪問(wèn)的任何其它介質(zhì)。
      “通信介質(zhì)”通常在諸如載波或其它傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號(hào)中包含計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)。通信介質(zhì)也包括任何信息傳遞介質(zhì)。術(shù)語(yǔ)“已調(diào)制數(shù)據(jù)信號(hào)”意指其一個(gè)或多個(gè)特征以對(duì)信號(hào)中的信息編碼的方式被設(shè)置或改變的信號(hào)。僅作為一個(gè)非限制性的示例,通信介質(zhì)包括有線介質(zhì),例如有線網(wǎng)絡(luò)或直通連接,以及無(wú)線介質(zhì),例如聲學(xué),RF,紅外及其它無(wú)線介質(zhì)。任意上述介質(zhì)的組合也包含在計(jì)算機(jī)可讀介質(zhì)范疇中。
      貫穿此說(shuō)明書(shū),參考了“一個(gè)實(shí)施例”,“實(shí)施例”,或“示例實(shí)施例”,意指被詳細(xì)描述的特征、結(jié)構(gòu)或特性被包括在本發(fā)明的至少一個(gè)實(shí)施例中。因而,這類(lèi)短語(yǔ)的使用可以指示不止一個(gè)實(shí)施例。此外,所描述的特征、結(jié)構(gòu)或特性可在一個(gè)或多個(gè)實(shí)施例中以任何適當(dāng)方式組合。
      然而,相關(guān)領(lǐng)域的技術(shù)人員可以意識(shí)到,本發(fā)明無(wú)需一個(gè)或多個(gè)具體細(xì)節(jié)即可實(shí)現(xiàn),或以其它方法、資源、材料等也可實(shí)現(xiàn)。在其它情況下,純粹為避免使本發(fā)明的各方面模糊不清,眾所周知的結(jié)構(gòu)、資源或操作并未被詳細(xì)示出或描述。
      盡管示出并描述了本發(fā)明的示例實(shí)施例和應(yīng)用,然而必須明白,本發(fā)明并不受上述精確配置和資源的限制。本領(lǐng)域的技術(shù)人員可以在不偏離要求保護(hù)的本發(fā)明的精神和分為的情況下,對(duì)此處揭示的本發(fā)明的方法與系統(tǒng)中的排列、操作與細(xì)節(jié)進(jìn)行各種修正、修改與變更。
      權(quán)利要求
      1.一種支持本地設(shè)備與遠(yuǎn)程設(shè)備之間的以事務(wù)形式辦理的遠(yuǎn)程文件操作的系統(tǒng),其特征在于,所述系統(tǒng)包括一事務(wù)管理器;以及一重定向器,用以接收對(duì)駐留在所述遠(yuǎn)程設(shè)備上的文件執(zhí)行文件操作的請(qǐng)求,所述本地和遠(yuǎn)程設(shè)備連接到網(wǎng)絡(luò),其中,在事務(wù)中,所述重定向器通過(guò)所述網(wǎng)絡(luò)向所述遠(yuǎn)程設(shè)備發(fā)送請(qǐng)求。
      2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述事務(wù)管理器未被集成到文件系統(tǒng)中。
      3.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述重定向器從所述遠(yuǎn)程設(shè)備接收文件信息,所述文件信息包括與所述文件相關(guān)聯(lián)的文件系統(tǒng)標(biāo)識(shí)符(Fid)和版本標(biāo)識(shí)符。
      4.如權(quán)利要求3所述的系統(tǒng),其特征在于,所述重定向器選擇性地創(chuàng)建一與所述文件相關(guān)聯(lián)的文件控制塊(FCB),所述FCB包括與所述文件相關(guān)聯(lián)的Fid和版本標(biāo)識(shí)符信息。
      5.如權(quán)利要求4所述的系統(tǒng),其特征在于,所述重定向器判定對(duì)所述請(qǐng)求是否可以使用一現(xiàn)存的FCB。
      6.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述重定向器判定對(duì)所述請(qǐng)求是否可以使用一與未提交事務(wù)相關(guān)聯(lián)的現(xiàn)存FCB。
      7.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述重定向器在判定對(duì)所述請(qǐng)求是否可以使用一現(xiàn)存FCB時(shí),將所述請(qǐng)求的路徑名和事務(wù)上下文與和所述現(xiàn)存FCB相關(guān)聯(lián)的路徑名進(jìn)行比較。
      8.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述事務(wù)管理器是內(nèi)核級(jí)事務(wù)管理器。
      9.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述重定向器在所述請(qǐng)求中選擇性地指出,響應(yīng)于在所述文件上執(zhí)行不由所述重定向器請(qǐng)求的文件操作,所述遠(yuǎn)程設(shè)備應(yīng)該發(fā)信號(hào)通知所述本地設(shè)備。
      10.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述重定向器使用基于服務(wù)器消息塊(SMB)協(xié)議的協(xié)議向發(fā)送所述事務(wù)請(qǐng)求。
      11.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述協(xié)議支持非以事務(wù)形式辦理的遠(yuǎn)程文件操作。
      12.一種其上儲(chǔ)存如權(quán)利要求1所述的組件的計(jì)算機(jī)可讀介質(zhì)。
      13.一種支持本地設(shè)備與遠(yuǎn)程設(shè)備之間的以事務(wù)形式辦理的遠(yuǎn)程文件操作的系統(tǒng),其特征在于,所述系統(tǒng)包括一服務(wù)器組件(SRV),用以從一遠(yuǎn)程設(shè)備接收請(qǐng)求,所述請(qǐng)求用于駐留在所述本地設(shè)備中的文件上的以事務(wù)形式辦理的文件操作;一事務(wù)管理器;以及一文件系統(tǒng),它響應(yīng)于所述SRV組件和事務(wù)管理器,在所述文件上執(zhí)行所請(qǐng)求的文件操作,所述本地和遠(yuǎn)程設(shè)備連接到網(wǎng)絡(luò)。
      14.如權(quán)利要求13所述的系統(tǒng),其特征在于,所述SRV組件向所述遠(yuǎn)程設(shè)備提供與所述文件相關(guān)聯(lián)的文件系統(tǒng)標(biāo)識(shí)符(Fid)以及版本標(biāo)識(shí)符。
      15.如權(quán)利要求13所述的系統(tǒng),其特征在于,所述事務(wù)管理器是內(nèi)核級(jí)事務(wù)管理器。
      16.如權(quán)利要求13所述的系統(tǒng),其特征在于,響應(yīng)于在所述文件上執(zhí)行不由所述遠(yuǎn)程設(shè)備請(qǐng)求的文件操作,所述文件系統(tǒng)選擇性地引發(fā)所述SRV組件發(fā)信號(hào)通知所述遠(yuǎn)程設(shè)備。
      17.如權(quán)利要求13所述的系統(tǒng),其特征在于,所述SRV組件使用基于服務(wù)器消息塊(SMB)協(xié)議的協(xié)議發(fā)送所述事務(wù)及請(qǐng)求。
      18.如權(quán)利要求17所述的系統(tǒng),其特征在于,所述協(xié)議支持非以事務(wù)形式辦理的遠(yuǎn)程文件操作。
      19.一種在其上儲(chǔ)存了如權(quán)利要求12所述的組件的計(jì)算機(jī)可讀介質(zhì)。
      20.一種實(shí)現(xiàn)本地設(shè)備上的以事務(wù)形式辦理的遠(yuǎn)程文件操作的方法,其特征在于,所述方法包含接收對(duì)以事務(wù)形式辦理的遠(yuǎn)程文件操作的請(qǐng)求;檢索事務(wù);封送所述事務(wù);通過(guò)網(wǎng)絡(luò)向遠(yuǎn)程設(shè)備發(fā)送所述事務(wù)與所述請(qǐng)求;以及從所述遠(yuǎn)程設(shè)備接收得自所述文件操作的信息。
      21.如權(quán)利要求20所述的方法,其特征在于,從所述遠(yuǎn)程設(shè)備接收的信息包括文件標(biāo)識(shí)符(Fid)和版本標(biāo)識(shí)符。
      22.如權(quán)利要求21所述的方法,其特征在于,接收對(duì)以事務(wù)形式辦理的遠(yuǎn)程文件操作的請(qǐng)求還包括判斷所述請(qǐng)求是否用于遠(yuǎn)程設(shè)備上的文件操作;如果所述請(qǐng)求用于遠(yuǎn)程設(shè)備上的文件操作,則為所述請(qǐng)求提供名稱(chēng);以及選擇性地創(chuàng)建一與所述文件相關(guān)聯(lián)的文件控制塊(FCB),所述FCB包含與所述文件相關(guān)聯(lián)的Fid和版本標(biāo)識(shí)符信息。
      23.如權(quán)利要求22所述的方法,其特征在于,選擇性地創(chuàng)建FCB還包括判斷是否有一現(xiàn)存FCB可用于所述請(qǐng)求。
      24.如權(quán)利要求23所述的方法,其特征在于,判斷是否有現(xiàn)存FCB可用于所述請(qǐng)求還包括判斷所述現(xiàn)存FCB是否與一未提交的事務(wù)相關(guān)聯(lián)。
      25.如權(quán)利要求23所述的方法,其特征在于,判斷是否有現(xiàn)存FCB可用于所述請(qǐng)求還包括為將所述請(qǐng)求的路徑名和事務(wù)上下文與關(guān)聯(lián)于所述現(xiàn)存FCB的路徑名進(jìn)行比較。
      26.如權(quán)利要求20所述的方法,其特征在于,所述方法是在內(nèi)核模式中執(zhí)行的。
      27.如權(quán)利要求20所述的方法,其特征在于,還包括響應(yīng)于在所述文件上執(zhí)行由不同于所述本地設(shè)備的設(shè)備所請(qǐng)求的文件操作,選擇性地在所述請(qǐng)求中指明所述遠(yuǎn)程設(shè)備應(yīng)當(dāng)發(fā)信號(hào)通知所述本地設(shè)備。
      28.如權(quán)利要求20所述的方法,其特征在于,所述事務(wù)是使用基于服務(wù)器消息塊(SMB)協(xié)議的協(xié)議與所述請(qǐng)求一起發(fā)送的。
      29.如權(quán)利要求28所述的方法,其特征在于,所述協(xié)議支持非以事務(wù)形式辦理的遠(yuǎn)程文件操作。
      30.一種具有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述計(jì)算機(jī)可執(zhí)行指令用于執(zhí)行以下操作接收對(duì)以事務(wù)形式辦理的遠(yuǎn)程文件操作的請(qǐng)求;檢索事務(wù);封送所述事務(wù);通過(guò)網(wǎng)絡(luò)向遠(yuǎn)程設(shè)備發(fā)送所述事務(wù)與所述請(qǐng)求;以及從所述遠(yuǎn)程設(shè)備接收得自所述文件操作的信息。
      31.如權(quán)利要求30所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,,從所述遠(yuǎn)程設(shè)備接收到的信息包括文件標(biāo)識(shí)符(Fid)和版本標(biāo)識(shí)符。
      32.如權(quán)利要求31所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,接收對(duì)以事務(wù)形式辦理的遠(yuǎn)程文件操作的請(qǐng)求還包括判斷所述請(qǐng)求是否用于遠(yuǎn)程設(shè)備上的文件操作;如果所述請(qǐng)求用于遠(yuǎn)程設(shè)備上的文件操作,則為所述請(qǐng)求提供名稱(chēng);以及選擇性地創(chuàng)建一與所述文件相關(guān)聯(lián)的文件控制塊(FCB),所述FCB包含與所述文件相關(guān)聯(lián)的Fid和版本標(biāo)識(shí)符信息。
      33.如權(quán)利要求32所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,選擇性地創(chuàng)建FCB還包括判斷是否有一現(xiàn)存的FCB可用于所述請(qǐng)求。
      34.如權(quán)利要求33所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,判斷是否有現(xiàn)存FCB可用于所述請(qǐng)求還包括判斷所述現(xiàn)存FCB是否與一未提交事務(wù)相關(guān)聯(lián)。
      35.一種實(shí)現(xiàn)本地設(shè)備與遠(yuǎn)程設(shè)備之間的以事務(wù)形式辦理的遠(yuǎn)程文件操作的方法,其特征在于,所述方法包含從遠(yuǎn)程設(shè)備接收請(qǐng)求,所述請(qǐng)求用于駐留在所述本地設(shè)備中的文件上的以事務(wù)形式辦理的文件操作,所述本地與遠(yuǎn)程設(shè)備連接到網(wǎng)絡(luò);以及對(duì)所述文件執(zhí)行所請(qǐng)求的文件操作,所述文件操作是所述事務(wù)的一部分。
      36.如權(quán)利要求35所述的方法,其特征在于,還包括向所述遠(yuǎn)程設(shè)備提供與所述文件相關(guān)聯(lián)的文件系統(tǒng)標(biāo)識(shí)符(Fid)和版本標(biāo)識(shí)符。
      37.如權(quán)利要求35所述的方法,其特征在于,所述方法是在內(nèi)核模式中執(zhí)行的。
      38.如權(quán)利要求35所述的方法,其特征在于,還包括響應(yīng)于在所述文件上執(zhí)行不由所述遠(yuǎn)程設(shè)備請(qǐng)求的文件操作,選擇性地發(fā)信號(hào)通知所述遠(yuǎn)程設(shè)備。
      39.如權(quán)利要求35所述的方法,其特征在于,所述本地與遠(yuǎn)程設(shè)備使用一基于服務(wù)器消息塊(SMB)協(xié)議的協(xié)議,通過(guò)網(wǎng)絡(luò)上選擇性地進(jìn)行通信。
      40.如權(quán)利要求39所述的方法,其特征在于,所述協(xié)議支持非以事務(wù)形式辦理的遠(yuǎn)程文件操作。
      41.一種具有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述計(jì)算機(jī)可執(zhí)行指令用于執(zhí)行以下操作從遠(yuǎn)程設(shè)備接收請(qǐng)求,所述請(qǐng)求用于駐留在所述本地設(shè)備中的文件上的以事務(wù)形式辦理的文件操作,所述本地和遠(yuǎn)程設(shè)備連接到網(wǎng)絡(luò);以及對(duì)所述文件執(zhí)行所請(qǐng)求的文件操作,所述文件操作是所述事務(wù)的一部分。
      42.如權(quán)利要求41所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述操作還包括向所述遠(yuǎn)程設(shè)備提供與所述文件相關(guān)聯(lián)的文件系統(tǒng)標(biāo)識(shí)符(Fid)和版本標(biāo)識(shí)符。
      43.如權(quán)利要求41所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述操作是在內(nèi)核模式中執(zhí)行的。
      44.如權(quán)利要求41所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述操作還包括響應(yīng)于在所述文件上執(zhí)行不由所述遠(yuǎn)程設(shè)備所請(qǐng)求的文件操作,選擇性地發(fā)信號(hào)通知所述遠(yuǎn)程設(shè)備。
      45.一種支持連接到網(wǎng)絡(luò)的本地設(shè)備和遠(yuǎn)程設(shè)備之間以事務(wù)形式辦理的遠(yuǎn)程文件操作的系統(tǒng),其特征在于,所述系統(tǒng)包括用于管理事務(wù)的裝置;以及用于向所述遠(yuǎn)程設(shè)備發(fā)送請(qǐng)求和事務(wù),以對(duì)駐留于所述遠(yuǎn)程設(shè)備中的文件執(zhí)行文件操作的裝置。
      46.如權(quán)利要求45所述的系統(tǒng),其特征在于,還包括用于從所述遠(yuǎn)程設(shè)備接收文件信息的裝置,所述文件信息包括與所述文件相關(guān)聯(lián)的文件系統(tǒng)標(biāo)識(shí)符(Fid)和版本標(biāo)識(shí)符。
      47.如權(quán)利要求46所述的系統(tǒng),其特征在于,還包括選擇性地創(chuàng)建一與所述文件相關(guān)聯(lián)的文件控制塊(FCB)的裝置,所述FCB包括與所述文件相關(guān)聯(lián)的Fid和版本標(biāo)識(shí)符信息。
      48.如權(quán)利要求47所述的系統(tǒng),其特征在于,還包括用于判斷是否可一現(xiàn)存的FCB可用于所述請(qǐng)求的裝置。
      49.如權(quán)利要求48所述的系統(tǒng),其特征在于,還包括用于判斷是否有一與未提交的事務(wù)相關(guān)聯(lián)的現(xiàn)存FCB可用于所述請(qǐng)求的裝置。
      50.如權(quán)利要求45所述的系統(tǒng),其特征在于,還包括響應(yīng)于在所述文件上執(zhí)行不由所述重定向器請(qǐng)求的文件操作,選擇性地在所述要求中指示所述遠(yuǎn)程設(shè)備應(yīng)該發(fā)信號(hào)通知所述本地機(jī)器。
      51.如權(quán)利要求13所述的系統(tǒng),其特征在于,所述事務(wù)管理器未被集成至文件系統(tǒng)中。
      52.一種用于通過(guò)網(wǎng)絡(luò)執(zhí)行事務(wù)文件操作時(shí)的方法,其特征在于,所述方法包括從駐留在第一計(jì)算平臺(tái)中的事務(wù)管理器接收一預(yù)準(zhǔn)備通知;通過(guò)網(wǎng)絡(luò)從所述第一計(jì)算平臺(tái)向第二計(jì)算平臺(tái)提供文件操作數(shù)據(jù);從駐留在所述第一計(jì)算平臺(tái)的事務(wù)管理器接收一準(zhǔn)備通知;以及通過(guò)網(wǎng)絡(luò)向所述第二計(jì)算平臺(tái)提供一包含所述準(zhǔn)備通知的消息。
      53.一種用于通過(guò)網(wǎng)絡(luò)執(zhí)行以事務(wù)形式辦理的文件操作的方法,其特征在于,所述方法包括接收事務(wù)信息;以及通過(guò)網(wǎng)絡(luò)向連接到所述網(wǎng)絡(luò)的計(jì)算平臺(tái)發(fā)送所述事務(wù)信息,以及創(chuàng)建或打開(kāi)文件或目錄的請(qǐng)求,所述述請(qǐng)求包括第一結(jié)構(gòu),所述第一結(jié)構(gòu)包含保存事務(wù)上下文的字段,以及保存事務(wù)信息的長(zhǎng)度的字段。
      54.如權(quán)利要求53所述的方法,其特征在于,對(duì)所述請(qǐng)求的響應(yīng)包括第二結(jié)構(gòu),所述第二結(jié)構(gòu)包含保存文件標(biāo)識(shí)符的字段,以及保存版本標(biāo)識(shí)符的字段。
      55.如權(quán)利要求53所述的方法,其特征在于,還包括接收一響應(yīng),所述響應(yīng)包括指示連接到網(wǎng)絡(luò)的所述計(jì)算平臺(tái)是否支持以事務(wù)形式辦理的文件操作的字段。
      56.如權(quán)利要求53所述的方法,其特征在于,還包括通過(guò)網(wǎng)絡(luò)向所述計(jì)算平臺(tái)發(fā)送事務(wù)信息與尋找文件的請(qǐng)求,所述尋找文件的請(qǐng)求包括指示一事務(wù)正用于所述文件的字段。
      57.如權(quán)利要求53所述的方法,其特征在于,還包括通過(guò)網(wǎng)絡(luò)從所述計(jì)算平臺(tái)接收消息,所述消息提供了來(lái)自連接到網(wǎng)絡(luò)的所述計(jì)算平臺(tái)的、關(guān)于事務(wù)狀態(tài)改變的通知。
      58.一種用于通過(guò)網(wǎng)絡(luò)執(zhí)行以事務(wù)形式辦理的文件操作的方法,其特征在于,所述方法包括在第二計(jì)算平臺(tái)中從第一計(jì)算平臺(tái)接收一預(yù)準(zhǔn)備通知;向駐留在所述第二計(jì)算平臺(tái)上的事務(wù)管理器提供所述預(yù)準(zhǔn)備通知;在所述第二個(gè)計(jì)算平臺(tái)中通過(guò)網(wǎng)絡(luò)從所述第一計(jì)算平臺(tái)接收文件操作數(shù)據(jù);向駐留在所述第二計(jì)算平臺(tái)上的文件系統(tǒng)提供所述文件操作數(shù)據(jù);通過(guò)網(wǎng)絡(luò)從所述第一計(jì)算平臺(tái)接收一準(zhǔn)備通知;以及向駐留在所述第二計(jì)算平臺(tái)上的事務(wù)管理器提供所述準(zhǔn)備通知。
      全文摘要
      一種通過(guò)網(wǎng)絡(luò)執(zhí)行以事務(wù)形式辦理的遠(yuǎn)程文件操作的系統(tǒng)包括客戶(hù)機(jī)和服務(wù)器。該客戶(hù)機(jī)與服務(wù)器的每一個(gè)包含事務(wù)管理器(TM)和文件系統(tǒng)(FS)。該客戶(hù)機(jī)還包括重定向器(RDR),而該服務(wù)器包括服務(wù)器應(yīng)用程序(SRV)。RDR接收對(duì)遠(yuǎn)程事務(wù)文件操作的請(qǐng)求。作為響應(yīng),該RDR從該請(qǐng)求中檢索事務(wù)。該RDR可使用TM來(lái)封送該事務(wù),以向服務(wù)器發(fā)送。該RDR通過(guò)網(wǎng)絡(luò)向服務(wù)器發(fā)送該事務(wù)。SRV組件接收該事務(wù),服務(wù)器的TM和FS隨即使用該事務(wù)來(lái)執(zhí)行文件操作。隨后,服務(wù)器通過(guò)網(wǎng)絡(luò)向客戶(hù)機(jī)返回該文件操作的結(jié)果。
      文檔編號(hào)G06F17/30GK1826593SQ200480001326
      公開(kāi)日2006年8月30日 申請(qǐng)日期2004年7月22日 優(yōu)先權(quán)日2003年10月24日
      發(fā)明者P·J·馬德哈瓦拉普, S·P·帕第卡爾, B·S·拉曼, S·弗爾馬, J·卡基爾, J·拉庫(kù)楚爾 申請(qǐng)人:微軟公司
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1