亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

文件操作方法及裝置的制作方法

文檔序號(hào):6371529閱讀:116來源:國(guó)知局
專利名稱:文件操作方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別是涉及文件操作方法及裝置。
背景技術(shù)
在面對(duì)復(fù)雜問題的時(shí)候,人們往往會(huì)采用分而治之的方法分割、縮小問題的范圍,這一點(diǎn)在操作系統(tǒng)的設(shè)計(jì)中亦是如此。例如,Windows操作系統(tǒng)就是借助分層的設(shè)計(jì)思想來解決復(fù)雜的問題。這一做法帶來了可移植性、可擴(kuò)展性等優(yōu)點(diǎn),不過,由于在設(shè)計(jì)理論上存在著安全性缺陷(例如缺乏完整性校驗(yàn)機(jī)制等),另一方面也意味著系統(tǒng)存在大量的被篡改可能。以文件系統(tǒng)的設(shè)計(jì)為例,文件調(diào)用棧的分層式結(jié)構(gòu)決定了其調(diào)用鏈上存在多個(gè)層,每個(gè)層對(duì)其上層提供接口,對(duì)下層進(jìn)行調(diào)用,文件的調(diào)用請(qǐng)求會(huì)從最上層開始,經(jīng)過調(diào)用鏈上的逐層處理,直到到達(dá)文件系統(tǒng)的下層設(shè)備,并最終確定出文件是保存在磁盤的第多少個(gè)扇區(qū)、占用多少字節(jié)等等,然后返回對(duì)應(yīng)的信息。但是,由于操作系統(tǒng)并不會(huì)對(duì)調(diào)用鏈的 完整性進(jìn)行校驗(yàn),這也就意味著,第三方可以任意地向調(diào)用鏈中加入一些層,甚至還可以對(duì)已有的層的邏輯進(jìn)行修改等等,而這種加入層或者修改層邏輯的操作,都使得調(diào)用鏈存在被篡改的風(fēng)險(xiǎn)。例如,一些包含有病毒等惡意內(nèi)容的文件為了避免被安全軟件檢測(cè)到,就會(huì)通過安裝驅(qū)動(dòng)的方式,對(duì)系統(tǒng)的文件調(diào)用棧的鏈路進(jìn)行篡改(增加層或者修改一些層邏輯等),達(dá)到對(duì)文件調(diào)用操作進(jìn)行劫持的目的,以至于安全軟件在調(diào)用文件時(shí),獲得的數(shù)據(jù)的準(zhǔn)確性得不到保證。例如,安全軟件在需要獲取文件A的數(shù)據(jù)對(duì)文件A進(jìn)行檢測(cè)時(shí),如果鏈路已經(jīng)被篡改,則系統(tǒng)實(shí)際上返回的卻可能是文件B的數(shù)據(jù),最終安全軟件實(shí)際檢測(cè)數(shù)據(jù)的也是文件B的數(shù)據(jù),只不過安全軟件無法知悉該情況,會(huì)將其作為文件A的數(shù)據(jù)來看待。這樣,只要文件B是安全的,就可以通過檢測(cè),并且安全軟件顯示的檢測(cè)結(jié)果是“文件A不存在安全威脅”,進(jìn)而,如果用戶信任安全軟件的檢測(cè)結(jié)果,對(duì)文件A執(zhí)行了打開或者運(yùn)行等操作,則可能也會(huì)導(dǎo)致用戶的系統(tǒng)遭到文件A包含的惡意程序的侵害。一般而言,操作系統(tǒng)文件調(diào)用棧鏈路如圖I所示,在執(zhí)行文件調(diào)用操作時(shí)采用如下分層調(diào)用的方式調(diào)用者101 (例如安全軟件等)調(diào)用內(nèi)核接口層102,內(nèi)核接口層102調(diào)用內(nèi)核執(zhí)行層103,內(nèi)核執(zhí)行層103調(diào)用文件對(duì)象解析例程104,文件對(duì)象解析例程104調(diào)用過濾驅(qū)動(dòng)105,頂層過濾驅(qū)動(dòng)逐層調(diào)用直至調(diào)用到底層過濾驅(qū)動(dòng)106,底層過濾驅(qū)動(dòng)106調(diào)用文件系統(tǒng)107,文件系統(tǒng)107調(diào)用文件系統(tǒng)下層設(shè)備108,等等。其中,調(diào)用者101和內(nèi)核接口層102屬于操作系統(tǒng)用戶態(tài),內(nèi)核執(zhí)行層103、文件對(duì)象解析例程104、頂層過濾驅(qū)動(dòng)105、底層過濾驅(qū)動(dòng)106、文件系統(tǒng)107和文件系統(tǒng)下層設(shè)備108屬于操作系統(tǒng)內(nèi)核態(tài)。在對(duì)文件調(diào)用棧的鏈路進(jìn)行篡改時(shí),有很多潛在的篡改點(diǎn),這些篡改點(diǎn)可能包括對(duì)用戶態(tài)的篡改(例如內(nèi)核接口層的用戶態(tài)IAT HookCImport Address Table Hook,導(dǎo)入表鉤掛)/EAT HookCExport Address Table Hook,導(dǎo)出表鉤掛),內(nèi)核接口層的用戶態(tài)InlineHook (內(nèi)聯(lián)鉤掛)等),也可能包括對(duì)內(nèi)核態(tài)的篡改(例如,內(nèi)核執(zhí)行層的Native API SSDTHook (System Service Dispatch Table Hook,系統(tǒng)服務(wù)分派表鉤掛)、文件對(duì)象解析例程的Object Parse Routine Hook (對(duì)象解析例程鉤掛)、頂層過濾驅(qū)動(dòng)a的頂層過濾驅(qū)動(dòng)獲取,等等)。傳統(tǒng)的安全軟件廠商雖然意識(shí)到了文件調(diào)用操作被劫持的各種可能性,但是大多只考慮了操作系統(tǒng)用戶態(tài)的劫持風(fēng)險(xiǎn),在操作系統(tǒng)內(nèi)核態(tài)的攻防上往往體現(xiàn)出一定的能力缺失。為了能夠避免操作系統(tǒng)內(nèi)核態(tài)被劫持時(shí)帶來的危害,本發(fā)明人提供了“文件穿透”的解決方案(該方案已經(jīng)作為一件獨(dú)立的專利另行申請(qǐng))。所謂的文件穿透是指,假設(shè)操作系統(tǒng)中原有的文件調(diào)用棧的鏈路是不安全的,因此,在文件調(diào)用請(qǐng)求到來時(shí),另外建立一條新的、可信的鏈路,通過該新建的鏈路去獲取文件對(duì)應(yīng)的數(shù)據(jù)。也就是說,文件的調(diào)用請(qǐng)求不再經(jīng)過原有調(diào)用棧上內(nèi)核態(tài)的各個(gè)層,而是直接通過一條可信的通道到達(dá)文件所在的原始地址,可見,相當(dāng)于在調(diào)用文件的過程中,將調(diào)用棧中原有的鏈路作為旁路,形象地講,就相當(dāng)于穿透了內(nèi)核態(tài)的各個(gè)層,因此簡(jiǎn)稱為文件穿透。這種文件穿透方案由于使得文件調(diào)用請(qǐng)求不再流經(jīng)內(nèi)核態(tài)的各個(gè)層,因此,也就 不會(huì)遭受內(nèi)核態(tài)劫持,可以保證調(diào)用者最終調(diào)用到的數(shù)據(jù)的正確性,進(jìn)而也保證調(diào)用者后續(xù)執(zhí)行的檢測(cè)等操作的有效性。但是,在實(shí)際應(yīng)用中,通過這種文件穿透的方式對(duì)文件進(jìn)行調(diào)用時(shí),有時(shí)會(huì)出現(xiàn)調(diào)用錯(cuò)誤,例如無法找到文件的原始地址,或者調(diào)用到的數(shù)據(jù)存在亂
碼,等等。因此,迫切需要本領(lǐng)域技術(shù)人員解決的技術(shù)問題就在于,如何在通過文件穿透的方式對(duì)文件進(jìn)行操作時(shí),避免出現(xiàn)操作錯(cuò)誤。

