專利名稱:用于移動(dòng)通信框架內(nèi)的獨(dú)立平臺(tái)掃描子系統(tǒng)應(yīng)用程序接口的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及移動(dòng)通信設(shè)備的安全領(lǐng)域,具體地說,是關(guān)于掃描移動(dòng)通信設(shè)備以偵測(cè)惡意軟件。
背景技術(shù):
在過去的十年中,移動(dòng)蜂窩式電話的數(shù)目與使用增長(zhǎng)迅速。最近一段時(shí)期,引入了無(wú)線設(shè)備,它能將移動(dòng)電話與個(gè)人數(shù)字助理(PDA)的功能相結(jié)合??梢灶A(yù)計(jì),在未來(lái)一段時(shí)間內(nèi),隨著新型蜂窩式電信標(biāo)準(zhǔn)(例如GPRS、UMTS及WAP)使得跨無(wú)線界面上的高速數(shù)據(jù)傳輸成為可能,這一領(lǐng)域?qū)⒔?jīng)歷強(qiáng)勁的增長(zhǎng)。
可以預(yù)計(jì),無(wú)線通信平臺(tái)將有可能遭受到所謂的惡意軟件(malware),如病毒、特洛伊木馬、計(jì)算機(jī)蠕蟲(下文中統(tǒng)稱為‘病毒’),以及其它干擾性/有害內(nèi)容的侵襲;其侵害方式與現(xiàn)今個(gè)人計(jì)算機(jī)以及工作站所受侵害方式大致相同。事實(shí)上已經(jīng)有多種移動(dòng)電話病毒被確認(rèn)。
為抵御病毒的襲擊,必須在移動(dòng)平臺(tái)上布置安裝防病毒軟件,其方式與桌上型計(jì)算機(jī)環(huán)境的布置方式大致相同。多種不同的桌上型防病毒應(yīng)用軟件現(xiàn)已問世。這些應(yīng)用軟件的大部分依靠一種基本的掃描引擎,它會(huì)尋找可疑檔案中是否存在預(yù)先確定的病毒簽名。這些簽名儲(chǔ)存在一個(gè)數(shù)據(jù)庫(kù)中,必須經(jīng)常對(duì)其進(jìn)行更新,以反映最新識(shí)別的病毒信息。
一般來(lái)說,用戶們可以每隔一段時(shí)間通過互連網(wǎng)、從接收的電子郵件、或從一張光盤和軟盤下載替換用數(shù)據(jù)庫(kù)。用戶們也需要時(shí)常更新軟件引擎,以便于在發(fā)現(xiàn)新類型的病毒時(shí)利用最新的病毒偵測(cè)技術(shù)。
移動(dòng)無(wú)線平臺(tái)給軟件開發(fā)商們(包括防病毒軟件開發(fā)商)帶來(lái)了一系列的問題。具體地,移動(dòng)無(wú)線平臺(tái)通常不像傳統(tǒng)的桌面電腦那樣被標(biāo)準(zhǔn)化。例如,移動(dòng)無(wú)線平臺(tái)可能安裝多種類型的操作系統(tǒng),而不是運(yùn)行微軟公司的視窗操作系統(tǒng)。諸如此類或其他標(biāo)準(zhǔn)化的缺乏,使得設(shè)計(jì)可運(yùn)行于任何移動(dòng)無(wú)線平臺(tái)的反病毒軟件復(fù)雜起來(lái)。
發(fā)明內(nèi)容
本發(fā)明提供了一種用于移動(dòng)通信設(shè)備的獨(dú)立平臺(tái)系統(tǒng)以及與之相關(guān)的方法。包括一能夠通過無(wú)線網(wǎng)絡(luò)通信的移動(dòng)通信設(shè)備。該移動(dòng)通信設(shè)備安裝有一操作系統(tǒng)。與之相關(guān)聯(lián)的有一獨(dú)立平臺(tái)掃描子系統(tǒng)與移動(dòng)通信設(shè)備上的操作系統(tǒng)進(jìn)行通信以達(dá)到掃描目的。還提供了一種獨(dú)立平臺(tái)應(yīng)用程序接口,用于為操作系統(tǒng)以及掃描子系統(tǒng)提供接口。該獨(dú)立平臺(tái)應(yīng)用程序接口包括一抽象庫(kù),該抽象庫(kù)作為端口將獨(dú)立平臺(tái)掃描子系統(tǒng)安裝到移動(dòng)通信設(shè)備以及與之關(guān)聯(lián)的操作系統(tǒng)。
在一個(gè)實(shí)施例中,應(yīng)用程序可包括一郵件應(yīng)用程序、一瀏覽器應(yīng)用程序、一電話薄應(yīng)用程序、一消息應(yīng)用程序和/或Java應(yīng)用程序。
在另一個(gè)實(shí)施例中,該抽象庫(kù)可支持系統(tǒng)環(huán)境初始化、庫(kù)初始化、出錯(cuò)函數(shù)、內(nèi)存配置、輸入/輸出(I/O)、數(shù)據(jù)認(rèn)證、同步對(duì)象、超文本傳輸協(xié)議、共享內(nèi)存、系統(tǒng)時(shí)間、設(shè)備信息和/或調(diào)試。
圖1是移動(dòng)通信框架一個(gè)實(shí)施例示意圖;圖2是移動(dòng)通信框架另一個(gè)實(shí)施例示意圖;圖3是與一個(gè)移動(dòng)通信設(shè)備相關(guān)聯(lián)的一個(gè)架構(gòu)的實(shí)施例示意圖;圖4是一個(gè)通過使用一臺(tái)移動(dòng)通信設(shè)備訪問安全或內(nèi)容分析功能的系統(tǒng)的實(shí)施例示意圖;圖5是根據(jù)圖4所示系統(tǒng)的一個(gè)應(yīng)用服務(wù)器的實(shí)施例,通過使用一臺(tái)移動(dòng)通信設(shè)備訪問安全或內(nèi)容分析功能框架的示意圖;圖6是根據(jù)圖4所示系統(tǒng)的一個(gè)重復(fù)加載函數(shù)庫(kù)的實(shí)施例,通過使用一臺(tái)移動(dòng)通信設(shè)備訪問安全或內(nèi)容分析功能框架的示意圖;圖7是在圖4所示系統(tǒng)下執(zhí)行的一個(gè)按需式掃描系統(tǒng)的示意圖;圖8是一個(gè)應(yīng)用程序接口(API)的各種不同組件的一個(gè)階梯狀關(guān)系的實(shí)施例示意圖,它可以用于在移動(dòng)應(yīng)用程序與一個(gè)掃描子系統(tǒng)之間提供接口;圖9是一個(gè)示范型函數(shù)庫(kù)接口啟動(dòng)的示意圖;圖10是一個(gè)出錯(cuò)代碼功能的一個(gè)示范性格式的實(shí)施例示意圖;圖11是一個(gè)掃描子系統(tǒng)API的調(diào)用次序的實(shí)施例示意圖;圖12是一個(gè)示范性配置API的調(diào)用次序的實(shí)施例示意圖;
圖13是各種不同的示范性掃描數(shù)據(jù)類型的示意圖,這些數(shù)據(jù)類型可以由應(yīng)用程序通過一個(gè)API傳遞到掃描子系統(tǒng);圖14是一個(gè)包含惡意軟件嚴(yán)重性標(biāo)識(shí)和應(yīng)用程序表現(xiàn)水準(zhǔn)的位-域變量的示范性實(shí)施例示意圖;圖15是一個(gè)圖表示意圖,該圖闡述了運(yùn)用掃描子系統(tǒng)進(jìn)行掃描的時(shí)間作為通過圖13中的變量所識(shí)別的數(shù)據(jù)類型的一個(gè)函數(shù)而變化的方式;圖16是一個(gè)示范性流程的實(shí)施例示意圖,該流程描述了該更新程序由一個(gè)用戶界面啟動(dòng)的方式。
圖17是對(duì)一臺(tái)移動(dòng)通信設(shè)備的一個(gè)掃描子系統(tǒng)進(jìn)行有效更新的方法的實(shí)施例示意圖。
具體實(shí)施例方式
圖1是一個(gè)移動(dòng)通信框架100的實(shí)施例示意圖。如圖所示,該框架包括移動(dòng)通信設(shè)備102以及能夠通過無(wú)線網(wǎng)絡(luò)進(jìn)行通信的后端服務(wù)器104。在當(dāng)前描述的環(huán)境下,移動(dòng)通信設(shè)備102可包括(但并不局限于)蜂窩式電話、無(wú)線個(gè)人數(shù)字助理(PDA)、無(wú)線掌上電腦、無(wú)線手提式電腦或任何其它能夠通過無(wú)線網(wǎng)絡(luò)進(jìn)行通信的移動(dòng)設(shè)備。
在一個(gè)實(shí)施例中,移動(dòng)通信設(shè)備102可配備一掃描子系統(tǒng)105。該掃描子系統(tǒng)105可包括任何能夠儲(chǔ)存于移動(dòng)通信設(shè)備102或存放于所進(jìn)行通信之中的掃描數(shù)據(jù)的子系統(tǒng)。當(dāng)然,該掃描可以是訪問式掃描、需求式掃描或者其他任何類型的掃描。此外,掃描可能牽涉到上述數(shù)據(jù)所代表的內(nèi)容(即文本、圖片等),以及對(duì)惡意軟件進(jìn)行的通用安全類型的掃描等等。
仍舊回到圖1,移動(dòng)通信設(shè)備102可以進(jìn)一步配備有一個(gè)能夠描繪多個(gè)圖形用戶界面108的顯示器106,此顯示器經(jīng)過改裝以用于管理包括以上所述掃描功能在內(nèi)的各種功能。
使用時(shí),移動(dòng)通信設(shè)備102的顯示器106用于在一個(gè)網(wǎng)絡(luò)(如互聯(lián)網(wǎng)等)上顯示數(shù)據(jù)。請(qǐng)參見操作1。在當(dāng)前的使用過程中,用戶可以使用顯示器106瀏覽各類網(wǎng)絡(luò)上的數(shù)據(jù),具體是通過后端服務(wù)器104選擇鏈接或錨點(diǎn)以從網(wǎng)絡(luò)上獲取數(shù)據(jù)。請(qǐng)參見操作2。接著,在操作3中,掃描子系統(tǒng)105被調(diào)用以掃描所獲取的數(shù)據(jù)。
在當(dāng)前的實(shí)施例中,掃描子系統(tǒng)105顯示出已經(jīng)找到與操作4中所獲取數(shù)據(jù)有關(guān)的惡意軟件。此時(shí),通過顯示器106向一位用戶提供了一個(gè)選項(xiàng),即中斷此次獲取和/或使用/訪問該數(shù)據(jù)而忽略所識(shí)別出的惡意軟件,如操作5所示。基于操作5中的決定,用戶會(huì)或不會(huì)成為一次‘攻擊’的對(duì)象,如操作6所示。
圖2是基于另一個(gè)實(shí)施例的移動(dòng)通信框架200的示意圖。該移動(dòng)通信框架200類似于圖1所示的移動(dòng)通信框架100,只是移動(dòng)通信設(shè)備對(duì)所獲取數(shù)據(jù)中惡意軟件的識(shí)別作出反應(yīng)的方式有所不同。
具體地,操作5中僅提供給用戶一個(gè)選項(xiàng)。即,用戶只能關(guān)閉任何與被發(fā)現(xiàn)包含惡意軟件的數(shù)據(jù)有關(guān)的對(duì)話。
圖3顯示了基于一個(gè)實(shí)施例的與移動(dòng)通信設(shè)備相關(guān)聯(lián)的架構(gòu)300。當(dāng)前的架構(gòu)300可以包含于圖1和圖2的移動(dòng)通信設(shè)備。當(dāng)然,架構(gòu)300可在任何所需的場(chǎng)合執(zhí)行。
如圖所示,當(dāng)前的架構(gòu)300可包括多個(gè)移動(dòng)應(yīng)用程序302。在當(dāng)前描述的情況下,移動(dòng)應(yīng)用程序302可包括任何安裝于移動(dòng)通信設(shè)備中的應(yīng)用程序或軟件等,以利于開展不同的任務(wù)。還應(yīng)該注意,該應(yīng)用程序302也可以按用戶的需要安裝于固件、硬件等之中。
在另一個(gè)實(shí)施例中,應(yīng)用程序302可包括(但是并不限于)郵件應(yīng)用程序,其任務(wù)包括管理電子郵件。此外,該應(yīng)用程序可以包括瀏覽器應(yīng)用程序,其任務(wù)包括瀏覽網(wǎng)絡(luò)。另外,該應(yīng)用程序還可以包括電話簿應(yīng)用程序,其任務(wù)包括管理多個(gè)電話號(hào)碼。作為一種選擇,該應(yīng)用程序可以包括消息應(yīng)用程序,其任務(wù)包括消息通信。應(yīng)該注意,該應(yīng)用程序可為任何類行。例如,可以為Java應(yīng)用程序或其他類似的程序。
繼續(xù)回到圖3,通過第一個(gè)應(yīng)用程序接口(API)306及第一個(gè)同掃描子系統(tǒng)304相關(guān)的函數(shù)庫(kù)308,掃描子系統(tǒng)304與應(yīng)用程序302進(jìn)行通信。更多關(guān)于第一個(gè)應(yīng)用程序接口306及第一個(gè)函數(shù)庫(kù)308的可選擇示范性信息將在下文討論圖4-12的時(shí)候作進(jìn)一步闡述。
作為一種選擇,應(yīng)用程序302可同掃描子系統(tǒng)304進(jìn)行信息通信,以方便掃描子系統(tǒng)304的掃描工作。該信息可以同將要進(jìn)行掃描的數(shù)據(jù)類型、及同此類掃描相關(guān)的時(shí)間安排有關(guān)。更多關(guān)于掃描子系統(tǒng)304同應(yīng)用程序302以此種方式進(jìn)行互動(dòng)的示范性信息將在討論圖13-15的時(shí)候作進(jìn)一步闡述。
如圖3所示,第一個(gè)函數(shù)庫(kù)308可包括更新管理器310、配置管理器312、以及一個(gè)簽名數(shù)據(jù)庫(kù)314。在使用中,該更新管理器310可管理簽名數(shù)據(jù)庫(kù)314更新掃描用的最新簽名的過程。在一個(gè)實(shí)施例中,更新的過程可以進(jìn)行簡(jiǎn)化以適應(yīng)移動(dòng)通信框架固有的有限帶寬的問題。更多的關(guān)于該更新過程的示范性信息將在討論圖16-17時(shí)進(jìn)行闡述。
作為圖3中架構(gòu)300的一個(gè)組成部分又進(jìn)一步提供了操作系統(tǒng)316,該操作系統(tǒng)安裝于移動(dòng)通信設(shè)備上并經(jīng)過改裝以方便執(zhí)行應(yīng)用程序302。在一個(gè)實(shí)施例中,掃描子系統(tǒng)304可以獨(dú)立于平臺(tái),因此能夠在任何操作系統(tǒng)/移動(dòng)通信設(shè)備組合中加以執(zhí)行。
為適應(yīng)這個(gè)特性,安排了第二個(gè)應(yīng)用程序接口318以及第二個(gè)函數(shù)庫(kù)320,其能夠支持多種功能,例如系統(tǒng)/函數(shù)庫(kù)初始化322、出錯(cuò)函數(shù)336、內(nèi)存分配334、輸入/輸出(I/O)328、數(shù)據(jù)授權(quán)332、同步330、高級(jí)文本傳送協(xié)議326、設(shè)備信息324、調(diào)試338、以及其他功能(即共享內(nèi)存、系統(tǒng)時(shí)間,等)。在一個(gè)實(shí)施例中,第二個(gè)應(yīng)用程序接口318可以是獨(dú)立于平臺(tái)的,類似于掃描子系統(tǒng)304。更多關(guān)于第二個(gè)應(yīng)用程序接口318及第二個(gè)函數(shù)庫(kù)320的可選擇示范性細(xì)節(jié)將在討論附件A時(shí)作進(jìn)一步闡述。
圖4顯示了基于一個(gè)實(shí)施例的系統(tǒng)400,其通過使用一臺(tái)移動(dòng)通信設(shè)備以訪問安全或內(nèi)容分析功能。在一個(gè)范例中,當(dāng)前的系統(tǒng)400可在圖3之架構(gòu)300中的應(yīng)用程序、掃描子系統(tǒng)以及操作系統(tǒng)環(huán)境下執(zhí)行。但是應(yīng)該注意到,當(dāng)前的系統(tǒng)400可在任何所需的環(huán)境下加以執(zhí)行。
如圖所示,這里包括了能通過無(wú)線網(wǎng)絡(luò)進(jìn)行通信的安裝于一移動(dòng)通信設(shè)備的操作系統(tǒng)402。另外還提供了安裝于移動(dòng)通信設(shè)備的應(yīng)用程序404,其通過使用操作系統(tǒng)402加以執(zhí)行并完成各種任務(wù)。
掃描子系統(tǒng)406通過一個(gè)應(yīng)用程序接口及一個(gè)關(guān)聯(lián)函數(shù)庫(kù)(參見圖3中的第一個(gè)應(yīng)用程序接口306及第一個(gè)函數(shù)庫(kù)308)保持與應(yīng)用程序404進(jìn)行通信。該掃描子系統(tǒng)406經(jīng)過改裝以訪問安全或內(nèi)容分析功能,以及應(yīng)用程序404所進(jìn)行的任務(wù)。在一個(gè)實(shí)施例中,安全或內(nèi)容分析為安全分析。在另外一個(gè)實(shí)施例中,安全或內(nèi)容分析為內(nèi)容分析。另外,安全或內(nèi)容分析可以包括按需式病毒掃描和/或存取式病毒掃描。
在使用中,安全或內(nèi)容分析功能可應(yīng)用于與應(yīng)用程序404所運(yùn)行任務(wù)相關(guān)聯(lián)的應(yīng)用數(shù)據(jù)。在當(dāng)前描述的環(huán)境下,應(yīng)用數(shù)據(jù)可包括任何由應(yīng)用程序404執(zhí)行的任務(wù)所輸入、處理、輸出的數(shù)據(jù)或其他與之相關(guān)的數(shù)據(jù)。
通過應(yīng)用程序接口使掃描子系統(tǒng)406與應(yīng)用程序404緊密聯(lián)合,可以降低管理費(fèi)用與代碼重復(fù)率。更多關(guān)于該應(yīng)用程序接口與相關(guān)函數(shù)庫(kù)的示范性信息將在討論此后的圖表時(shí)作進(jìn)一步闡述。
圖5基于圖4中系統(tǒng)400的應(yīng)用服務(wù)器,顯示了通過使用移動(dòng)通信設(shè)備訪問安全或內(nèi)容分析功能的框架500。應(yīng)該注意到當(dāng)前的框架500可以在任何所需的環(huán)境中加以執(zhí)行。
如圖所示,掃描子系統(tǒng)可包括掃描程序502,該掃描程序通過應(yīng)用程序接口506以及一個(gè)關(guān)聯(lián)的協(xié)議(例如uItron消息聯(lián)絡(luò)系統(tǒng))與應(yīng)用程序504進(jìn)行通信。應(yīng)用程序接口506會(huì)牽涉到一個(gè)與掃描程序502相關(guān)聯(lián)的第一個(gè)組件508,以及與應(yīng)用程序504相關(guān)聯(lián)的第二個(gè)組件510,這會(huì)在下文中作進(jìn)一步闡述。
向應(yīng)用程序接口506提供的多種不同的調(diào)用512可包括開放式的調(diào)用、數(shù)據(jù)調(diào)用、以及封閉式的調(diào)用。在使用中,掃描程序502可以掃描與應(yīng)用程序504所運(yùn)行的任務(wù)相關(guān)聯(lián)的應(yīng)用數(shù)據(jù)516。
圖6所示為一個(gè)通過使用移動(dòng)通信設(shè)備用以訪問安全或內(nèi)容分析功能的框架600,該框架與圖4中系統(tǒng)400的重復(fù)加載庫(kù)實(shí)例相一致。應(yīng)該注意,當(dāng)前的框架600可以在任何所需的環(huán)境下加以執(zhí)行。
如圖所示,掃描子系統(tǒng)可包括一個(gè)重復(fù)加載函數(shù)庫(kù)602。在使用中,掃描子系統(tǒng)重復(fù)加載函數(shù)庫(kù)602可在運(yùn)行時(shí)連接于應(yīng)用程序604。由此,應(yīng)用程序接口606可以被植入多個(gè)應(yīng)用程序604中的每一個(gè)之中。
類似于先前圖5中的框架500,應(yīng)用程序接口606可能涉及多種不同的調(diào)用612,包括開放式的調(diào)用、數(shù)據(jù)調(diào)用、以及封閉式的調(diào)用。在使用中,重復(fù)加載函數(shù)庫(kù)602可以用于掃描與應(yīng)用程序604所運(yùn)行的任務(wù)相關(guān)的應(yīng)用數(shù)據(jù)616。
圖7所示為一個(gè)在圖4中系統(tǒng)400環(huán)境下執(zhí)行的按需式掃描系統(tǒng)700。應(yīng)該注意,當(dāng)前系統(tǒng)700可以在任何所需的環(huán)境下加以執(zhí)行。
按需式掃描對(duì)所儲(chǔ)存應(yīng)用數(shù)據(jù)702進(jìn)行掃描,以偵測(cè)惡意內(nèi)容或代碼并在發(fā)現(xiàn)后將其除去。用戶可以通過一個(gè)用戶界面703來(lái)啟動(dòng)按需式掃描。此外,每個(gè)應(yīng)用程序704可以調(diào)用掃描子系統(tǒng)706以運(yùn)行針對(duì)儲(chǔ)存于相應(yīng)內(nèi)存內(nèi)對(duì)象進(jìn)行的掃描。
另一方面,按需式掃描在應(yīng)用程序704處理或轉(zhuǎn)換應(yīng)用數(shù)據(jù)702之前提供了對(duì)惡意代碼或內(nèi)容的識(shí)別。在掃描子系統(tǒng)706偵測(cè)到惡意應(yīng)用數(shù)據(jù)702之前,按需式掃描對(duì)于用戶是透明的。
圖8基于一個(gè)實(shí)施例,顯示了應(yīng)用程序接口800的各種不同組件的層次體系,可用于在移動(dòng)應(yīng)用程序與一個(gè)掃描子系統(tǒng)之間提供接口。作為一種選擇,當(dāng)前的應(yīng)用程序接口800可以在圖4中系統(tǒng)400的環(huán)境下加以執(zhí)行。但是應(yīng)該注意到,當(dāng)前的應(yīng)用程序接口800可以在任何所需的環(huán)境下加以執(zhí)行。
如圖8所示,應(yīng)用程序接口的函數(shù)包括MdoScanOpen()802、MDoScanClose()804、MDoScanVersion()806、及MDoScanData()808。MoDoScanOpen()802和MDoScanClose()804是用于創(chuàng)建/打開并關(guān)閉一個(gè)掃描子系統(tǒng)對(duì)象實(shí)例。MDoScanVersion()806提供了掃描子系統(tǒng)及簽名模式數(shù)據(jù)版本信息。MDoScanData()808運(yùn)行內(nèi)容/數(shù)據(jù)掃描及報(bào)告。同時(shí)包括在掃描應(yīng)用程序接口中的有MDoScanUpdate()810,它能提供惡意軟件簽名數(shù)據(jù)庫(kù)及偵測(cè)邏輯更新。當(dāng)MDoScanUpdate()810由一次更新應(yīng)用所調(diào)用時(shí),函數(shù)庫(kù)就會(huì)連接上一個(gè)遠(yuǎn)程后端服務(wù)器(參見例如圖1)并下載最新的文件(例如mdo.sdb與mdo.pd)。
掃描子系統(tǒng)配置是通過運(yùn)用MDoConfigOpen()812、MDoConfigClose()814、MDoConfigGet()816以及MDoConfigSet()818所達(dá)成的。一旦一個(gè)配置句柄通過調(diào)用當(dāng)前的應(yīng)用程序接口800而獲得,進(jìn)行調(diào)用的應(yīng)用程序使用get與set配置API以查詢并設(shè)定掃描子系統(tǒng)配置的各種變量。
同時(shí)包含于當(dāng)前應(yīng)用程序接口800的是一個(gè)稱為MDoGetLastError()820的出錯(cuò)獲取函數(shù)。該函數(shù)用于獲取關(guān)于已發(fā)生的最后出錯(cuò)的信息。
在作出任何API調(diào)用之前,最好是在啟動(dòng)時(shí)間,MDoSystemInit()825被調(diào)用以初始化函數(shù)庫(kù)環(huán)境設(shè)置。該函數(shù)庫(kù)保存了配置設(shè)置、惡意軟件代碼偵測(cè)邏輯(如mdo.pd)與簽名數(shù)據(jù)庫(kù)(如mdo.sdb)、及各種內(nèi)部變量(如同步對(duì)象,等),并將其存放于固定的持續(xù)性儲(chǔ)存地點(diǎn)。
MDoLibraryOpen()830和MDoLibraryClose()840用于初始化函數(shù)庫(kù)。一個(gè)應(yīng)用程序可以在任何其它的API調(diào)用發(fā)生之前調(diào)用MDoLibraryOpen()830,而且應(yīng)用程序可以在終止之前調(diào)用MDoLibraryClose()840。
應(yīng)用程序接口800可以通過使用不同的應(yīng)用程序接口組件從而能夠支持各種不同的功能,例如系統(tǒng)環(huán)境初始化、版本狀態(tài)信息獲取、更新掃描子系統(tǒng)、掃描、配置掃描子系統(tǒng),等。更多關(guān)于在應(yīng)用程序接口800環(huán)境下上述功能的信息將在下文進(jìn)行闡述。
系統(tǒng)初始化MDoSystemInit()825針對(duì)保存于特定永久儲(chǔ)存域的數(shù)據(jù)進(jìn)行驗(yàn)證與環(huán)境初始化工作。一個(gè)惡意代碼/內(nèi)容簽名模式的數(shù)據(jù)庫(kù)(即mdo.sdb)、偵測(cè)邏輯(即mdo.pd)、配置設(shè)置、以及同步對(duì)象可以儲(chǔ)存于這些存儲(chǔ)域中。MDoSystemInit()825可以在API函數(shù)中的任一函數(shù)被執(zhí)行之前被調(diào)用一次(即在啟動(dòng)時(shí))。
表#1說明了關(guān)于MDoSystemlnit()825的示范性信息。
表 #1MDoSystemInit描述核實(shí)并初始化系統(tǒng)環(huán)境信息原型int MDoSystemInit(void);
參數(shù)無(wú)返回值如成功則0,否則為非零出錯(cuò)代碼。
函數(shù)庫(kù)接口API應(yīng)用程序接口800包括多個(gè)函數(shù)庫(kù)接口組件。API接口實(shí)例化可以通過使用MDoLibraryOpen()830來(lái)達(dá)成。使用該函數(shù)而獲得的實(shí)例化函數(shù)庫(kù)接口旬柄可以用于其后的API調(diào)用。在該應(yīng)用程序終結(jié)之前,MDoLibraryClose()840可以被調(diào)用以釋放該句柄。圖9說明了通過使用MDoLibraryOpen()830及MDoLibraryClose()840的一個(gè)示范性函數(shù)庫(kù)接口初始化過程900。
表#2說明了關(guān)于MDoLibraryOpen()830的示范性信息。
表 #2MDoLibraryOpen描述初始化并返回一個(gè)API函數(shù)庫(kù)界面句柄原型MDOLIB_HANDLE MDoLibraryOpen(void);參數(shù)無(wú)返回值如成功,則返回函數(shù)庫(kù)界面句柄,否則為INVALID_MDOLIB_HANDLE。
也可參見MDoLibraryClose()表#3說明了關(guān)于MDoLibraryClose()840的示范性信息。
表 #3MDoLibraryClose描述釋放由MDoLibraryClose()函數(shù)返回的與一個(gè)API函數(shù)庫(kù)句柄相關(guān)聯(lián)的系統(tǒng)資源原型void MDoLibraryClose(MDOLIB_HANDLE hLib);參數(shù)hLib[in]由MDoLibraryOpen返回的函數(shù)庫(kù)句柄返回值無(wú)也可參見MDoLibraryOpen()出錯(cuò)獲取一旦函數(shù)庫(kù)已經(jīng)成功地由MDoLibraryOpen()830初始化并實(shí)例化,MDoGetLastError()820向應(yīng)用程序提供關(guān)于最近一次發(fā)生出錯(cuò)的信息。
表#4說明了關(guān)于MDoGetLastError()820的示范性信息。
表 #4MDoGetLastError描述返回指定的函數(shù)庫(kù)實(shí)例的最后一次出錯(cuò)值原型MDoErrorCode MDoGetLastError(MDOLIB_HANDLE hLib);參數(shù)hLib[in]由MDoLibraryOpen返回的函數(shù)庫(kù)句柄返回值MDoErrorCode數(shù)據(jù)類型可以被定義為一個(gè)32位的無(wú)符號(hào)整數(shù),它既包含組件又包含出錯(cuò)代碼。通常,獲取的出錯(cuò)信息可能被設(shè)定在平臺(tái)抽象API層。有鑒于此,此處所給的MDoErrorCode格式類似于由抽象層API所定義的AlErrorCode格式(參見附件A)。圖10基于一個(gè)實(shí)施例說明了一個(gè)MDoErrorCode的示范性格式1000。
表#5說明了關(guān)于MDoGetLastError()820的示范性信息。
表 #5MDoErrorCode被定義為typedef unsigned long MDoErrorCode;也可參見MDoLibraryOpen(),MDoScanOpenO,MDoScanData(),MDoScanUpdate()示范性計(jì)算機(jī)代碼#1通過調(diào)用一次MDoGetLastError()820說明了一個(gè)樣本函數(shù)庫(kù)的調(diào)用次序。
計(jì)算機(jī)代碼 #1
出錯(cuò)代碼一個(gè)由MDoGetLastError 820報(bào)告的出錯(cuò)代碼包括兩個(gè)部分組件代碼與出錯(cuò)代碼。請(qǐng)參見附件A以獲得更多信息。表#6列出了示范性出錯(cuò)代碼及相應(yīng)的組件代碼。MDoGetLastError 820也返回設(shè)定于抽象函數(shù)庫(kù)層的出錯(cuò)代碼。應(yīng)該注意,以下的列表僅僅出于說明的目的,不應(yīng)該將其理解為在任何方式上具有限制性。
表 #6
掃描子系統(tǒng) API應(yīng)用程序接口800包括多個(gè)掃描子系統(tǒng)組件。掃描子系統(tǒng)API組件提供了數(shù)據(jù)/內(nèi)容掃描及簽名更新服務(wù)。其中包括MDoScanOpen()802、MDoScanClose()804、MDoScanVersion()806、MDoScanUpdate()810、及MDoScanData()808。MDoScanOpen()802用于掃描子系統(tǒng)對(duì)象實(shí)例化。MDoScanVersion()806提供掃描子系統(tǒng)及簽名數(shù)據(jù)庫(kù)版本信息。MDoScanUpdate()810運(yùn)行簽名數(shù)據(jù)庫(kù)更新。MDoScanData()808運(yùn)行惡意代碼/內(nèi)容數(shù)據(jù)掃描。圖11基于一個(gè)實(shí)施例說明了掃描子系統(tǒng)API調(diào)用次序1100。
MdoScanOpen表#7說明了關(guān)于MDoScanOpen()802的示范性信息。
表 #7描述返回一個(gè)掃描子系統(tǒng)實(shí)例句柄原型MDOSCAN_HANDLE MDoScanOpen(MDOLIB_HANDLE hLib)
參數(shù)hLib[in]通過使用MDoLibraryOpen()函數(shù)而獲得的函數(shù)庫(kù)句柄返回值如成功,則返回掃描子系統(tǒng)實(shí)例句柄。
如出錯(cuò),則為INVALID_MDOSCAN_HANDLE。
也可參見MDoScanClose(),MDoScanData(),MDoScanUpdate(),MDoLibraryOpen()MdoScanClose表#8說明了關(guān)于MDoScanClose()804的示范性信息。
表 #8描述釋放掃描子系統(tǒng)實(shí)例及相關(guān)聯(lián)的系統(tǒng)資源原型void MDoScanClose(MDOSCAN_HANDLE hScan);參數(shù)hScan[in]通過使用MDoScanOpen()函數(shù)而獲得的掃描子系統(tǒng)句柄.
返回值無(wú)也可參見MDoScanOpen(),MDoScanData(),MDoScanUpdate()MdoScanVersion表#9說明了關(guān)于MdoScanVersion()806的示范性信息。
表 #9描述從由MDoScanOpen()函數(shù)返回的一個(gè)掃描器句柄獲得掃描子系統(tǒng)及簽名版本信息原型int MDoScanVersion(MDOSCAN_HANDLE hScan,SVerlnfo*pVersion);參數(shù)hScan[in]通過使用MDoScanOpen()函數(shù)而獲得的掃描子系統(tǒng)句柄。
pVersion[out]指向一個(gè)包含版本信息結(jié)構(gòu)的指針返回值如成功則返回0,否則為-1。
也可參見MDoScanOpen(),MDoScanClose(),MDoScanData(),MDoScanUpdate()示范性計(jì)算機(jī)代碼#2 說明一個(gè)樣本版本信息結(jié)構(gòu)。
計(jì)算機(jī)代碼 #2
由MdoScanVersion()806所報(bào)告的移動(dòng)通信設(shè)備識(shí)別字符串是通過由AlDevGetInfo所返回的使用設(shè)備識(shí)別字符串而設(shè)定的(參見附件A)。
MdoScanData表#10說明了關(guān)于MDoScanData()808的示范性信息。
表 #10描述MDoScanData將從一個(gè)應(yīng)用程序被調(diào)用以掃描一個(gè)特定的數(shù)據(jù)類型。調(diào)用應(yīng)用程序指定了掃描的動(dòng)作、掃描目標(biāo)類型、一套用以訪問數(shù)據(jù)的I/O函數(shù)、以及一個(gè)可選性回調(diào)函數(shù)。數(shù)據(jù)掃描的結(jié)果以一個(gè)調(diào)用函數(shù)提供的數(shù)據(jù)結(jié)構(gòu)被返回。MDoScanData是重復(fù)加載的。
原型int MDoScanData(MDOSCAN_HANDLE hScan,SScanParam* pParam,SScanResult* pResult);
參數(shù)hScan[in]從一次調(diào)用MDoScanOpen()函數(shù)而獲得的掃描子系統(tǒng)句柄pParam[in]指向一個(gè)包含數(shù)據(jù)掃描參數(shù)的結(jié)構(gòu)的指針pResult[out]指向一個(gè)包含數(shù)據(jù)掃描結(jié)果的結(jié)構(gòu)的指針返回值如成功則返回0,否則為-1而且出錯(cuò)代碼被設(shè)定也可參考MDoScanOpen(),MDoScanClose(),MDoScanVersion(),MDoScanUpdate()MdoScanUpdate表#11說明了關(guān)于MDoScanUpdate()810的示范性信息。
表 #11描述運(yùn)行惡意代碼/內(nèi)容簽名模式數(shù)據(jù)庫(kù)(mdo.sdb)及偵測(cè)邏輯(mdo.pd)更新。
原型int MDoScanUpdate(MDOSCAN_HANDLE hScan,SUpdateParam* pParam);參數(shù)hScan[in]通過使用MDoScanOpen()函數(shù)而獲得的掃描句柄pParam[in]指向一個(gè)更新參數(shù)結(jié)構(gòu)的指針,該結(jié)構(gòu)包含一個(gè)用于更新取消/放棄及進(jìn)程狀態(tài)更新的回調(diào)函數(shù)指針示范性計(jì)算機(jī)代碼#3說明了更新參數(shù)結(jié)構(gòu)被定義的方式計(jì)算機(jī)代碼 #3
調(diào)用應(yīng)用程序可以在調(diào)用函數(shù)的時(shí)候設(shè)定函數(shù)指針及將要傳遞給函數(shù)的數(shù)據(jù)。請(qǐng)注意表#12。
表 #12
配置API應(yīng)用程序接口800包括多個(gè)配置組件。包括一套用于獲取并指定掃描子系統(tǒng)設(shè)定的函數(shù)。這些函數(shù)的一個(gè)目標(biāo)是向應(yīng)用程序及掃描子系統(tǒng)提供集中型的運(yùn)行時(shí)間配置訪問。其配置數(shù)據(jù)儲(chǔ)存于非易失性永續(xù)型數(shù)據(jù)儲(chǔ)存體(如閃存,等)。
圖12基于一個(gè)實(shí)施例說明了一個(gè)示范性配置API調(diào)用次序1200。如圖所示,MDoConfigOpen()830返回一個(gè)句柄,該句柄將被傳遞到配置獲取及指定的函數(shù)。MDoConfigClose()814被用于釋放并關(guān)閉由MDoConfigOpen()812返回的配置句柄。MDoConfigSet()818用一個(gè)特定值設(shè)定了一個(gè)特定的配置變量,且MDoConfigGet()816為一個(gè)指定的變量返回一個(gè)配置值。在MDoConfigClose()814被調(diào)用前,由MDoConfSet()818所限定的配置變量設(shè)定并不一定被存放于永久儲(chǔ)存體。
當(dāng)存取和/或指定一個(gè)變量值的時(shí)候,應(yīng)用程序可以調(diào)用配置打開、獲取或設(shè)定,并立刻在其后添加關(guān)閉函數(shù)。
使用應(yīng)用程序接口800配置組件而指定/獲取的配置變量與值可以用以無(wú)效字符(’\0’)結(jié)尾的8位字符的字符串來(lái)代表。表#13列出了現(xiàn)有的各種配置變量。
表 #13
MdoConfigOpen表#14說明了關(guān)于MDoConfigOpen()812的示范性信息。
表 #14描述返回一個(gè)句柄到一個(gè)配置設(shè)定,然后將其傳遞給后面的調(diào)用MDoConfigGet()和MDoConfigSet().
原型MDOCONFIG_HANDLE MDoConfigOpen(MDOLIB_HANDLE hLib);參數(shù)hLib[in]通過使用MDoLibraryOpen()函數(shù)獲得的函數(shù)庫(kù)句柄返回值如成功則返回配置句柄。
如出錯(cuò)則返回INVALID_MDOCONPIG_HANDLE。
也可參見MDoConfigClose(),MDoConfigSet(),MDoConfigGet()MdoConfigClose表#15說明了關(guān)于MDoConfigClose()814的示范性信息。
表 #15描述釋放系統(tǒng)資源并關(guān)閉配置句柄原型void MDoConfigClose(MDOCONFIG_HANDLE hConfig);參數(shù)hConfig[in]由MDoConfigOpen()函數(shù)返回的配置句柄返回值無(wú)也可參見MDoConfigOpen(),MDoConfigSet(),MDoConfigGet()MdoConfigGet表#16說明了關(guān)于MDoConfigGet()816的示范性信息。
表 #16描述為指定的配置變量獲得一個(gè)配置值原型int MDoConfigGet(MDOCONFIG_HANDLE hConfigchar const* pszName,char* pBuffer,unsigned int uSize);
參數(shù)hConf[in]由MDoConfigOpen()函數(shù)返回的配置句柄pszName[in]以NULL-終止的配置變量名稱pBuffer[out]配合所指定變量的以NULL-終止的配置設(shè)定/值uSize[in]以字節(jié)計(jì)算的pBuffer長(zhǎng)度返回值成功則返回0,否則為-1。
也可參見MDoConfigOpen(),MDoConf igClose(),MDoConf igSet()MdoConfigSet表#17說明了關(guān)于MDoConfigSet()818的示范性信息。
表 #17描述為指定的配置變量設(shè)定一個(gè)值原型int MDoConfigGet(MDOCONFIG_HANDLE hConfigchar const*pszName,char const*pszValue);參數(shù)hConfig[in]由MDoConf igOpen()函數(shù)所返回的配置句柄pszName[in]以NULL-終結(jié)的配置變量名稱pszValue[int]配合所指定變量的以NULL-終結(jié)的新的配置設(shè)定/值返回值如成功則返回0,否則為-1也可參見MDoConfigOpen(),MDoConfigClose(),MDoConfigGet()為便于掃描的應(yīng)用程序/掃描子系統(tǒng)通信如前所述,應(yīng)用程序可與掃描子系統(tǒng)進(jìn)行信息通信以方便掃描子系統(tǒng)進(jìn)行掃描。這一通信可通過上面所描述的API得到便利。上述的信息可與被掃描的數(shù)據(jù)類型及與此類掃描相關(guān)聯(lián)的時(shí)間安排有關(guān)。更多關(guān)于上述API達(dá)成此結(jié)果方式的描述將在下文作闡述。
掃描參數(shù)(SscanParam)調(diào)用應(yīng)用程序可以通過使用SScanParam結(jié)構(gòu)向掃描子系統(tǒng)提供一個(gè)掃描參數(shù)。包含于掃描參數(shù)的信息向掃描子系統(tǒng)提供1)掃描子系統(tǒng)的動(dòng)作類型(例如iAction),2)掃描數(shù)據(jù)類型(例如需要掃描的應(yīng)用數(shù)據(jù)的類型-iDataType),3)指向掃描目標(biāo)的數(shù)據(jù)指針(例如pPrivate),4)獲取數(shù)據(jù)大小(以字節(jié)為單位)的函數(shù)(例如pfGetSize),5)重置掃描數(shù)據(jù)大小的函數(shù)(例如pfSetSize),6)掃描子系統(tǒng)用于獲取一個(gè)掃描數(shù)據(jù)塊的函數(shù)(例如pfRead),6)用于向掃描數(shù)據(jù)寫入的函數(shù)(例如pfWrite),以及7)掃描子系統(tǒng)狀態(tài)/進(jìn)程報(bào)告的回調(diào)函數(shù)(例如pfCallBack)。
示范性計(jì)算機(jī)代碼#4說明了一個(gè)數(shù)據(jù)掃描參數(shù)的結(jié)構(gòu)。
計(jì)算機(jī)代碼 #4
掃描動(dòng)作(iAction)掃描動(dòng)作指定了在被提供的應(yīng)用數(shù)據(jù)上要運(yùn)行的掃描的類型。表#18說明了各種不同的示范性掃描動(dòng)作。
表 #18
掃描數(shù)據(jù)類型(iDataType)調(diào)用應(yīng)用程序可以通過使用這一變量向掃描子系統(tǒng)通知應(yīng)用數(shù)據(jù)類型以及格式。
圖13說明了各種不同的示范性應(yīng)用數(shù)據(jù)類型1300,應(yīng)用程序能夠?qū)⑵渫ㄟ^API向掃描子系統(tǒng)進(jìn)行傳送。Url-字符串的格式可以符合統(tǒng)一資源定位器(RFC 1738)規(guī)格。Email-字符串的格式可以符合互聯(lián)網(wǎng)電子郵件地址格式(RFC 822)規(guī)格。缺省的域可以設(shè)置為任何所需的域。另外,電話號(hào)碼字符串可以包括數(shù)字字符’0’至’9’,以及’#’與’*’字符。
掃描數(shù)據(jù)指針/句柄(pPrivate)另外會(huì)提供一個(gè)指向一個(gè)應(yīng)用掃描對(duì)象的指針(或句柄)。掃描子系統(tǒng)并不一定使用該數(shù)據(jù)指針/句柄運(yùn)行直接的內(nèi)存I/O。數(shù)據(jù)指針/句柄被傳遞回調(diào)用函數(shù)以通過使用調(diào)用函數(shù)所指定的I/O函數(shù)進(jìn)行讀/寫。
掃描數(shù)據(jù)大小(pfGetSize)當(dāng)前的函數(shù)由掃描子系統(tǒng)用于從調(diào)用應(yīng)用程序處獲得掃描目標(biāo)數(shù)據(jù)的大小(以字節(jié)為單位)。
掃描數(shù)據(jù)調(diào)整大小(pfSetSize)該函數(shù)由掃描子系統(tǒng)用于請(qǐng)求調(diào)用應(yīng)用程序調(diào)整被修復(fù)/清洗的應(yīng)用數(shù)據(jù)至一個(gè)給定的大小(以字節(jié)為單位)。這一函數(shù)可以與掃描并修復(fù)/刪除選項(xiàng)同時(shí)使用。
掃描數(shù)據(jù)讀取函數(shù)(pfRead)該即時(shí)函數(shù)可由掃描子系統(tǒng)使用,用于從調(diào)用應(yīng)用程序讀取一個(gè)指定量的應(yīng)用數(shù)據(jù)。
掃描數(shù)據(jù)寫入函數(shù)(pfWrite)這是一個(gè)可選的參數(shù),可由掃描子系統(tǒng)使用,用于向掃描對(duì)象寫入一個(gè)指定量的應(yīng)用數(shù)據(jù)以作為修復(fù)過程的一部分。如掃描動(dòng)作被設(shè)定為修復(fù)或刪除,則這個(gè)函數(shù)指針可以進(jìn)行設(shè)定。
回調(diào)函數(shù)(pfCallBack)如被指定,掃描子系統(tǒng)通過以下表格內(nèi)所描述的信息調(diào)用該指定函數(shù)。如果返回的是一個(gè)負(fù)返回值,則回調(diào)函數(shù)放棄掃描過程。表#19闡述了一個(gè)示范性的回調(diào)代碼列表。
表 #19
示范性的計(jì)算機(jī)代碼#5說明了一個(gè)掃描子系統(tǒng)的回調(diào)結(jié)構(gòu)。
計(jì)算機(jī)代碼 #5
掃描結(jié)果(SScanResulf)對(duì)象掃描的結(jié)果,即被偵測(cè)到的惡意軟件信息,包含于由調(diào)用應(yīng)用程序所提供的SScanResult結(jié)構(gòu)被返回至調(diào)用應(yīng)用程序。該SScanResult結(jié)構(gòu)包含一個(gè)指向一個(gè)包含掃描結(jié)果信息結(jié)構(gòu)的指針,以及一個(gè)指向一個(gè)被用于移除掃描結(jié)果資源函數(shù)的指針。用于存放掃描結(jié)果的內(nèi)存由掃描子系統(tǒng)進(jìn)行分配,并由調(diào)用pfDeleteResult指針?biāo)赶虻暮瘮?shù)所釋放。
示范性計(jì)算機(jī)代碼#6說明了一個(gè)樣本調(diào)用次序。
計(jì)算機(jī)代碼 #6
示范性計(jì)算機(jī)代碼#7說明了一個(gè)被偵測(cè)到的惡意代碼/內(nèi)容信息結(jié)構(gòu)。
計(jì)算機(jī)代碼 #7
示范性計(jì)算機(jī)代碼#8說明了一個(gè)掃描結(jié)果結(jié)構(gòu)。
計(jì)算機(jī)代碼#8
嚴(yán)重性等級(jí)與行為級(jí)別(uBehavior)圖14基于一個(gè)示范性實(shí)施例,它表明了包括在SDetect結(jié)構(gòu)內(nèi)的含有惡意軟件嚴(yán)重度標(biāo)志及應(yīng)用程序行為級(jí)別的位-域變量1400。
表#20闡述了一個(gè)示范性惡意軟件的嚴(yán)重性級(jí)別列表。
表 #20
如被掃描過的應(yīng)用數(shù)據(jù)包含對(duì)移動(dòng)通信設(shè)備用戶有害的惡意軟件,則掃描子系統(tǒng)設(shè)定MDO_SC_USER標(biāo)志。如果對(duì)移動(dòng)通信設(shè)備本身有害,MDO_SC_TERMINAL標(biāo)志被設(shè)定。如果其對(duì)用戶和移動(dòng)通信設(shè)備都有害,則MDO_SC_USER與MDO_SC_TERMINAL標(biāo)志都被設(shè)定。
應(yīng)用程序行為級(jí)別指定了對(duì)偵測(cè)到包含惡意軟件的應(yīng)用數(shù)據(jù)采取什么樣的措施。表#21列出了行為級(jí)別的各種值及應(yīng)用程序采取的相應(yīng)行動(dòng)。
表 #21
當(dāng)在被掃描的數(shù)據(jù)中發(fā)現(xiàn)多個(gè)惡意代碼,調(diào)用應(yīng)用程序預(yù)期將以最高級(jí)別的行為級(jí)別來(lái)做出反應(yīng)。例如,如果MDO_BC_LEVELO和MDO_BC_LEVEL3都被報(bào)告,應(yīng)用程序可以采取MDO_BC_LEVEL3的行動(dòng)。
圖15說明了一個(gè)圖表1500,闡明了掃描子系統(tǒng)的掃描時(shí)機(jī)安排作為通過圖13的各變量被識(shí)別出數(shù)據(jù)類型的一個(gè)函數(shù)而變動(dòng)的方式。
簽名數(shù)據(jù)庫(kù)更新如前所述,更新過程可被簡(jiǎn)化,以適應(yīng)移動(dòng)通信框架固有的有限帶寬。更多關(guān)于可達(dá)成如此效果的各種不同方式將在下文作闡述。
被更新的組件MDoScanUpdate函數(shù)隨著更新服務(wù)提供了兩個(gè)組件[例如惡意代碼偵測(cè)邏輯(mdo.pd)與簽名數(shù)據(jù)庫(kù)(mdo.sdb)]。一個(gè)組件(例如mdo.pd)可包含偵測(cè)邏輯并在一個(gè)更新的版本出現(xiàn)時(shí)被完全更新。另一個(gè)組件(例如mdo.sdb)可以逐步更新直到n個(gè)先前的版本。對(duì)第二個(gè)組件的一次完全更新可在具有比n更早版本的移動(dòng)通信設(shè)備上運(yùn)行。例如,如果n被設(shè)定為5,而最新版本是20,那么會(huì)在一個(gè)比15更早版本的移動(dòng)通信設(shè)備上進(jìn)行一次完整的更新。
通過用戶界面激活圖16說明了一個(gè)基于一個(gè)實(shí)施例的示范性的流程1600,它描述了由一個(gè)用戶界面啟動(dòng)的更新方式。如圖所示,病毒碼的更新可以由移動(dòng)通信設(shè)備用戶通過一個(gè)用戶界面1602選擇一個(gè)菜單輸入來(lái)啟動(dòng)。一旦用戶選擇了該更新菜單,一個(gè)更新應(yīng)用程序1604被激活,并通過適當(dāng)?shù)母陆缑婧瘮?shù)1606連接到一臺(tái)后端服務(wù)器。
通信協(xié)議更新函數(shù)庫(kù)可以通過HTTP協(xié)議與后端服務(wù)器進(jìn)行通信。
更新過程圖17基于一個(gè)實(shí)施例,它說明了用于有效地更新一臺(tái)移動(dòng)通信設(shè)備的一個(gè)掃描子系統(tǒng)的一個(gè)方法1700。在一個(gè)實(shí)施例中,當(dāng)前的方法1700可以在圖3的架構(gòu)300中的應(yīng)用程序、掃描子系統(tǒng)與操作系統(tǒng)、以及圖l和2中的系統(tǒng)中執(zhí)行。但是應(yīng)該注意,當(dāng)前的方法1700可以在任何所需的環(huán)境中加以執(zhí)行。
要初始化該過程,可以從至少一臺(tái)移動(dòng)通信設(shè)備向一臺(tái)后端服務(wù)器發(fā)送一次更新請(qǐng)求。當(dāng)然,在其他的實(shí)例中,更新可以不經(jīng)過請(qǐng)求而發(fā)送。
在一個(gè)實(shí)施例中,更新可以由移動(dòng)通信設(shè)備通過使用一個(gè)請(qǐng)求數(shù)據(jù)結(jié)構(gòu)而進(jìn)行請(qǐng)求。此數(shù)據(jù)結(jié)構(gòu)還可以選擇性地包括統(tǒng)一資源定位器(URL)變量、移動(dòng)通信識(shí)別變量、應(yīng)用程序接口版本變量、偵測(cè)邏輯變量、簽名版本變量、和/或部分號(hào)碼變量等變量。
表#22說明了可以用于此目的的一個(gè)示范性的URL。
表 #22<BASE-URL>?dev=<DEV-ID>&mdo=<MDO-VER>&eng=<ENG-VER>&sdb=<SDB-VER>&chk=<CHUNK>
以下是一個(gè)描述上述URL變量的表格
表#23說明了一個(gè)符合上述描述的URL的一個(gè)特定范例。
表 #23http://update.mcafeeacsa.com/504i?dev=X504i05&mdo=2&eng=3&sdb=56&chk=1以上表#23的URL指定了基本-URL″http://update.mcafeeacsa.com/504i″,″X504i05″為設(shè)備識(shí)別碼,API版本2,惡意代碼偵測(cè)邏輯版本3,以及簽名數(shù)據(jù)庫(kù)版本56。應(yīng)該注意,當(dāng)移動(dòng)通信設(shè)備最初聯(lián)絡(luò)后端服務(wù)器的時(shí)候,其″數(shù)據(jù)塊″或部分、號(hào)碼可以設(shè)定為1。此外,基本-URL可以通過讓MDoConfigGet API使用″UpdateURL″配置變量而獲得。
在收到請(qǐng)求之后,后端服務(wù)器通過將已儲(chǔ)存的惡意代碼偵測(cè)邏輯及簽名數(shù)據(jù)庫(kù)版本同在URL中編碼存放的版本信息相比較,從而決定哪個(gè)更新包需要被下載。
如果不需要進(jìn)行更新,后端會(huì)返回一個(gè)無(wú)內(nèi)容的回應(yīng)。在操作1701中,移動(dòng)通信設(shè)備收到了作為第一部分的回應(yīng)。如果決定第一部分包括上述的無(wú)內(nèi)容回應(yīng)(參見決定1702),方法1700被中止,這是因?yàn)闆]有更新需要下載。該特征對(duì)適應(yīng)移動(dòng)通信框架中固有的有限帶寬是有益的。
另一方面,如果一個(gè)更新包的第一個(gè)部分被返回,方法1700將在收到更新的第一部分之后(或者有可能的是與之同時(shí))繼續(xù)接收更新的其它部分。請(qǐng)注意操作1704-1708。應(yīng)該注意第一部分可伴隨著整包的大小及部分的計(jì)數(shù)信息。
在下載剩余的更新部分時(shí),可以對(duì)所下載URL的部分號(hào)碼作限定。表#24說明了一個(gè)指定部分號(hào)碼″3″的URL的特定范例。
表 #24http://update.mcafeeacsa.com/504i?dev=X504i05&mdo=2&eng=3&sdb=56&chk=3在一個(gè)實(shí)施例中,可以決定更新的完整性。相應(yīng)地,在是否被核實(shí)了更新的完整性的基礎(chǔ)上,可以有條件地將更新安裝于掃描子系統(tǒng)中。
作為一種選擇,更新的完整性可以通過使用一個(gè)簽名來(lái)確定。此簽名可以同更新的一個(gè)部分一起接收(即一個(gè)最后部分)。之后,可以將該簽名同使用更新的每個(gè)部分生成的另一簽名進(jìn)行比對(duì)。請(qǐng)注意操作1710。
在一個(gè)實(shí)施例中,簽名可以通過一個(gè)RSA私鑰生成并在移動(dòng)通信設(shè)備上使用一個(gè)包含于更新內(nèi)的相應(yīng)公鑰進(jìn)行認(rèn)證。簽名核實(shí)及生成可通過使用一個(gè)特定的認(rèn)證函數(shù)庫(kù)作進(jìn)一步運(yùn)行。
假設(shè)完整性被核實(shí),任何由掃描子系統(tǒng)運(yùn)行的掃描會(huì)被停頓或中止。請(qǐng)注意操作1712。應(yīng)該注意該停頓是可選擇的。
接下來(lái),可將更新安裝于掃描子系統(tǒng)。請(qǐng)注意操作1714。在實(shí)例中任何掃描被停頓的地方,一旦更新被安裝于掃描子系統(tǒng),之后可以繼續(xù)使用掃描子系統(tǒng)進(jìn)行掃描。參見操作1716。
為適應(yīng)移動(dòng)通信框架中固有的有限帶寬,更新的某些部分的大小可以最小化。此外,可以對(duì)更新的部分進(jìn)行壓縮。
在另一個(gè)實(shí)施例中,可將每個(gè)更新部分的格式設(shè)計(jì)為能夠適應(yīng)移動(dòng)通信框架中固有的有限帶寬。更多關(guān)于此類格式的信息將在下文作闡述。
表#25說明了一個(gè)下載更新各部分的示范性格式。
表 #25
在表#25中列出的上述部分的每一個(gè)部分在表#26中作如下定義。
表 #26
每個(gè)部分由一個(gè)文件頭和數(shù)據(jù)組成。文件頭可以指明更新的相關(guān)部分的一個(gè)識(shí)別碼、更新的相關(guān)部分的一段長(zhǎng)度等等。此外,文件頭可以指定包含的數(shù)據(jù)名稱與長(zhǎng)度,并用一個(gè)額外的CR+LF對(duì)將其與實(shí)際數(shù)據(jù)相分隔。表#27列出了與文件頭相關(guān)聯(lián)的示范性數(shù)據(jù)/內(nèi)容的名稱。
表 #27
表#28說明了一個(gè)示范性的更新包。
表 #28
抽象函數(shù)庫(kù)API如前所述,提供了一個(gè)獨(dú)立于平臺(tái)的系統(tǒng)及相關(guān)的方法以用于一臺(tái)移動(dòng)通信設(shè)備。其包括一獨(dú)立于平臺(tái)的掃描子系統(tǒng),可同用于掃描的移動(dòng)通信設(shè)備的操作系統(tǒng)進(jìn)行通信。另外還提供了一個(gè)獨(dú)立于平臺(tái)的應(yīng)用程序接口,為操作系統(tǒng)及掃描子系統(tǒng)之間提供界面幫助。獨(dú)立于平臺(tái)的應(yīng)用程序接口包括了一個(gè)抽象函數(shù)庫(kù),用于將獨(dú)立于平臺(tái)的掃描子系統(tǒng)接駁于移動(dòng)通信設(shè)備及相關(guān)聯(lián)的操作系統(tǒng)。
通過該設(shè)計(jì),掃描子系統(tǒng)可以獨(dú)立于平臺(tái),并由此能在任何類型的操作系統(tǒng)/移動(dòng)通信設(shè)備的組合上加以執(zhí)行。
在一個(gè)實(shí)施例中,抽象函數(shù)庫(kù)可以支持系統(tǒng)初始化、函數(shù)庫(kù)初始化、出錯(cuò)函數(shù)、內(nèi)存分配、輸入/輸出(I/O)、數(shù)據(jù)認(rèn)證、同步、超文本傳輸協(xié)議、共享內(nèi)存、系統(tǒng)時(shí)間、設(shè)備信息、以及調(diào)試。更多關(guān)于上述應(yīng)用程序接口的一個(gè)可選擇實(shí)例的示范性信息將在附件A中進(jìn)行闡述。
雖然上文描述了不同的實(shí)施例,但容易理解,它們僅通過范例的形式被提出,而不具有限制性。因此,某個(gè)特定實(shí)例的應(yīng)用廣度與范圍不應(yīng)該由任何以上所描述的示范性實(shí)例所限制,而應(yīng)只根據(jù)權(quán)利要求及與其有同等效果的陳述所確定。
附件 A當(dāng)前的應(yīng)用程序接口(API)包括以下子系統(tǒng)· 系統(tǒng)初始化· 函數(shù)庫(kù)初始化· 出錯(cuò)函數(shù)· 堆內(nèi)存分配· 永續(xù)性內(nèi)存/儲(chǔ)存體I/O· 數(shù)據(jù)認(rèn)證· 同步對(duì)象(信標(biāo))· HTTP API· 共享內(nèi)存· 系統(tǒng)時(shí)間· 設(shè)備信息· 調(diào)試本附件中還描述了一套定義于抽象函數(shù)庫(kù)(AL)層的C-語(yǔ)言定義,供在API函數(shù)庫(kù)中使用。
系統(tǒng)初始化依賴于平臺(tái)/系統(tǒng)的啟動(dòng)初始化是由AlLibrarySysInit()函數(shù)運(yùn)行的。該函數(shù)的設(shè)計(jì)使其能從先前描述過的MDoSystemlnit()函數(shù)被調(diào)用。
AlLibrarySysInit描述運(yùn)行依賴于系統(tǒng)的初始化原型iht AlLibrarySysInit(void);
參數(shù)無(wú)返回值成功則返回0,否則為-1。
函數(shù)庫(kù)初始化平臺(tái)抽象API函數(shù)庫(kù)通過使用Al InitLibrary()函數(shù)被初始化。在一個(gè)抽象API函數(shù)被調(diào)用之前,抽象函數(shù)庫(kù)就被初始化一次。當(dāng)AlCleanupLibrary()函數(shù)被調(diào)用時(shí),由AlInitLibrary()獲得并初始化的系統(tǒng)資源被釋放。
AlInitLibrary描述運(yùn)行函數(shù)庫(kù)初始化。該函數(shù)將由MDoLibraryOpen()函數(shù)調(diào)用。
原型int AlInitLibrary(void);參數(shù)無(wú)返回值成功則返回0,否則為-1。
AlCleanupLibrary描述釋放由AlInitLibrary()函數(shù)獲得的系統(tǒng)資源。該函數(shù)將由先前指定的MDoLibraryClose()函數(shù)調(diào)用。
原型void AlCleanupLibrary(void);參數(shù)無(wú)返回值無(wú)出錯(cuò)函數(shù)AL 函數(shù)庫(kù)包含了一套出錯(cuò)函數(shù),該套函數(shù)用于設(shè)定并獲取有關(guān)特定任務(wù)/線程的出錯(cuò)代碼。抽象層實(shí)現(xiàn)者應(yīng)負(fù)責(zé)設(shè)定適當(dāng)?shù)某鲥e(cuò)代碼及組件代碼。
AlGetLastError描述返回調(diào)用任務(wù)/線程的最后出錯(cuò)代碼值。函數(shù)通過使用AlSetLastError()函數(shù)設(shè)定返回的值。
AlErrorCode數(shù)據(jù)類型是使用一個(gè)32-位無(wú)符號(hào)值進(jìn)行內(nèi)部表達(dá)的數(shù)據(jù)類型。
原型AlErrorCode AlGetLastError(void);參數(shù)無(wú)返回值調(diào)用線程/任務(wù)的最后出錯(cuò)值設(shè)定是通過使用AlSetLastError()函數(shù)完成的
AlSetLastError描述為調(diào)用線程/任務(wù)設(shè)定最后出錯(cuò)代碼原型void AlSetLastError(AlErrorCode errorCode);參數(shù)errorCode[in]32-位出錯(cuò)代碼值返回值無(wú)出錯(cuò)/狀態(tài)代碼
上述的表格列出了一套AL組件及出錯(cuò)代碼。一個(gè)使用AlSetLastError函數(shù)報(bào)告的出錯(cuò)是一個(gè)由組件代碼與出錯(cuò)代碼組合而形成的32-位的值。設(shè)定在AL層次的出錯(cuò)通過使用MDoGetLastError函數(shù)而獲取,以方便在出錯(cuò)發(fā)生時(shí)采取適當(dāng)?shù)男袆?dòng)。
堆內(nèi)存分配抽象層提供了一個(gè)堆內(nèi)存分配API,以方便一個(gè)調(diào)用應(yīng)用程序(例如″調(diào)用函數(shù)″)來(lái)動(dòng)態(tài)地分配所需的內(nèi)存。被分配的內(nèi)存被假設(shè)為可在全局范圍內(nèi)共享,即可以由多個(gè)應(yīng)用/任務(wù)所存取。AlMemAlloc()與AlMemFree()API函數(shù)提供了堆內(nèi)存的分配與取消分配。
AlMemAlloC描述分配一個(gè)指定量的動(dòng)態(tài)內(nèi)存并向該內(nèi)存返回一個(gè)指針。被分配的內(nèi)存塊可直接由調(diào)用函數(shù)(即調(diào)用應(yīng)用程序)所存取,而不需要一個(gè)特別的操作(即內(nèi)存鎖定)。
原型void* AlMemAlloc(unsigned int uSize);參數(shù)uSize[in]以字節(jié)計(jì)算的需分配內(nèi)存的量返回值一個(gè)指向被分配內(nèi)存的指針。如請(qǐng)求失敗或請(qǐng)求大小為零則返回NULL。
也可參見AlMemFree()AlMemFree描述釋放由AlMemAlloc()函數(shù)返回的動(dòng)態(tài)內(nèi)存塊原型void AlMemFree(void* pData);參數(shù)pData[in]指向一個(gè)需釋放內(nèi)存塊的指針返回值無(wú)也可參見AlMemAlloc()永續(xù)性儲(chǔ)存體I/O永續(xù)性儲(chǔ)存體(例如閃存)存取是通過使用一個(gè)文件I/O API進(jìn)行的。參見下文
文件句柄類型AL_FILE_HANDLE被定義為typedef struct AL_FILE_HANDLE_struct{} *AL_FILE_HANDLE;而一個(gè)用來(lái)指定一個(gè)無(wú)效的永續(xù)性儲(chǔ)存體句柄INVALID_AL FILE_HANDLE的常量被定義為#define INVALID_AL_FILE_HANDLE((AL_FILE_HANDLE)0)文件狀態(tài)緩沖區(qū)類型AlStatBuf被定義為typedef struct AlStatBuf_struct{unsigned long ulsize;unsigned long ulTime;}AlStatBuf;AlFileOpen描述打開指定的文件并返回其句柄。
原型AL_FILE_HANDLE AlFileOpen(const char* pszFilename,intiMode);參數(shù)pszFilename[in]文件名/路徑字符串iMode[in]文件存取模式
AL_OPEN READ打開文件供讀取AL_OPEN_WRITE 打開文件供讀取與寫入返回值如成功則返回文件句柄,否則為INVALID_AL_FILE_HANDLE。
也可參見AlFileClose(),AlFileRead(),AlFileWrite()AlFileClose描述關(guān)閉并釋放與特定文件句柄相關(guān)聯(lián)的系統(tǒng)資源原型void AlFileClose(AL_FILE_HANDLE hFile);參數(shù)hFile[in]由AlFileOpen()返回的文件句柄返回值無(wú)也可參見AlFileOpen(),AlFileRead(),AlFileWrite()AlFileSeek描述重新定位讀/寫文件偏移量原型long AlFileSeek(AL_FILE_HANDLE hFile,long lOffset,ihtiWhence);參數(shù)hFile[in]一個(gè)打開文件句柄lOffset[in]與iWhence指示符有關(guān)的文件偏移量iWhence[in]初始位置。可能的值有AL_SEEK_SET 偏移量參數(shù)指定絕對(duì)文件偏移量。換言之,自文件開始處的偏移量。
MLSEEK_CUR指定相對(duì)偏移量-偏移量參數(shù)從當(dāng)前文件偏移量指定文件偏移量。
AL_SEEK_END 從文件末尾指定文件偏移量。
返回值如成功則返回文件偏移量,否則為-1L也可參見AlFileOpen(),AlFileClose(),AlFileRead(),AlFileWrite()AlFileRead描述從一個(gè)文件讀取一塊數(shù)據(jù)原型unsigned int AlFileRead(AL_FILE_HANDLE hFile,void* pBuffer,unsigned int uSize);參數(shù)hFile[in]一個(gè)打開文件句柄pBuffer[out]數(shù)據(jù)緩沖區(qū)uSize[out]需讀取數(shù)據(jù)的量返回值如成功則返回讀取的字節(jié)數(shù),否則為-l也可參見AlFileOpen(),AlFileClose(),AlFileSeek(),AlFileWrite()AlFileWrite描述向一個(gè)文件寫入一塊數(shù)據(jù)原型unsigned int AlFileWrite(AL_FILE_HANDLE hFile,void const*pBuffer,unsigned int uSize);
參數(shù)hFile[in]一打開文件句柄pBuffer[int]存有需寫入數(shù)據(jù)的緩沖區(qū)uSize[out]需寫入數(shù)據(jù)的量返回值如成功則返回寫入數(shù)據(jù)的量,否則為-1也可參見AlFileOpen(),AlFileClose(),AlFileSeek(),AlFileRead()AlFileSetSize描述調(diào)整打開文件大小。
對(duì)于不支持本地文件調(diào)整大小的平臺(tái),抽象函數(shù)庫(kù)在AlFileClose()函數(shù)被調(diào)用時(shí)通過限定儲(chǔ)存在每個(gè)文件開始處的大小信息執(zhí)行該功能。
原型unsigned int AlFileSetSize(AL_FILE_HANDLE hFile,unsigned int uSize);參數(shù)hFile[in]引用一個(gè)帶有寫入模式的打開文件的句柄
uSize[out]以字節(jié)計(jì)算的新文件的長(zhǎng)度返回值如成功則返回0,否則為-1也可參見AlFileStat()AlFileStat描述獲取文件大小及創(chuàng)建時(shí)間戳。
對(duì)于不提供本地文件大小和/或時(shí)間戳信息獲取方法的平臺(tái),抽象函數(shù)庫(kù)通過在每個(gè)文件的開始處儲(chǔ)存信息執(zhí)行本函數(shù)。
原型int AlFileStat(char const* pszFilename,AlStatBuf* pStat);參數(shù)pszFilename[in]獲取信息的文件名稱pStat[out]指向一個(gè)用于返回大小與時(shí)間戳信息結(jié)構(gòu)的指針。該結(jié)構(gòu)包含以下域typedef struct AlStatBuf struct{
unsigned long ulSize; /*以字節(jié)計(jì)算的大小*/unsigned long ulTime;/*創(chuàng)建時(shí)間*/} AlStatBuf;返回值如成功則返回0,否則為-1數(shù)據(jù)認(rèn)證平臺(tái)抽象API包括一套用于認(rèn)證數(shù)據(jù)的函數(shù)。數(shù)據(jù)認(rèn)證API用于認(rèn)證所下載的惡意軟件的簽字?jǐn)?shù)據(jù)庫(kù)。
一旦調(diào)用函數(shù)通過使用AlDaOpen函數(shù)獲得了一個(gè)認(rèn)證對(duì)象,會(huì)對(duì)AlDaVerify作出一次調(diào)用,以核實(shí)所提供的數(shù)據(jù)。
AlDaGetSignerlnfo()用于獲取一個(gè)簽字者信息。AlDaClose()用于關(guān)閉并釋放數(shù)據(jù)認(rèn)證句柄及相關(guān)的系統(tǒng)資源。以下是一個(gè)示范性的數(shù)據(jù)認(rèn)證API
由AlDaOpen()函數(shù)返回的數(shù)據(jù)認(rèn)證句柄被定義為ALHANDLE(AL_DA_HANDLE);#define INVALID AL DA HANDLE((AL DA HANDLE)0)簽名者信息結(jié)構(gòu)被定義為#define MAX_DA_SIGNER_NAME 128typedef struct DaSignerlnfo_struct{char szSignerName[MAX_DA_SIGNER_NAME];} DaSignerlnfo;AlDaOpen描述創(chuàng)建并返回一個(gè)數(shù)據(jù)認(rèn)證句柄。
原型AL_DA_HANDLE AlDaOpen(const void* pSig,unsigned int uSigSize);參數(shù)pSig[in]指向一個(gè)簽名數(shù)據(jù)的指針uSigSize[in]以字節(jié)計(jì)算的簽名大小返回值如成功則返回?cái)?shù)據(jù)認(rèn)證句柄,否則為INVALID_AL_DA_HAWDLE也可參見
AlDaClose(),AlDaUpdate(),AlDaVerify(),AlDaGetSignerlnfo()AlDaClose描述釋放用于一個(gè)數(shù)據(jù)認(rèn)證句柄的系統(tǒng)資源。
原型void AlDaClose(AL_DA_HANDLE hDa);參數(shù)hDa[in]由AlDaOpen返回的數(shù)據(jù)認(rèn)證句柄。
返回值無(wú)也可參見AlDaOpen(),AlDaUpdate(),AlDaVerify(),AlDaGetSignerlnfo()AlDaVerify描述運(yùn)行數(shù)據(jù)認(rèn)證原型intAlDaVer ify(AL_DA_HANDLE hDa,int(*pfRead)(void *,void *,int),int iTotalSize,void *pPrivate);
參數(shù)hDa[in]數(shù)據(jù)認(rèn)證句柄pfRead[in]調(diào)用函數(shù)的回調(diào)函數(shù),用以讀取數(shù)據(jù)(參見)。如有一個(gè)出錯(cuò)它會(huì)返回-1,如再無(wú)數(shù)據(jù)可讀則返回0,否則返回所讀取數(shù)據(jù)的量,并返回到AlDaVerify函數(shù)。預(yù)計(jì)該函數(shù)將被多次調(diào)用。
iTotalSize[in]需核實(shí)的全部數(shù)據(jù)大小。
pPrivate[in]由pfRead回調(diào)函數(shù)傳遞的調(diào)用函數(shù)的私有數(shù)據(jù)。
返回值如應(yīng)用數(shù)據(jù)得到認(rèn)證則為0,否則為-1。
也可參見AlDaOpen(),AlDaClose(),AlDaGetSignerlnfo()以下為一個(gè)樣本數(shù)據(jù)讀取的回調(diào)函數(shù)。
AlDaGetSienerlnfo描述獲取數(shù)據(jù)認(rèn)證簽名者信息原型int AlDaGetSignerMo(ALJDAJHANDLE hDA,DaSignerlnfo *pDSI);參數(shù)hDa[in]數(shù)據(jù)認(rèn)證旬柄pDSI[out]指向一個(gè)含有簽名者信息的結(jié)構(gòu)的指針返回值如成功獲得簽名者信息則返回0,否則為-1也可參見AlDaOpen(),AlDaClose(),AlDaVerify()同步對(duì)象資源同步及控制是通過使用一個(gè)信標(biāo)來(lái)達(dá)到的。抽象函數(shù)庫(kù)內(nèi)包括一套用以創(chuàng)建、打開、關(guān)閉并限定一個(gè)信標(biāo)對(duì)象的函數(shù)。以下是一個(gè)示范性信標(biāo)API。
AlSemCreate描述創(chuàng)建一個(gè)被命名的信標(biāo),設(shè)定內(nèi)部計(jì)數(shù)為零,并返回其句柄。
原型AL_SEM_HANDLE AlSemCreate(char const* pszName);參數(shù)pszName[in]信標(biāo)名稱字符串返回值如成功則返回信標(biāo)句柄,否則為INVALro_AL_SEM_HANDLE也可參見AlSemOpen(),AlSemClose(),AlSeraGet(),AlSemRelease()AlSemOpen描述返回一個(gè)句柄至一個(gè)現(xiàn)存的信標(biāo)。
原型AL_SEM_HANDLE AlSemOpeh(char const* pszName);
參數(shù)pszName[in]信標(biāo)名稱返回值如成功則返回信標(biāo)旬柄,否則為INVALID_AL_SEM_HANDLE也可參見AlSemCreate(),AlSemClose(),AlSemGet(),AlSemRelease()AlSemClose描述關(guān)閉并釋放與特定信標(biāo)句柄相關(guān)聯(lián)的系統(tǒng)資源。信標(biāo)使用/引用計(jì)數(shù)也減少,且如計(jì)數(shù)達(dá)到零,被引用的信標(biāo)對(duì)象會(huì)被銷毀。
原型void AlSemClose(AL_SEM_HANDLE hSem);參數(shù)hSem[in]使用AlSemCreate()or AlSemOpen()而獲得的信標(biāo)句柄返回值無(wú)也可參見AlSemCreate(),AlSemOpen(),AlSemGet(),AlSemRelease()
AlSemGet描述獲得指定的信標(biāo)。如進(jìn)入時(shí)內(nèi)部計(jì)數(shù)大于零,其數(shù)值會(huì)減少一位并立即被返回。如進(jìn)入時(shí)內(nèi)部計(jì)數(shù)為零,調(diào)用被阻止,直到其它任務(wù)/線程調(diào)用AlSemRelease()從而使之大于零。
原型int AlSemGet(AL_SEM_HANDLE hSem);參數(shù)hSem[in]信標(biāo)句柄返回值成功則返回0,否則為-1也可參見AlSemCreate(),AlSemOpen(),AlSemClose(),AlSemRelease()AlSemRelease描述釋放信標(biāo),內(nèi)部計(jì)數(shù)增加1原型int AlSemRelease(AL_SEM_HANDLE hSem);參數(shù)hSem[in]信標(biāo)句柄返回值成功則返回0,否則為-1也可參見AlSemCreate(),AlSemOpen(),AlSeraClose(),AlSemGet()HTTP API抽象函數(shù)庫(kù)內(nèi)包括一套函數(shù),該套函數(shù)能通過使用一個(gè)調(diào)用函數(shù)提供的回調(diào)結(jié)構(gòu)提供HTTP網(wǎng)絡(luò)I/O。以下是一個(gè)示范性的HTTP API。
由AlHttpOpen()函數(shù)返回的HTTP句柄被定義為typedef struct AL_HTTP HANDLE_struct{} *AL_HTTP_HANDLE;#define INVALID_AL_HTTP_HANDLE((ALJ3TTP_HANDLE)0)HTTP回調(diào)結(jié)構(gòu)AlHttpCallbacks被定義為<pre id="pre0001" xml:space="preserve" listing-type="sequence">typedef struct AlHttpCallbacks_struct{ unsigned int (* pWrite)(void* pPrivate, void const* pData, unsigned int uSize);unsigned int(* pRead)(void* pPrivate. void* pData, unsigned int uSize); unsigned int(* pGetSize)(void* pPrivate); unsigned int(* pSetSize)(void* pPrivate,unsigned int uSize);}AlHttpCal lbacks;</pre>在以上HTTP回調(diào)結(jié)構(gòu)中所給出的回調(diào)函數(shù)提供了以下各種功能pWrite由系統(tǒng)HTTP函數(shù)庫(kù)調(diào)用,以儲(chǔ)存收到的HTTP請(qǐng)求數(shù)據(jù)。
pRead 用于獲取申請(qǐng)數(shù)據(jù),以便作為一個(gè)HTTP請(qǐng)求的一部分被發(fā)送。
pGet Size 提供帶申請(qǐng)者的內(nèi)容數(shù)據(jù)大小的HTTP函數(shù)庫(kù),″Content-Length″。
pSet Size 由HTTP函數(shù)庫(kù)調(diào)用,以便在數(shù)據(jù)到位時(shí)向調(diào)用的應(yīng)用程序通知收到的內(nèi)容數(shù)據(jù)的大小。
AlHttpOpen描述創(chuàng)建并向HTTP函數(shù)庫(kù)返回一個(gè)句柄。
原型AL_HTTP_HANDLE AlHttpOpen(void);參數(shù)無(wú)返回值如創(chuàng)建一個(gè)HTTP實(shí)例失敗,則返回INVALID_AL_HTTP_HMTDLE也可參見AlHttpClose()AlHttpClose描述關(guān)閉并釋放與一個(gè)HTTP句柄相關(guān)聯(lián)的系統(tǒng)資源。
原型void AlHttpClose(AL_HTTP_HANDLE hHTTP);參數(shù)hHTTP[in]由AlHttpOpen()函數(shù)返回的HTTP函數(shù)庫(kù)句柄。
返回值無(wú)也可參見AlHttpClose()AlHttpExec描述在指定的URL上執(zhí)行一個(gè)HTTP方法(″GET″或″POST″),并帶有可選擇的文件頭信息。
原型
intAlHttpExec(AL_HTTP_HANDLE hHTTP,char const* pszMethod,char const* pszURL,AlHttpCallbacks* pHttpCb,void* pPrivate);參數(shù)hHTTP[in]由AlHttpOpen()函數(shù)返回的HTTP函數(shù)庫(kù)句柄pszMethod[in]HTTP方法規(guī)格。HTTP″GET″或″POST″pszURL[in]作出HTTP請(qǐng)求所在地址的URLpHttpCb[in]指向一套調(diào)用函數(shù)指定的HTTP I/O函數(shù)的指針。HTTP函數(shù)庫(kù)使用在AlHttpCallbacks結(jié)構(gòu)中指定的函數(shù),以進(jìn)行數(shù)據(jù)I/OpPrivate[in/out]指向一個(gè)調(diào)用函數(shù)數(shù)據(jù)的指針,該調(diào)用函數(shù)數(shù)據(jù)需傳回在AlHttpCallbacks結(jié)構(gòu)中指定的回調(diào)函數(shù)返回值成功則返回0,否則為-1也可參見AlHttpOpen(),AlHttpClose()
共享內(nèi)存存放函數(shù)庫(kù)的共享對(duì)象的系統(tǒng)內(nèi)存地址是通過使用AlShmAddress()函數(shù)而得到的。該共享信息區(qū)域在設(shè)備啟動(dòng)時(shí)間被分配/準(zhǔn)備,而且為函數(shù)庫(kù)的不同實(shí)例所引用。
AlShmAddress描述返回共享內(nèi)存地址。
原型void* AlShmAddress(void);參數(shù)無(wú)返回值如成功則返回共享內(nèi)存的地址,否則為NULL時(shí)間AlTmGetCurrent()向調(diào)用函數(shù)提供以秒為單位的當(dāng)前系統(tǒng)時(shí)間。
AlTmGetCurrent描述獲得當(dāng)前的系統(tǒng)時(shí)間。
原型unsigned long AlTmGetCurrent(void);參數(shù)無(wú)返回值如成功,則返回自紀(jì)元(協(xié)調(diào)世界時(shí)00:00:00,1970年1月1日)以來(lái)的以秒為單位的時(shí)間。如出錯(cuò),則返回((unsigned long)-1L)。
設(shè)備信息AlDevGetInfo描述獲取設(shè)備的特定信息。由此函數(shù)返回的設(shè)備識(shí)別字符串被API使用。
原型int AlDevGetInfo(AlDeviceInfo* pDeviceInfo);參數(shù)pDevicelnfo[out]指向設(shè)備信息的指針AlDevicelnfo結(jié)構(gòu)被定義為#define AL_MAX_DEVICE_ID 32typedef struct AlDevicelnfo struct{charszDeviceID[AL_MAX_DEVICE_ID];}AlDevicelnfo;識(shí)別字符串szDevicelD是一個(gè)獨(dú)一無(wú)二的終端/設(shè)備識(shí)別碼-它用來(lái)將一個(gè)特定的移動(dòng)通信設(shè)備與所有其它的設(shè)備單獨(dú)識(shí)別出來(lái)。此信息用于為移動(dòng)通信設(shè)備構(gòu)建一個(gè)惡意軟件簽名下載URL。它不能包含任何不允許在一個(gè)URL中出現(xiàn)的字符(即空格)。
返回值成功則返回0,失敗則為-1調(diào)試AlDbgQutput描述向一個(gè)調(diào)試控制臺(tái)輸出調(diào)試字符串。該函數(shù)是一個(gè)用于發(fā)布版本的零函數(shù)。
原型int AlDbgOutput(char const* pszOutput);參數(shù)pszOutput[in]向調(diào)試控制臺(tái)輸出的字符串返回值成功則返回0,失敗則為-權(quán)利要求
1.一種用于移動(dòng)通信設(shè)備的獨(dú)立平臺(tái)系統(tǒng),其特征在于包括一移動(dòng)通信設(shè)備,能夠通過無(wú)線網(wǎng)絡(luò)通信,并包括一安裝于其上的操作系統(tǒng);一獨(dú)立平臺(tái)掃描子系統(tǒng),為掃描目的而與所述移動(dòng)通信設(shè)備的操作系統(tǒng)進(jìn)行通信;和一獨(dú)立平臺(tái)應(yīng)用程序接口,為所述操作系統(tǒng)以及所述掃描子系統(tǒng)提供連接,該獨(dú)立平臺(tái)應(yīng)用程序接口包括一抽象庫(kù),該抽象庫(kù)作為端口將獨(dú)立平臺(tái)掃描子系統(tǒng)提供給所述移動(dòng)通信設(shè)備以及與之關(guān)聯(lián)的操作系統(tǒng)。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述應(yīng)用程序包括郵件應(yīng)用程序。
3.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述應(yīng)用程序包括瀏覽器應(yīng)用程序。
4.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述應(yīng)用程序包括電話薄應(yīng)用程序。
5.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述應(yīng)用程序包括消息應(yīng)用程序。
6.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述應(yīng)用程序包括Java應(yīng)用程序。
7.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述移動(dòng)通信設(shè)備包括蜂窩電話。
8.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述抽象庫(kù)支持系統(tǒng)初始化。
9.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述抽象庫(kù)支持庫(kù)初始化。
10.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述抽象庫(kù)支持出錯(cuò)函數(shù)。
11.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述抽象庫(kù)支持內(nèi)存配置。
12.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述抽象庫(kù)支持內(nèi)存輸入/輸出。
13.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述抽象庫(kù)支持?jǐn)?shù)據(jù)認(rèn)證。
14.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述抽象庫(kù)支持同步對(duì)象。
15.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述抽象庫(kù)支持共享內(nèi)存。
16.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述抽象庫(kù)支持系統(tǒng)時(shí)間。
17.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述抽象庫(kù)支持超文本傳輸協(xié)議。
18.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述抽象庫(kù)支持設(shè)備信息。
19.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述抽象庫(kù)支持調(diào)試。
20.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述抽象庫(kù)支持系統(tǒng)初始化、庫(kù)初始化、出錯(cuò)函數(shù)、內(nèi)存配置、輸入/輸出、數(shù)據(jù)認(rèn)證、同步對(duì)象、超文本傳輸協(xié)議、共享內(nèi)存、系統(tǒng)時(shí)間、設(shè)備信息以及調(diào)試。
21.一種用于移動(dòng)通信設(shè)備的平臺(tái)獨(dú)立的方法,其特征在于,包括利用一裝有操作系統(tǒng)的移動(dòng)通信設(shè)備并通過無(wú)線網(wǎng)絡(luò)進(jìn)行通信;利用一獨(dú)立平臺(tái)掃描子系統(tǒng)進(jìn)行掃描,該子系統(tǒng)可與所述移動(dòng)通信設(shè)備的操作系統(tǒng)進(jìn)行通信;利用一獨(dú)立平臺(tái)應(yīng)用程序接口連接所述操作系統(tǒng)和所述掃描子系統(tǒng);其中所述獨(dú)立平臺(tái)應(yīng)用程序接口包括一抽象庫(kù),該抽象庫(kù)作為端口將所述獨(dú)立平臺(tái)掃描子系統(tǒng)提供給所述移動(dòng)通信設(shè)備以及與之關(guān)聯(lián)的操作系統(tǒng)。
22.一種用于移動(dòng)通信設(shè)備的獨(dú)立平臺(tái)計(jì)算機(jī)程序產(chǎn)品,其特征在于,包括利用一裝有操作系統(tǒng)的移動(dòng)通信設(shè)備并通過無(wú)線網(wǎng)絡(luò)進(jìn)行通信的計(jì)算機(jī)代碼;利用一獨(dú)立平臺(tái)掃描子系統(tǒng)進(jìn)行掃描的計(jì)算機(jī)代碼,該子系統(tǒng)可與所述移動(dòng)通信設(shè)備的操作系統(tǒng)進(jìn)行通信;以及利用一獨(dú)立平臺(tái)應(yīng)用程序接口連接所述操作系統(tǒng)和所述掃描子系統(tǒng)的計(jì)算機(jī)代碼;其中所述獨(dú)立平臺(tái)應(yīng)用程序接口包括一抽象庫(kù),該抽象庫(kù)作為端口將所述獨(dú)立平臺(tái)掃描子系統(tǒng)提供給所述移動(dòng)通信設(shè)備以及與之關(guān)聯(lián)的操作系統(tǒng)。
全文摘要
提供了一種用于移動(dòng)通信設(shè)備的獨(dú)立平臺(tái)系統(tǒng)以及與之相關(guān)的方法。包括一能夠通過無(wú)線網(wǎng)絡(luò)通信的移動(dòng)通信設(shè)備。該移動(dòng)通信設(shè)備安裝有一操作系統(tǒng)。與之相關(guān)聯(lián)的有一獨(dú)立平臺(tái)掃描子系統(tǒng)與移動(dòng)通信設(shè)備上的操作系統(tǒng)進(jìn)行通信以達(dá)到掃描目的。還提供了一種獨(dú)立平臺(tái)應(yīng)用程序接口,用于為操作系統(tǒng)以及掃描子系統(tǒng)提供接口。該獨(dú)立平臺(tái)應(yīng)用程序接口包括一抽象庫(kù),該抽象庫(kù)作為端口將獨(dú)立平臺(tái)掃描子系統(tǒng)安裝到移動(dòng)通信設(shè)備以及與之關(guān)聯(lián)的操作系統(tǒng)。
文檔編號(hào)H04M3/00GK1939042SQ200480016985
公開日2007年3月28日 申請(qǐng)日期2004年4月5日 優(yōu)先權(quán)日2003年4月17日
發(fā)明者維克托·古內(nèi)索夫, 達(dá)維德·利本齊, 邁克爾·C·帕克, 浦川安孝, 石井憲司, 藤田正德 申請(qǐng)人:邁克非公司, Ntt移動(dòng)通訊公司