發(fā)明內(nèi)容
本發(fā)明提供了文件操作方法及裝置,能夠在通過文件穿透的方式對(duì)文件進(jìn)行操作時(shí),避免出現(xiàn)操作錯(cuò)誤。本發(fā)明提供了如下方案一種文件操作方法,包括接收對(duì)指定文件進(jìn)行操作的請(qǐng)求,所述請(qǐng)求中攜帶有文件的路徑以及穿透強(qiáng)度信息;根據(jù)所述文件的路徑確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象,并根據(jù)預(yù)置的文件系統(tǒng)各設(shè)備對(duì)象的原始地址,確定所述目標(biāo)設(shè)備對(duì)象的原始地址;根據(jù)所述穿透強(qiáng)度信息確定不需要穿透的層;根據(jù)所述不需要穿透的層以及所述原始地址構(gòu)造I/O請(qǐng)求包,以便依次調(diào)用所述不需要穿透的層的接口對(duì)所述I/o請(qǐng)求包進(jìn)行處理,并將處理后的I/O請(qǐng)求包發(fā)送到所述原始地址處,由所述目標(biāo)設(shè)備對(duì)象對(duì)經(jīng)由所述不需要穿透的層處理后的I/o請(qǐng)求包進(jìn)行處理??蛇x的,所述根據(jù)所述文件的路徑確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象包括根據(jù)預(yù)置的根目錄名稱與磁盤設(shè)備之間的對(duì)應(yīng)關(guān)系,確定所述路徑中的根目錄名稱對(duì)應(yīng)的磁盤設(shè)備;根據(jù)所述根目錄名稱對(duì)應(yīng)的磁盤設(shè)備,確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象??蛇x的,所述根據(jù)所述文件的路徑確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象包括依據(jù)所述文件的路徑在對(duì)象管理器中查找對(duì)應(yīng)的文件對(duì)象解析例程;通過所述文件對(duì)象解析例程確定所述路徑中的根目錄名稱對(duì)應(yīng)的磁盤設(shè)備;根據(jù)所述根目錄名稱對(duì)應(yīng)的磁盤設(shè)備,確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象。可選的,所述請(qǐng)求中攜帶的穿透強(qiáng)度信息包括需要穿透的層的標(biāo)識(shí)或不需要穿透的層的標(biāo)識(shí);或者,所述請(qǐng)求中攜帶的穿透強(qiáng)度信息包括預(yù)置的穿透強(qiáng)度級(jí)別標(biāo)識(shí),其中, 每個(gè)穿透強(qiáng)度級(jí)別標(biāo)識(shí)對(duì)應(yīng)著至少一組需要穿透的層的標(biāo)識(shí)或不需要穿透的層的標(biāo)識(shí)。可選的,所述不需要穿透的層為非自閉的層,所述非自閉的層為穿透之后會(huì)造成系統(tǒng)功能性缺失的層??蛇x的,還包括在初始化過程中,獲取當(dāng)前文件操作鏈上包括的各個(gè)層的唯一性標(biāo)識(shí)信息;將各個(gè)層的唯一性標(biāo)識(shí)信息與預(yù)置的白名單中保存的非自閉的層的唯一性標(biāo)識(shí)信息進(jìn)行比對(duì),將出現(xiàn)在所述白名單中的層標(biāo)記為當(dāng)前文件操作鏈上存在的非自閉的層,以便文件操作者在發(fā)起文件操作請(qǐng)求時(shí),根據(jù)該標(biāo)記的信息確定所述穿透強(qiáng)度信息。一種文件操作裝置,包括請(qǐng)求接收單元,用于接收對(duì)指定文件進(jìn)行操作的請(qǐng)求,所述請(qǐng)求中攜帶有文件的路徑以及穿透強(qiáng)度信息;目標(biāo)設(shè)備對(duì)象確定單元,用于根據(jù)所述文件的路徑確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象,并根據(jù)預(yù)置的文件系統(tǒng)各設(shè)備對(duì)象的原始地址,確定所述目標(biāo)設(shè)備對(duì)象的原始地址;穿透強(qiáng)度確定單元,用于根據(jù)所述穿透強(qiáng)度信息確定不需要穿透的層;請(qǐng)求包構(gòu)造單元,用于根據(jù)所述不需要穿透的層以及所述原始地址構(gòu)造I/O請(qǐng)求包,以便依次調(diào)用所述不需要穿透的層的接口對(duì)所述I/O請(qǐng)求包進(jìn)行處理,并將處理后的I/o請(qǐng)求包發(fā)送到所述原始地址處,由所述目標(biāo)設(shè)備對(duì)象對(duì)經(jīng)由所述不需要穿透的層處理后的I/o請(qǐng)求包進(jìn)行處理??蛇x的,所述目標(biāo)設(shè)備對(duì)象確定單元包括第一磁盤設(shè)備確定子單元,用于根據(jù)預(yù)置的根目錄名稱與磁盤設(shè)備之間的對(duì)應(yīng)關(guān)系,確定所述路徑中的根目錄名稱對(duì)應(yīng)的磁盤設(shè)備;第一目標(biāo)設(shè)備對(duì)象確定子單元,用于根據(jù)所述根目錄名稱對(duì)應(yīng)的磁盤設(shè)備,確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象??蛇x的,所述目標(biāo)設(shè)備對(duì)象確定單元包括文件對(duì)象解析例程查找子單元,用于依據(jù)所述文件的路徑在對(duì)象管理器中查找對(duì)應(yīng)的文件對(duì)象解析例程;第二磁盤設(shè)備確定子單元,用于通過所述文件對(duì)象解析例程確定所述路徑中的根目錄名稱對(duì)應(yīng)的磁盤設(shè)備;第二目標(biāo)設(shè)備對(duì)象確定子單元,用于根據(jù)所述根目錄名稱對(duì)應(yīng)的磁盤設(shè)備,確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象??蛇x的,所述請(qǐng)求中攜帶的穿透強(qiáng)度信息包括需要穿透的層的標(biāo)識(shí)或不需要穿透的層的標(biāo)識(shí);或者,所述請(qǐng)求中攜帶的穿透強(qiáng)度信息包括預(yù)置的穿透強(qiáng)度級(jí)別標(biāo)識(shí),其中,每個(gè)穿透強(qiáng)度級(jí)別標(biāo)識(shí)對(duì)應(yīng)著至少一組需要穿透的層的標(biāo)識(shí)或不需要穿透的層的標(biāo)識(shí)。可選的,所述不需要穿透的層為非自閉的層,所述非自閉的層為穿透之后會(huì)造成系統(tǒng)功能性缺失的層??蛇x的,還包括層標(biāo)識(shí)獲取單元,用于在初始化過程中,獲取當(dāng)前文件操作鏈上包括的各個(gè)層的唯一丨I"生標(biāo)識(shí)信息;標(biāo)記單元,用于將各個(gè)層的唯一性標(biāo)識(shí)信息與預(yù)置的白名單中保存的非自閉的層的唯一性標(biāo)識(shí)信息進(jìn)行比對(duì),將出現(xiàn)在所述白名單中的層標(biāo)記為當(dāng)前文件操作鏈上存在的 非自閉的層,以便文件操作者在發(fā)起文件操作請(qǐng)求時(shí),根據(jù)該標(biāo)記的信息確定所述穿透強(qiáng)度f(wàn)目息。根據(jù)本發(fā)明提供的具體實(shí)施例,本發(fā)明公開了以下技術(shù)效果通過本發(fā)明,可以根據(jù)文件操作請(qǐng)求中攜帶的穿透強(qiáng)度信息確定出文件操作鏈上哪些層是不需要穿透的,然后就可以讓構(gòu)造出的I/O請(qǐng)求包流經(jīng)這些層??梢?,并不是將文件操作鏈上所有的層都不加區(qū)別的全部穿透,而是有選擇性的分層穿透,這樣,針對(duì)一些有可能會(huì)對(duì)系統(tǒng)造成功能性缺失的層,就可以選擇不進(jìn)行穿透,避免出現(xiàn)操作出錯(cuò)的現(xiàn)象。


為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖I是操作系統(tǒng)文件操作執(zhí)行流的示意圖;圖2是本發(fā)明實(shí)施例提供的方法的流程圖;圖3是本發(fā)明實(shí)施例提供的文件操作執(zhí)行流的示意圖;圖4是本發(fā)明實(shí)施例提供的另一文件操作執(zhí)行流的示意圖;圖5是本發(fā)明實(shí)施例提供的裝置的示意圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。首先需要說明的是,本發(fā)明的發(fā)明人在實(shí)現(xiàn)本發(fā)明的過程中發(fā)現(xiàn),之所以在通過文件穿透的方式對(duì)文件進(jìn)行操作時(shí),會(huì)出現(xiàn)操作錯(cuò)誤,是因?yàn)椋募┩傅那疤崾潜淮┩傅膶邮恰白蚤]的”,也即穿透這些層時(shí)不會(huì)對(duì)系統(tǒng)造成功能性的缺失。例如某些層就是第三方程序?yàn)榱吮O(jiān)聽系統(tǒng)狀態(tài)而加入的驅(qū)動(dòng),則穿透這種層時(shí),并不會(huì)出錯(cuò)。但是在實(shí)際應(yīng)用中,有些層卻不是“自閉的”,例如,假設(shè)被穿透的目標(biāo)是“重定向類驅(qū)動(dòng)”,則如果穿透它則會(huì)導(dǎo)致調(diào)用者訪問一個(gè)重定向前的地址,而往往這個(gè)地址是實(shí)際不存在的,因此會(huì)導(dǎo)致無法找到目標(biāo)文件?;蛘?,還有一類是“加解密類驅(qū)動(dòng)”,這種驅(qū)動(dòng)的作用是對(duì)全盤數(shù)據(jù)進(jìn)行加解密,如果穿透這類驅(qū)動(dòng)會(huì)導(dǎo)致調(diào)用者訪問到的是未解密的數(shù)據(jù),無法得到原始數(shù)據(jù),進(jìn)而產(chǎn)生未知的后果,等等。因此,對(duì)于文件操作鏈路上存在的非自閉的層,不應(yīng)該穿透。本發(fā)明實(shí)施例就是在上述分析基礎(chǔ)上提出了文件操作方法,以下進(jìn)行詳細(xì)地介紹。參見圖2,本發(fā)明實(shí)施例提供的文件操作方法包括以下步驟S201 :接收對(duì)指定文件進(jìn)行操作的請(qǐng)求,所述請(qǐng)求中攜帶有文件的路徑以及穿透強(qiáng)度信息;在本發(fā)明實(shí)施例中,文件可以包括操作系統(tǒng)(例如Windows)中所支持類型的文件,文件操作具體是指針對(duì)文件的原子操作或原子操作的組合,所謂原子操作可以文件創(chuàng)建、文件讀取、文件寫入、文件屬性設(shè)置、文件屬性獲取、文件指針設(shè)置、文件大小獲取、文件刪 除、目錄移除、句柄關(guān)閉、第一個(gè)文件查找、下一個(gè)文件查找、文件查找關(guān)閉、判斷路徑是否為目錄、判斷目標(biāo)文件是否存在、長(zhǎng)路徑獲取、短路徑獲取、路徑查找、文件復(fù)制、文件移動(dòng)等。例如,文件的殺毒操作即為文件讀取、第一個(gè)文件查找、下一個(gè)文件查找、文件查找關(guān)閉、文件移動(dòng)等原子操作的組合。為了實(shí)現(xiàn)“文件穿透”功能,可以提供一套專用于文件穿透的程序,這套程序可以包括用戶態(tài)部分以及內(nèi)核態(tài)部分。其中,在用戶態(tài)部分,可以為調(diào)用者提供一些例程(或稱函數(shù)或接口,是某個(gè)系統(tǒng)對(duì)外提供的功能接口或服務(wù)的統(tǒng)稱),這些例程與操作系統(tǒng)中定義的API函數(shù)完全兼容,具體可以包括文件創(chuàng)建例程FSCreateFile、文件讀取例程FSReadFile、文件寫入例程FSWriteFile、文件屬性設(shè)置例程FSSetFileAttributes、文件屬性獲取例程FSGetFiIeAttributes、文件指針設(shè)置例程FSSetFiIePointer、增強(qiáng)文件指針設(shè)置例程FSSetFiIePointerEx、文件大小獲取例程FSGetFiIeSize、文件刪除例程 FSDeleteFile、目錄移除例程 FSRemoveDirectory、句柄關(guān)閉例程 FSCloseHandle、第一個(gè)文件查找例程FSFindFirstFi Ie、下一個(gè)文件查找例程FSFindNextFi Ie、文件查找關(guān)閉例程FSFindClose、增加文件屬性獲取例程FSGetFiIeAttributesEx、判斷路徑是否為目錄的例程FSPathlsDirectory、判斷目標(biāo)文件是否存在的例程FSPathFileExists、長(zhǎng)路徑獲取例程FSGetLongPathName、短路徑獲取例程FSGetShortPathName、路徑查找例程FSSearchPath、增強(qiáng)文件大小獲取例程FSGetFileSizeEx、文件復(fù)制例程FSCopyFiIe、文件移動(dòng)例程FSMoveFile和/或增強(qiáng)文件移動(dòng)例程FSMoveFileEx。所述文件操作接口例程的設(shè)置,如調(diào)用約定、調(diào)用參數(shù)和對(duì)應(yīng)的WINDOWS標(biāo)準(zhǔn)API —致。上述每個(gè)例程均包括窄字符例程和寬字符例程,例如對(duì)于FSCreateFile而言,包括窄字符例程FSCreateFileA和寬字符例程FSCreateFileW。與上述導(dǎo)出例程對(duì)應(yīng),F(xiàn)ILE_IO_CREATE_FILE、FILE_IO_READ_FILE、FILE_IO_WRITE_FILE、FILE_IO_QUERY_FILE、FILE_IO_SET_FILE、FILE_IO_PREPARE_CLOSE等控制碼定義了用戶態(tài)和內(nèi)核態(tài)驅(qū)動(dòng)通信時(shí)的統(tǒng)一標(biāo)識(shí)。通信的輸入、輸出緩沖區(qū)可以采用METHOD_BUFFERED方式傳輸。通信結(jié)構(gòu)兼容32位、64位以及32位兼容模式。在具體實(shí)現(xiàn)時(shí),可以加載這些文件操作接口例程,這樣,調(diào)用者在發(fā)起文件操作請(qǐng)求時(shí),就可以調(diào)用穿透程序中提供的文件操作接口例程,這樣,穿透程序的內(nèi)核態(tài)部分就可以接收到調(diào)用者發(fā)出的文件操作請(qǐng)求。以文件創(chuàng)建過程為例,由于FSCreateFileA/FSCreateFileW導(dǎo)出例程嚴(yán)格遵守Windows標(biāo)準(zhǔn)API的定義和參數(shù),因此,調(diào)用者可以調(diào)用這兩個(gè)例程,其中,F(xiàn)SCreateFiIeA可以將輸入?yún)?shù)轉(zhuǎn)換為UNICODE類型,F(xiàn)SCreateFiIeW可以處理畸形文件名(所謂畸形文件就是在操作系統(tǒng)中無法或難以通過正常途徑進(jìn)行建立、查看、刪除等操作的文件)、文件路徑并實(shí)際完成參數(shù)轉(zhuǎn)換、控制碼通信等。文件操作請(qǐng)求中包括調(diào)用者輸入?yún)?shù),具體的,這種輸入?yún)?shù)中可以包括文件路徑,例如,某文件b. txt存儲(chǔ)在C盤的a文件夾下,則該文件的路徑為c:\a\b. txt。另外,在本發(fā)明實(shí)施例中,為了在通過文件穿透的方式對(duì)文件進(jìn)行操作時(shí),避免出現(xiàn)操作錯(cuò)誤,穿透程序的用戶態(tài)部分還可以導(dǎo)出SetWorkingMode例程,這個(gè)例程可讓調(diào)用者指定穿透強(qiáng)度,也即調(diào)用者在需要對(duì)某文件進(jìn)行操作時(shí),可以通過SetWorkingMode例程指定需要穿透哪些層,或者不需要穿透哪些層,以便實(shí)現(xiàn)有選擇性的穿透。其中,不同的用戶環(huán)境中,根據(jù)用戶安裝的程序的不同,文件操作鏈路上包含的層會(huì)有所不同,因此,為了讓調(diào)用者能夠區(qū)分出需要對(duì)哪些層進(jìn)行穿透哪些層不進(jìn)行穿透,在 具體實(shí)現(xiàn)時(shí),可以在對(duì)文件穿透程序進(jìn)行初始化時(shí),獲取到文件操作鏈上存在哪些層,同時(shí)可以以預(yù)先獲知的白名單(可以根據(jù)經(jīng)驗(yàn)進(jìn)行設(shè)置,其中保存了哪些層屬于非自閉的層)等方式,標(biāo)識(shí)出這些層中是否存在非自閉的層,如果存在,具體哪個(gè)或哪些層屬于這類非自閉的層,等等。將這些信息提供給調(diào)用者,這樣,調(diào)用者在需要對(duì)某文件進(jìn)行操作時(shí),就可以根據(jù)穿透程序提供的上述信息來指定穿透強(qiáng)度。其中,由于每個(gè)層一般也具有自己的文件名或者M(jìn)D5值等能夠唯一標(biāo)識(shí)該層的一些信息,因此,在白名單中保存非自閉的層時(shí),可以用這些唯一性標(biāo)識(shí)信息來代表這類的層。相應(yīng)的,在查詢文件操作鏈上存在哪些層時(shí),同樣可以去獲取文件操作鏈上的各個(gè)層的唯一性標(biāo)識(shí)信息,然后與白名單中記載的信息進(jìn)行比對(duì),將匹配成功的結(jié)果取出,標(biāo)記為當(dāng)前用戶環(huán)境中存在的非自閉的層即可。當(dāng)然,如果用戶安裝了新的驅(qū)動(dòng)等,則可能會(huì)導(dǎo)致文件操作鏈的變化,因此,文件穿透程序在初始化之后,還可以對(duì)文件操作鏈進(jìn)行監(jiān)控,如果發(fā)生變化,例如增加了新的層時(shí),同樣可以獲取到該層的唯一性標(biāo)識(shí)信息,然后與白名單中的信息進(jìn)行比對(duì),如果匹配成功,則可以對(duì)文件操作鏈中包含的非自閉層的信息進(jìn)行更新。調(diào)用者在文件操作請(qǐng)求中攜帶穿透強(qiáng)度信息時(shí),可以有多種實(shí)現(xiàn)方式。例如,可以在原有的文件操作請(qǐng)求格式基礎(chǔ)上擴(kuò)展出幾個(gè)字段,用于攜帶不需要穿透的層。這樣,調(diào)用者在發(fā)起某次文件操作請(qǐng)求時(shí),在根據(jù)穿透程序提供的文件操作鏈上各層的信息,確定出不需要穿透的層之后,就可以直接在擴(kuò)展的字段中插入不需要穿透的層的標(biāo)識(shí),這樣,穿透程序在接收到調(diào)用者的文件操作請(qǐng)求之后,就可以從請(qǐng)求對(duì)應(yīng)的字段中提取出不需要穿透的層的標(biāo)識(shí)。當(dāng)然,在實(shí)際應(yīng)用中,如果在某鏈路上,不需要穿透的層的數(shù)目大于需要穿透的層的數(shù)目,則還可以在請(qǐng)求中攜帶需要穿透的層的標(biāo)識(shí),穿透程序在接收到文件操作請(qǐng)求,解析出對(duì)應(yīng)字段上的層標(biāo)識(shí)之后,可以將文件操作鏈上除了解析出的這些層之外的層作為不需要穿透的層。當(dāng)然,無論在請(qǐng)求中攜帶的是需要穿透的層還是不需要穿透的層,都需要預(yù)先在穿透程序與調(diào)用者之間進(jìn)行協(xié)商,以便穿透程序能夠正確地解析出調(diào)用者的意圖?;蛘?,在另一種實(shí)現(xiàn)方式下,還可以在獲取到文件操作鏈中包含哪些非自閉的層之后,預(yù)先對(duì)各種可能出現(xiàn)的穿透強(qiáng)度進(jìn)行窮舉,分別給出一個(gè)穿透強(qiáng)度級(jí)別標(biāo)識(shí)。也就是說,每一個(gè)穿透強(qiáng)度級(jí)別標(biāo)識(shí)對(duì)應(yīng)著一組不需要穿透的層,穿透程序可以將定義好的各個(gè)穿透強(qiáng)度級(jí)別標(biāo)識(shí)及其對(duì)應(yīng)的不需要穿透的層信息提供給調(diào)用者。這樣,調(diào)用者在發(fā)起一次文件操作請(qǐng)求時(shí),可以首先確定好不需要穿透哪些層,然后可以找到對(duì)應(yīng)的穿透強(qiáng)度級(jí)別標(biāo)識(shí),在文件操作請(qǐng)求中攜帶該標(biāo)識(shí)即可。可見,在這種方式下,即使不需要穿透的層有多個(gè),也不需要分別攜帶上各個(gè)層的標(biāo)識(shí),只需要攜帶一個(gè)穿透強(qiáng)度級(jí)別標(biāo)識(shí)即可。例如,文件操作鏈上包括A、B、C、D、E這幾個(gè)過濾驅(qū)動(dòng),其中A、C、E都是非自閉的層,此時(shí)可以預(yù)先定義八個(gè)穿透強(qiáng)度級(jí)別。其中,假設(shè)第一個(gè)穿透強(qiáng)度級(jí)別的標(biāo)識(shí)為“穿透強(qiáng)度一”,其對(duì)應(yīng)的穿透強(qiáng)度可以為A、C、E這幾層都不需要穿透;第二個(gè)穿透強(qiáng)度級(jí)別的標(biāo)識(shí)為“穿透強(qiáng)度二”,其對(duì)應(yīng)的穿透強(qiáng)度可以為A、C這兩層不需要穿透;假設(shè)第三個(gè)穿透強(qiáng)度級(jí)別的標(biāo)識(shí)為“穿透強(qiáng)度三”,其對(duì)應(yīng)的穿透強(qiáng)度可以為C、E這兩層不需要穿透;第四個(gè)穿透強(qiáng)度級(jí)別的標(biāo)識(shí)為“穿透強(qiáng)度四”,其對(duì)應(yīng)的穿透強(qiáng)度可以為A、E這兩層不需要穿透;第五個(gè)穿透強(qiáng)度級(jí)別的標(biāo)識(shí)為“穿透強(qiáng)度五”,其對(duì)應(yīng)的穿透強(qiáng)度可以為A層不需要穿 透;第六個(gè)穿透強(qiáng)度級(jí)別的標(biāo)識(shí)為“穿透強(qiáng)度六”,其對(duì)應(yīng)的穿透強(qiáng)度可以為C層不需要穿透;第七個(gè)穿透強(qiáng)度級(jí)別的標(biāo)識(shí)為“穿透強(qiáng)度七”,其對(duì)應(yīng)的穿透強(qiáng)度可以為E層不需要穿透;第八個(gè)穿透強(qiáng)度級(jí)別的標(biāo)識(shí)為“穿透強(qiáng)度八”,其對(duì)應(yīng)的穿透強(qiáng)度可以為所有的層都需要穿透。如果某調(diào)用者在發(fā)起某次文件操作請(qǐng)求時(shí),需要對(duì)A、C這兩層不進(jìn)行穿透,則可以在文件操作請(qǐng)求中攜帶“穿透強(qiáng)度二”這一穿透強(qiáng)度級(jí)別標(biāo)識(shí);穿透程序在接收到文件操作請(qǐng)求之后,根據(jù)預(yù)先定義的級(jí)別標(biāo)識(shí)與各個(gè)不需要穿透的層之間的對(duì)應(yīng)關(guān)系,即可獲知不需要穿透的層有哪些。當(dāng)然,在實(shí)際應(yīng)用中,每個(gè)穿透強(qiáng)度標(biāo)識(shí)也可以與一組需要穿透的層的標(biāo)識(shí)相對(duì)應(yīng),這樣,穿透程序在接收到文件操作請(qǐng)求時(shí),就可以首先根據(jù)請(qǐng)求中攜帶的穿透強(qiáng)度標(biāo)識(shí)確定出需要穿透的層,然后從鏈路包含的所有層中除去這些需要穿透的層,就得到不需要穿透的層。S202 :根據(jù)所述文件的路徑確定所述文件對(duì)應(yīng)的文件系統(tǒng)下層設(shè)備中的原始地址;在操作系統(tǒng)中,對(duì)于不同磁盤設(shè)備上的文件,需要由對(duì)應(yīng)的文件系統(tǒng)中的函數(shù)來進(jìn)行處理,例如,對(duì)于通常所說的C盤、D盤等是由本地磁盤設(shè)備對(duì)應(yīng)的文件系統(tǒng)下層設(shè)備中的函數(shù)進(jìn)行處理,而對(duì)于網(wǎng)絡(luò)盤等需要由網(wǎng)絡(luò)磁盤設(shè)備對(duì)應(yīng)的文件系統(tǒng)下層設(shè)備中的函數(shù)進(jìn)行處理。穿透程序在收到調(diào)用者需要對(duì)某路徑下的文件執(zhí)行操作時(shí),首先需要根據(jù)路徑的根目錄(也即通常所說的盤符)確定出需要由哪個(gè)文件系統(tǒng)下層設(shè)備中的對(duì)象(或函數(shù))來處理,也即,獲知當(dāng)前待操作的文件對(duì)應(yīng)的文件系統(tǒng)下層設(shè)備中的原始地址,以便將該請(qǐng)求發(fā)送到該原始地址,由該地址中的對(duì)象進(jìn)行處理。但在實(shí)際應(yīng)用中,C盤、D盤等盤符表示方式是在操作系統(tǒng)為D0S(Disk OperatingSystem,磁盤操作系統(tǒng))的時(shí)代對(duì)磁盤設(shè)備的表示方式,隨著Windows操作系統(tǒng)的出現(xiàn),逐漸取替了 D0S,到了 WindowsNT之后,在操作系統(tǒng)內(nèi)核中已經(jīng)不再用C盤、D盤等來標(biāo)識(shí)各個(gè)磁盤設(shè)備,而是采用其他的方式,例如,原來的C盤在WindowsNT以上的版本中往往是用HarddiskVolumel來表示,等等。但是,在用戶態(tài)表示文件路徑時(shí),仍然沿用了 DOS時(shí)代的表示方式,也即仍然采用C盤、D盤等。因此,穿透程序在接收到調(diào)用者的文件操作請(qǐng)求時(shí),如果操作系統(tǒng)是WindowsNT以上版本,則需要將文件路徑中的根目錄的表示方式進(jìn)行轉(zhuǎn)換,這樣才能成功確定出當(dāng)前的文件對(duì)應(yīng)的文件系統(tǒng)下層設(shè)備中的原始地址,也即確定出應(yīng)該將當(dāng)前的文件發(fā)送給哪個(gè)文件系統(tǒng)中的函數(shù)進(jìn)行處理。
其中,在對(duì)文件路徑中的根目錄進(jìn)行轉(zhuǎn)換時(shí),可以有多種實(shí)現(xiàn)方式,例如,在一種簡(jiǎn)單的實(shí)現(xiàn)方式下,可以采用“硬編碼”的方式預(yù)先保存DOS中的盤符名稱與磁盤設(shè)備之間的對(duì)應(yīng)關(guān)系,當(dāng)收到某文件操作請(qǐng)求時(shí),直接從文件路徑中取出盤符,然后根據(jù)這種預(yù)先保存的對(duì)應(yīng)關(guān)系就可以確定出當(dāng)前的路徑對(duì)應(yīng)的是哪個(gè)磁盤設(shè)備中的文件,進(jìn)而,就可以根據(jù)磁盤設(shè)備確定出應(yīng)該由哪個(gè)文件系統(tǒng)的下層設(shè)備對(duì)其進(jìn)行處理。如果被操作的文件都是本地磁盤設(shè)備中的文件,則上述硬編碼的方式是有效的,但是,在實(shí)際應(yīng)用中,還經(jīng)常存在一些動(dòng)態(tài)加上來的一個(gè)或多個(gè)卷(例如通過USB 口加上的U盤或者網(wǎng)盤等等),在對(duì)這些卷中的文件進(jìn)行操作時(shí),如果仍然采用上述硬編碼的方式進(jìn)行映射,則由于無法預(yù)知?jiǎng)討B(tài)加上來的卷的盤符名稱,而無法成功完成轉(zhuǎn)換。因此,為了應(yīng)對(duì)上述現(xiàn)象,還可以采用對(duì)文件路徑進(jìn)行動(dòng)態(tài)分析的方式。具體的,可以依據(jù)文件路徑在對(duì)象管理器中查找對(duì)應(yīng)的文件對(duì)象解析例程,然后通過該文件對(duì)象解析例程對(duì)文件路徑進(jìn)行動(dòng)態(tài)的解析,最終確定文件路徑中的根目錄名稱對(duì)應(yīng)的磁盤設(shè)備,進(jìn)而確定出應(yīng)該由哪個(gè)下層設(shè)備對(duì)其進(jìn)行處理。具體完成上述動(dòng)態(tài)解析及轉(zhuǎn)換過程中,可以預(yù)先構(gòu)建對(duì)象管理器查詢的 OpenPacket結(jié)構(gòu),基于路徑分隔符“\”循環(huán)拆解文件路徑,例如,文件路徑為c:\a\b. txt,則第一次拆解出的路徑段為c:,第二次拆解出的路徑段為c:\a,第三次拆解出的路徑段為\Device\HarddiskVolumel\a\b. txt,即在本發(fā)明實(shí)施例,是基于遞歸調(diào)用的方式拆解文件路徑。對(duì)象管理器(Object Manager)是Windows NT內(nèi)核的一個(gè)基本組件。WindowsNT在設(shè)計(jì)的時(shí)候,“面向?qū)ο蟆钡脑O(shè)計(jì)思想已大行其道,即將原本散落在操作系統(tǒng)各處的資源集中抽象、封裝起來,進(jìn)而為各種內(nèi)部服務(wù)提供一致的訪問途徑。對(duì)象管理器主要用于實(shí)現(xiàn)以下功能(I)提供一種公共的、統(tǒng)一的機(jī)制來使用系統(tǒng)資源;(2)將對(duì)象保護(hù)隔離到操作系統(tǒng)的統(tǒng)一區(qū)域中,從而可以做到C2安全等級(jí);(3)提供一種機(jī)制來記錄進(jìn)程使用對(duì)象的數(shù)量,從而可以對(duì)系統(tǒng)資源的使用加上限制;(4)建立一套對(duì)象命名方案,可以更方便地融合現(xiàn)有的對(duì)象。對(duì)象管理器共維護(hù)了幾十種對(duì)象類型(Windows 2000是27種對(duì)象類型;Windows XP是29種對(duì)象類型),常見的如符號(hào)鏈接(Symbolic Link)、進(jìn)程(Process)、線程(Thread)、作業(yè)(Job )、文件(File)、事件(Event)、定時(shí)器(Timer )等等。對(duì)象管理器中維護(hù)有拉鏈?zhǔn)降膶?duì)象Hash表,基于每次拆解出的路徑段搜索對(duì)象管理器,若能查找到對(duì)應(yīng)的對(duì)象解析例程ParseProcedure,則繼續(xù)下一次的文件路徑拆解,并基于下一次拆解出的路徑段和之前已拆解出的路徑段搜索對(duì)象管理器,若當(dāng)前的文件路徑經(jīng)過循環(huán)解析被完全拆解完畢,則經(jīng)過搜索對(duì)象管理器找到的文件對(duì)象解析例程ParseRout ine為當(dāng)前文件路徑對(duì)應(yīng)的文件對(duì)象解析例程。例如,“c:\windows\a. exe”這一文件路徑在進(jìn)內(nèi)核的時(shí)候,要加上前綴\ \變成"\ \c:\windows\a. exe”,其中,“\”就代表對(duì)象管理器的根目錄。解析過程可以包括(I)從對(duì)象管理器的“\”目錄開始搜索,查找到底什么是\ \ ;(2)查找結(jié)果發(fā)現(xiàn),原來“\ ”也對(duì)應(yīng)一個(gè)目錄,是“\Global ”;(3)從頭開始,查找什么是“\Global \c:\windows\a. exe” ;(4)查找結(jié)果發(fā)現(xiàn),原來“\Global \c:”這個(gè)名稱在內(nèi)核里實(shí)際是一個(gè)鏈接,“\Global \c: ” 真實(shí)的名稱應(yīng)該是“\Device\HarddiskVolumel” ;(5)繼續(xù)從頭開始查找。其中,當(dāng)查找到“\Device\HarddiskVolumel” (\Device是個(gè)目錄)之后,由于“HarddiskVolumel”的Type (類型)是Device (設(shè)備)了,因此,解析可以到此結(jié)束了??梢姡@里相當(dāng)于是一個(gè)遞歸的過程,最終將文件的路徑替換變成“\DeviCe\HarddiskVolumeI\windows\a. exe”。通過以上方式,不僅能發(fā)現(xiàn)本地磁盤設(shè)備,而且也能發(fā)現(xiàn)一些動(dòng)態(tài)加上來的卷。例如,對(duì)于文件路徑“Z: \NetWorkFile. txt”,同樣應(yīng)該上述的遞歸解析過程,也可以發(fā)現(xiàn)原來這個(gè)“Z:\”是代表網(wǎng)絡(luò)映射的磁盤設(shè)備,等等??傊ㄟ^上述文件路徑解析方法能動(dòng)態(tài)解析目標(biāo)文件路徑,對(duì)于動(dòng)態(tài)映射的網(wǎng)絡(luò)磁盤設(shè)備驅(qū)動(dòng)器等,通過搜索對(duì)象管理器就能動(dòng)態(tài)獲得DOS-Style文件路徑格式、盤符和文件系統(tǒng)下層目標(biāo)設(shè)備對(duì)象之間的對(duì)應(yīng)處理關(guān)系。S203 :根據(jù)所述穿透強(qiáng)度信息確定不需要穿透的層;
由于調(diào)用者的文件操作請(qǐng)求中已經(jīng)指明了哪些層是需要穿透的或者哪些層是不需要穿透的,因此,可以直接通過對(duì)文件操作請(qǐng)求的解析,獲知哪些層是不需要穿透的。S204 :根據(jù)所述不需要穿透的層以及所述原始地址構(gòu)造I/O請(qǐng)求,以便依次調(diào)用所述不需要穿透的層的接口對(duì)所述I/o請(qǐng)求包進(jìn)行處理,并將處理后I/O請(qǐng)求包發(fā)送到所述原始地址處,由所述目標(biāo)設(shè)備對(duì)象對(duì)經(jīng)由所述不需要穿透的層處理后的I/o請(qǐng)求包進(jìn)行處理。在Windows操作系統(tǒng)家族中,一般都是通過發(fā)送IRP (I/O Request Packet, I/O請(qǐng)求包)來進(jìn)行與驅(qū)動(dòng)程序的通訊。用來封裝IRP的數(shù)據(jù)結(jié)構(gòu)不僅僅用來描述一個(gè)I/O操作的請(qǐng)求本身的內(nèi)容,還要用來維護(hù)這一請(qǐng)求在一系列驅(qū)動(dòng)程序中傳遞的過程中的相關(guān)狀態(tài)信息。也就是說IRP可以被定義為是I/O系統(tǒng)為了處理一個(gè)I/O請(qǐng)求而用來存儲(chǔ)必要信息的地方。當(dāng)一個(gè)線程調(diào)用一個(gè)I/O服務(wù)的時(shí)候,I/O管理器構(gòu)造IRP,用于在I/O系統(tǒng)處理此請(qǐng)求的過程中代表此請(qǐng)求。因此,在文件穿透的內(nèi)核態(tài)中,同樣需要構(gòu)造一個(gè)I/O請(qǐng)求包,在該I/O請(qǐng)求包中填充需要流經(jīng)的層以及原始地址信息。也就是說,在步驟S102中確定出的原始地址也就是說該I/O請(qǐng)求包需要發(fā)送到的目的地址,在步驟S103中確定出的不需要穿透的層也就是該I/O請(qǐng)求包需要流經(jīng)的層,也即需要調(diào)用這些層的接口對(duì)該I/O請(qǐng)求包進(jìn)行處理之后,再發(fā)送到原始地址。例如,假設(shè)文件操作鏈上存在A、B、C、D這幾層之后到達(dá)文件系統(tǒng)下層設(shè)備,其中,在某文件操作請(qǐng)求中寫明不需要穿透B和D這兩個(gè)層,則在填充I/O請(qǐng)求包時(shí),會(huì)填入B和D這兩個(gè)層以及原始地址,這樣,I/O請(qǐng)求包會(huì)首先到達(dá)B層,B層處理完成之后,會(huì)通過D層的接口調(diào)用D層進(jìn)行處理,在D層處理之后,再發(fā)送到原始地址,由文件系統(tǒng)下層設(shè)備中的對(duì)象進(jìn)行處理。需要說明的是,在各個(gè)不需要穿透的層中需要對(duì)I/O請(qǐng)求包進(jìn)行怎樣的處理,是由各個(gè)不需要穿透的層自身定義的邏輯來決定的,例如,如果某不需要穿透的層是重定向類的層,則當(dāng)I/O請(qǐng)求包到達(dá)該層之后,可能需要根據(jù)重定向信息對(duì)文件的路徑進(jìn)行替換操作;如果某不需要穿透的層是加解密類的層,則需要在請(qǐng)求返回時(shí),對(duì)文件內(nèi)容進(jìn)行解密操作,等等。其中,I/O請(qǐng)求包中包括從文件操作請(qǐng)求中提取的文件操作信息,當(dāng)I/O請(qǐng)求包(IPR)被發(fā)送至對(duì)應(yīng)的文件系統(tǒng)下層設(shè)備的原始地址之后,則由文件系統(tǒng)下層設(shè)備依據(jù)文件操作信息繼續(xù)執(zhí)行對(duì)應(yīng)的文件操作。具體而言,當(dāng)IRP發(fā)送給文件系統(tǒng)的設(shè)備對(duì)象后,直到寫入硬盤,還要經(jīng)過一系列復(fù)雜的處理過程,一般而言,這個(gè)請(qǐng)求還要經(jīng)過卷快照(Vo I snap, sys)、卷管理器(Ftdisk. sys)、分區(qū)管理器(Partmgr. sys)、磁盤類驅(qū)動(dòng)(disk.sys)、磁盤端口驅(qū)動(dòng)(以IDE系統(tǒng)為例是atapi. sys)、小端口驅(qū)動(dòng)(以Adaptec 1540 SCSI為例是Ahal54x. sys)等一系列的傳遞,最終由小端口驅(qū)動(dòng)決定與入磁盤或磁帶機(jī)的相應(yīng)偏移。卷管理(包括快照)引入了動(dòng)態(tài)的概念,使得windows可以創(chuàng)建多分區(qū)卷(比如鏡像卷mirrors,條帶卷stripes, RAID-5等),該組件會(huì)根據(jù)實(shí)際情況將請(qǐng)求定位到目標(biāo)卷的某個(gè)偏移。分區(qū)管理器負(fù)責(zé)通知即插即用管理器當(dāng)前有哪些分區(qū),以及他們的狀態(tài)(創(chuàng)建、刪除等)。磁盤類驅(qū)動(dòng)實(shí)現(xiàn)了對(duì)于所有磁盤共有的功能,例如,SCSI (Small Computer SystemInterface,小型計(jì)算機(jī)系統(tǒng)接口)Port是針對(duì)SCSI總線上的磁盤特性。最后小端口驅(qū)動(dòng)針對(duì)某些廠商的特有產(chǎn)品特點(diǎn),這類驅(qū)動(dòng)往往由廠商自己提供??偟膩碚f,就是每一層根據(jù)自己的接口,接收上層傳遞來的請(qǐng)求,以自己看到的“視圖”,找到目標(biāo)設(shè)備的某個(gè)扇區(qū)偏移,創(chuàng)建、寫入、刪除數(shù)據(jù)??傊诒景l(fā)明實(shí)施例中,并不是將所有的層不加區(qū)別的全部穿透,而是有選擇性的分層穿透,這樣,針對(duì)一些非自閉的層,就可以選擇不進(jìn)行穿透,避免出現(xiàn)操作出錯(cuò)的現(xiàn)象。為了便于理解,下面結(jié)合圖3以及圖4對(duì)本發(fā)明實(shí)施例進(jìn)行進(jìn)一步地介紹。首先,在采用前述“硬編碼”的方式對(duì)文件路徑中的根目錄進(jìn)行轉(zhuǎn)換的情況下進(jìn)行本發(fā)明實(shí)施例的分層穿透時(shí),示意圖可以如圖3所示。也即,調(diào)用者的文件操作請(qǐng)求會(huì)通過文件穿透程序的驅(qū)動(dòng)接口層發(fā)送到內(nèi)容執(zhí)行層模擬程序?qū)φ{(diào)用者輸入?yún)?shù)進(jìn)行驗(yàn)證(文件操作請(qǐng)求不再發(fā)送到原有的內(nèi)核接口層),然后針對(duì)各個(gè)過濾驅(qū)動(dòng)可以執(zhí)行分層的穿透。在執(zhí)行分層穿透時(shí),可以選擇多種不同的穿透強(qiáng)度,例如,圖3中所示的“穿透強(qiáng)度一”相當(dāng)于不穿透任何過濾驅(qū)動(dòng);“穿透強(qiáng)度二”相當(dāng)于穿透了過濾驅(qū)動(dòng)一,而其他的過濾驅(qū)動(dòng)二……過去驅(qū)動(dòng)N并未穿透;“穿透強(qiáng)度三”相當(dāng)于穿透了全部的過濾驅(qū)動(dòng),等等。
在采用前述動(dòng)態(tài)解析文件路徑中的根目錄的情況下,在進(jìn)行本發(fā)明實(shí)施例的分層穿透時(shí),示意圖可以如圖4所示。也即,與圖3所示不同的是,需要搜索對(duì)象管理器對(duì)文件路徑進(jìn)行循環(huán)解析得到對(duì)象解析例程,然后確定出需要由文件系統(tǒng)的哪個(gè)對(duì)象對(duì)當(dāng)前的請(qǐng)求進(jìn)行處理。同時(shí)確定出采用怎樣的穿透強(qiáng)度,然后構(gòu)造出I/O請(qǐng)求包,按照不需要穿透的層以及原始地址,進(jìn)行I/O請(qǐng)求包的發(fā)送。在進(jìn)行分層穿透時(shí),同樣可以有多個(gè)穿透強(qiáng)度,參見圖4中的穿透強(qiáng)度一、穿透強(qiáng)度二及穿透強(qiáng)度三。需要說明的是,在圖3及圖4中,都是以“過濾驅(qū)動(dòng)”級(jí)的分層穿透為例進(jìn)行介紹的,但在實(shí)際應(yīng)用中,分層穿透方案并不限于“過濾驅(qū)動(dòng)”級(jí),文件操作鏈上的所有節(jié)點(diǎn)都可以選擇進(jìn)行穿透或者不穿透。以文件創(chuàng)建過程為例,本發(fā)明實(shí)施例的完整實(shí)現(xiàn)過程可以包括以下步驟步驟I :調(diào)用者進(jìn)程發(fā)起FSCreateFileA文件創(chuàng)建請(qǐng)求,對(duì)于存在“重定向類驅(qū)動(dòng)”、“加解密類驅(qū)動(dòng)”等第三方功能型過濾驅(qū)動(dòng)的情況,調(diào)用者可有選擇地考慮“是否穿透指定的過濾驅(qū)動(dòng)”,將其攜帶在文件創(chuàng)建請(qǐng)求中。步驟2 FSCreateFileA 例程轉(zhuǎn)換 ANSI (American National StandardsInstitute,美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)的標(biāo)準(zhǔn)碼)相關(guān)參數(shù)為UNICODE類型并調(diào)用FSCreateFileW例程。
步驟3 =FSCreateFileff例程判斷系統(tǒng)平臺(tái)(32位、64位或32位兼容模式)構(gòu)建結(jié)構(gòu)參數(shù),發(fā)送控制碼FILE_IO_CREATE_FILE并同步等待返回。步驟4 :FSCreateFileW例程內(nèi)核部分接收用戶態(tài)請(qǐng)求,校驗(yàn)輸入?yún)?shù),Captured用戶態(tài)地址到內(nèi)核內(nèi)存空間。步驟5 =FSCreateFileff例程內(nèi)核部分構(gòu)建OpenPacket結(jié)構(gòu),以“\”符為分段,拆解輸入的文件路徑,拆解出的路徑部分搜索對(duì)象管理器,查找出對(duì)應(yīng)的ParseProcedure。在循環(huán)解析完畢時(shí),便可以找到對(duì)象的Parse Routine例程。步驟6 Parse Routine例程的實(shí)現(xiàn)類似于微軟的IopParseDevice例程(模擬實(shí)現(xiàn)),其內(nèi)部會(huì)構(gòu)建并填充IRP請(qǐng)求數(shù)據(jù)包并發(fā)送至不需要穿透的層,并最終發(fā)送到系統(tǒng)原始地址處。此時(shí),文件系統(tǒng)操作棧上的其他第三方過濾驅(qū)動(dòng)(其他安全軟件、驅(qū)動(dòng)級(jí)惡意程序等)被旁路。步驟7 0bInsert0bject例程插入新創(chuàng)建出的對(duì)象至對(duì)象管理器Hash結(jié)構(gòu),并得 到返回的文件句柄。步驟8 :內(nèi)核同步調(diào)用返回用戶態(tài)句柄信息以及調(diào)用結(jié)果。如果調(diào)用失敗,用戶態(tài)接口可以設(shè)置相應(yīng)的錯(cuò)誤碼,這樣,調(diào)用者線程可以通過GetLastError例程得到詳細(xì)的錯(cuò)誤信息。與本發(fā)明實(shí)施例提供的文件操作方法相對(duì)應(yīng),本發(fā)明實(shí)施例還提供了一種文件操作裝置,參見圖5,該裝置可以包括請(qǐng)求接收單元501,用于接收對(duì)指定文件進(jìn)行操作的請(qǐng)求,所述請(qǐng)求中攜帶有文件的路徑以及穿透強(qiáng)度信息;目標(biāo)設(shè)備對(duì)象確定單元502,用于根據(jù)所述文件的路徑確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象,并根據(jù)預(yù)置的文件系統(tǒng)各設(shè)備對(duì)象的原始地址,確定所述目標(biāo)設(shè)備對(duì)象的原始地址;穿透強(qiáng)度確定單元503,用于根據(jù)所述穿透強(qiáng)度信息確定不需要穿透的層;請(qǐng)求包構(gòu)造單元504,用于根據(jù)所述不需要穿透的層以及所述原始地址構(gòu)造I/O請(qǐng)求包,以便依次調(diào)用所述不需要穿透的層的接口對(duì)所述I/O請(qǐng)求包進(jìn)行處理,并將處理后的I/o請(qǐng)求包發(fā)送到所述原始地址處,由所述目標(biāo)設(shè)備對(duì)象對(duì)經(jīng)由所述不需要穿透的層處理后的I/O請(qǐng)求包進(jìn)行處理。具體實(shí)現(xiàn)時(shí),目標(biāo)設(shè)備對(duì)象確定單元502可以包括第一磁盤設(shè)備確定子單元,用于根據(jù)預(yù)置的根目錄名稱與磁盤設(shè)備之間的對(duì)應(yīng)關(guān)系,確定所述路徑中的根目錄名稱對(duì)應(yīng)的磁盤設(shè)備;第一目標(biāo)設(shè)備對(duì)象確定子單元,用于根據(jù)所述根目錄名稱對(duì)應(yīng)的磁盤設(shè)備,確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象。為了能夠識(shí)別出一些動(dòng)態(tài)加上來的卷,目標(biāo)設(shè)備對(duì)象確定單元502也可以包括文件對(duì)象解析例程查找子單元,用于依據(jù)所述文件的路徑在對(duì)象管理器中查找對(duì)應(yīng)的文件對(duì)象解析例程;第二磁盤設(shè)備確定子單元,用于通過所述文件對(duì)象解析例程確定所述路徑中的根目錄名稱對(duì)應(yīng)的磁盤設(shè)備;第二目標(biāo)設(shè)備對(duì)象確定子單元,用于根據(jù)所述根目錄名稱對(duì)應(yīng)的磁盤設(shè)備,確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象。在實(shí)際應(yīng)用中,所述請(qǐng)求中攜帶的穿透強(qiáng)度信息包括需要穿透的層的標(biāo)識(shí)或不需要穿透的層的標(biāo)識(shí);或者,所述請(qǐng)求中攜帶的穿透強(qiáng)度信息包括預(yù)置的穿透強(qiáng)度級(jí)別標(biāo)識(shí),其中,每個(gè)穿透強(qiáng)度級(jí)別標(biāo)識(shí)對(duì)應(yīng)著至少一組需要穿透的層的標(biāo)識(shí)或不需要穿透的層的標(biāo)識(shí)。其中,所述不需要穿透的層為非自閉的層,所述非自閉的層為穿透之后會(huì)造成系統(tǒng)功能性缺失的層。相應(yīng)的,該裝置還可以包括層標(biāo)識(shí)獲取單元,用于在初始化過程中,獲取當(dāng)前文件操作鏈上包括的各個(gè)層的唯一丨I"生標(biāo)識(shí)信息;
標(biāo)記單元,用于將各個(gè)層的唯一性標(biāo)識(shí)信息與預(yù)置的白名單中保存的非自閉的層的唯一性標(biāo)識(shí)信息進(jìn)行比對(duì),將出現(xiàn)在所述白名單中的層標(biāo)記為當(dāng)前文件操作鏈上存在的非自閉的層,以便文件操作者在發(fā)起文件操作請(qǐng)求時(shí),根據(jù)該標(biāo)記的信息確定所述穿透強(qiáng)度f(wàn)目息??傊?,通過本發(fā)明實(shí)施例提供的文件操作裝置,可以根據(jù)文件操作請(qǐng)求中攜帶的穿透強(qiáng)度信息確定出文件操作鏈上哪些層是不需要穿透的,然后就可以讓構(gòu)造出的I/O請(qǐng)求包流經(jīng)這些層??梢姡⒉皇菍⑽募僮麈溕纤械膶佣疾患訁^(qū)別的全部穿透,而是有選擇性的分層穿透,這樣,針對(duì)一些有可能會(huì)對(duì)系統(tǒng)造成功能性缺失的層,就可以選擇不進(jìn)行穿透,避免出現(xiàn)操作出錯(cuò)的現(xiàn)象。通過以上的實(shí)施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn)?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在存儲(chǔ)介質(zhì)中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見即可,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處。尤其,對(duì)于裝置或系統(tǒng)實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述得比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所描述的裝置及系統(tǒng)實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。以上對(duì)本發(fā)明所提供的文件操作方法及裝置,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處。綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1.一種文件操作方法,其特征在于,包括 接收對(duì)指定文件進(jìn)行操作的請(qǐng)求,所述請(qǐng)求中攜帶有文件的路徑以及穿透強(qiáng)度信息; 根據(jù)所述文件的路徑確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象,并根據(jù)預(yù)置的文件系統(tǒng)各設(shè)備對(duì)象的原始地址,確定所述目標(biāo)設(shè)備對(duì)象的原始地址; 根據(jù)所述穿透強(qiáng)度信息確定不需要穿透的層; 根據(jù)所述不需要穿透的層以及所述原始地址構(gòu)造I/o請(qǐng)求包,以便依次調(diào)用所述不需要穿透的層的接口對(duì)所述I/o請(qǐng)求包進(jìn)行處理,并將處理后的I/O請(qǐng)求包發(fā)送到所述原始地址處,由所述目標(biāo)設(shè)備對(duì)象對(duì)經(jīng)由所述不需要穿透的層處理后的I/O請(qǐng)求包進(jìn)行處理。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述根據(jù)所述文件的路徑確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象包括 根據(jù)預(yù)置的根目錄名稱與磁盤設(shè)備之間的對(duì)應(yīng)關(guān)系,確定所述路徑中的根目錄名稱對(duì)應(yīng)的磁盤設(shè)備; 根據(jù)所述根目錄名稱對(duì)應(yīng)的磁盤設(shè)備,確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象。
3.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述根據(jù)所述文件的路徑確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象包括 依據(jù)所述文件的路徑在對(duì)象管理器中查找對(duì)應(yīng)的文件對(duì)象解析例程; 通過所述文件對(duì)象解析例程確定所述路徑中的根目錄名稱對(duì)應(yīng)的磁盤設(shè)備; 根據(jù)所述根目錄名稱對(duì)應(yīng)的磁盤設(shè)備,確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象。
4.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述請(qǐng)求中攜帶的穿透強(qiáng)度信息包括需要穿透的層的標(biāo)識(shí)或不需要穿透的層的標(biāo)識(shí);或者,所述請(qǐng)求中攜帶的穿透強(qiáng)度信息包括預(yù)置的穿透強(qiáng)度級(jí)別標(biāo)識(shí),其中,每個(gè)穿透強(qiáng)度級(jí)別標(biāo)識(shí)對(duì)應(yīng)著至少一組需要穿透的層的標(biāo)識(shí)或不需要穿透的層的標(biāo)識(shí)。
5.根據(jù)權(quán)利要求I至4任一項(xiàng)所述的方法,其特征在于,所述不需要穿透的層為非自閉的層,所述非自閉的層為穿透之后會(huì)造成系統(tǒng)功能性缺失的層。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,還包括 在初始化過程中,獲取當(dāng)前文件操作鏈上包括的各個(gè)層的唯一性標(biāo)識(shí)信息; 將各個(gè)層的唯一性標(biāo)識(shí)信息與預(yù)置的白名單中保存的非自閉的層的唯一性標(biāo)識(shí)信息進(jìn)行比對(duì),將出現(xiàn)在所述白名單中的層標(biāo)記為當(dāng)前文件操作鏈上存在的非自閉的層,以便文件操作者在發(fā)起文件操作請(qǐng)求時(shí),根據(jù)該標(biāo)記的信息確定所述穿透強(qiáng)度信息。
7.一種文件操作裝置,其特征在于,包括 請(qǐng)求接收單元,用于接收對(duì)指定文件進(jìn)行操作的請(qǐng)求,所述請(qǐng)求中攜帶有文件的路徑以及穿透強(qiáng)度信息; 目標(biāo)設(shè)備對(duì)象確定單元,用于根據(jù)所述文件的路徑確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象,并根據(jù)預(yù)置的文件系統(tǒng)各設(shè)備對(duì)象的原始地址,確定所述目標(biāo)設(shè)備對(duì)象的原始地址; 穿透強(qiáng)度確定單元,用于根據(jù)所述穿透強(qiáng)度信息確定不需要穿透的層; 請(qǐng)求包構(gòu)造單元,用于根據(jù)所述不需要穿透的層以及所述原始地址構(gòu)造I/O請(qǐng)求包,以便依次調(diào)用所述不需要穿透的層的接口對(duì)所述I/o請(qǐng)求包進(jìn)行處理,并將處理后的I/O請(qǐng)求包發(fā)送到所述原始地址處,由所述目標(biāo)設(shè)備對(duì)象對(duì)經(jīng)由所述不需要穿透的層處理后的I/O請(qǐng)求包進(jìn)行處理。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述目標(biāo)設(shè)備對(duì)象確定單元包括 第一磁盤設(shè)備確定子單元,用于根據(jù)預(yù)置的根目錄名稱與磁盤設(shè)備之間的對(duì)應(yīng)關(guān)系,確定所述路徑中的根目錄名稱對(duì)應(yīng)的磁盤設(shè)備; 第一目標(biāo)設(shè)備對(duì)象確定子單元,用于根據(jù)所述根目錄名稱對(duì)應(yīng)的磁盤設(shè)備,確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象。
9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述目標(biāo)設(shè)備對(duì)象確定單元包括 文件對(duì)象解析例程查找子單元,用于依據(jù)所述文件的路徑在對(duì)象管理器中查找對(duì)應(yīng)的文件對(duì)象解析例程; 第二磁盤設(shè)備確定子單元,用于通過所述文件對(duì)象解析例程確定所述路徑中的根目錄名稱對(duì)應(yīng)的磁盤設(shè)備; 第二目標(biāo)設(shè)備對(duì)象確定子單元,用于根據(jù)所述根目錄名稱對(duì)應(yīng)的磁盤設(shè)備,確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象。
10.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述請(qǐng)求中攜帶的穿透強(qiáng)度信息包括需要穿透的層的標(biāo)識(shí)或不需要穿透的層的標(biāo)識(shí);或者,所述請(qǐng)求中攜帶的穿透強(qiáng)度信息包括預(yù)置的穿透強(qiáng)度級(jí)別標(biāo)識(shí),其中,每個(gè)穿透強(qiáng)度級(jí)別標(biāo)識(shí)對(duì)應(yīng)著至少一組需要穿透的層的標(biāo)識(shí)或不需要穿透的層的標(biāo)識(shí)。
11.根據(jù)權(quán)利要求7至10任一項(xiàng)所述的裝置,其特征在于,所述不需要穿透的層為非自閉的層,所述非自閉的層為穿透之后會(huì)造成系統(tǒng)功能性缺失的層。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,還包括 層標(biāo)識(shí)獲取單元,用于在初始化過程中,獲取當(dāng)前文件操作鏈上包括的各個(gè)層的唯一性標(biāo)識(shí)信息; 標(biāo)記單元,用于將各個(gè)層的唯一性標(biāo)識(shí)信息與預(yù)置的白名單中保存的非自閉的層的唯一性標(biāo)識(shí)信息進(jìn)行比對(duì),將出現(xiàn)在所述白名單中的層標(biāo)記為當(dāng)前文件操作鏈上存在的非自閉的層,以便文件操作者在發(fā)起文件操作請(qǐng)求時(shí),根據(jù)該標(biāo)記的信息確定所述穿透強(qiáng)度信肩、O
全文摘要
本發(fā)明公開了文件操作方法及裝置,其中,所述方法包括接收對(duì)指定文件進(jìn)行操作的請(qǐng)求,所述請(qǐng)求中攜帶有文件的路徑以及穿透強(qiáng)度信息;根據(jù)所述文件的路徑確定所述文件對(duì)應(yīng)的文件系統(tǒng)目標(biāo)設(shè)備對(duì)象,并根據(jù)預(yù)置的文件系統(tǒng)各設(shè)備對(duì)象的原始地址,確定所述目標(biāo)設(shè)備對(duì)象的原始地址;根據(jù)所述穿透強(qiáng)度信息確定不需要穿透的層;根據(jù)所述不需要穿透的層以及所述原始地址構(gòu)造I/O請(qǐng)求包,以便依次調(diào)用所述不需要穿透的層的接口對(duì)所述I/O請(qǐng)求包進(jìn)行處理,并將處理后的I/O請(qǐng)求包發(fā)送到所述原始地址處,由所述目標(biāo)設(shè)備對(duì)象對(duì)經(jīng)由所述不需要穿透的層處理后的I/O請(qǐng)求包進(jìn)行處理。通過本發(fā)明,能夠在通過文件穿透的方式對(duì)文件進(jìn)行操作時(shí),避免出現(xiàn)操作錯(cuò)誤。
文檔編號(hào)G06F17/30GK102768678SQ20121019982
公開日2012年11月7日 申請(qǐng)日期2012年6月14日 優(yōu)先權(quán)日2012年6月14日
發(fā)明者潘劍鋒, 王宇 申請(qǐng)人:奇智軟件(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1