CN1981263A - 在移动通信框架内用于更新扫描子系统的更新系统与方法 - Google Patents
在移动通信框架内用于更新扫描子系统的更新系统与方法 Download PDFInfo
- Publication number
- CN1981263A CN1981263A CN 200480016993 CN200480016993A CN1981263A CN 1981263 A CN1981263 A CN 1981263A CN 200480016993 CN200480016993 CN 200480016993 CN 200480016993 A CN200480016993 A CN 200480016993A CN 1981263 A CN1981263 A CN 1981263A
- Authority
- CN
- China
- Prior art keywords
- renewal
- mobile communication
- scanning subsystem
- scanning
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000010295 mobile communication Methods 0.000 title claims abstract description 86
- 238000000034 method Methods 0.000 title claims abstract description 48
- 238000004590 computer program Methods 0.000 claims abstract description 3
- 238000004891 communication Methods 0.000 claims description 9
- 230000004044 response Effects 0.000 claims description 5
- 230000005540 biological transmission Effects 0.000 claims description 4
- 230000001413 cellular effect Effects 0.000 claims description 3
- 238000012857 repacking Methods 0.000 claims description 3
- 230000006870 function Effects 0.000 description 195
- 239000011800 void material Substances 0.000 description 64
- 238000010586 diagram Methods 0.000 description 18
- 230000008569 process Effects 0.000 description 12
- 101001039113 Homo sapiens Leucine-rich repeat-containing protein 15 Proteins 0.000 description 11
- 102100040645 Leucine-rich repeat-containing protein 15 Human genes 0.000 description 11
- 241000700605 Viruses Species 0.000 description 10
- 230000006399 behavior Effects 0.000 description 6
- 238000000429 assembly Methods 0.000 description 5
- 230000000712 assembly Effects 0.000 description 5
- 230000033001 locomotion Effects 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000002155 anti-virotic effect Effects 0.000 description 3
- 230000000875 corresponding effect Effects 0.000 description 3
- 230000002085 persistent effect Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 230000003612 virological effect Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000008439 repair process Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000003542 behavioural effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005314 correlation function Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 239000004615 ingredient Substances 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000009545 invasion Effects 0.000 description 1
- ORMNNUPLFAPCFD-DVLYDCSHSA-M phenethicillin potassium Chemical compound [K+].N([C@@H]1C(N2[C@H](C(C)(C)S[C@@H]21)C([O-])=O)=O)C(=O)C(C)OC1=CC=CC=C1 ORMNNUPLFAPCFD-DVLYDCSHSA-M 0.000 description 1
- 238000012797 qualification Methods 0.000 description 1
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Landscapes
- Mobile Radio Communication Systems (AREA)
Abstract
提供一个系统、方法及计算机程序产品,以有效地更新一台移动通信设备的一个扫描子系统。首先接收的是为更新一台移动通信设备的一个扫描子系统而经过改装的一个更新的第一部分。此外,除了接收更新的第一部分之外,更多的更新部分将被接收。之后将该更新安装于扫描子系统。
Description
技术领域
本发明涉及移动通信设备的安全领域,具体地说,是关于扫描移动通信设备以侦测恶意软件。
背景技术
在过去的十年中,移动蜂窝式电话的数目与使用增长迅速。最近一段时期,引入了无线设备,它能将移动电话与个人数字助理(PDA)的功能相结合。可以预计,在未来一段时间内,随着新型蜂窝式电信标准(例如:6PRS、UMTS及WAP)使得跨无线界面上的高速数据传输成为可能,这一领域将经历强劲的增长。
可以预计,无线通信平台将有可能遭受到所谓的恶意软件(malware),如病毒、特洛伊木马、计算机蠕虫(下文中统称为‘病毒’),以及其它干扰性/有害内容的侵袭;其侵害方式与现今个人计算机以及工作站所受侵害方式大致相同。事实上已经有多种移动电话病毒被确认。
为抵御病毒的袭击,必须在移动平台上布置安装防病毒软件,其方式与桌上型计算机环境的布置方式大致相同。多种不同的桌上型防病毒应用软件现已问世。这些应用软件的大部分依靠一种基本的扫描引擎,它会寻找可疑档案中是否存在预先确定的病毒签名。这些签名储存在一个数据库中,必须经常对其进行更新,以反映最新识别的病毒信息。
一般来说,用户们可以每隔一段时间通过互连网、从接收的电子邮件、或从一张光盘和软盘下载替换用数据库。用户们也需要时常更新软件引擎,以便于在发现新类型的病毒时利用最新的病毒侦测技术。
移动无线平台给软件开发商们(包括防病毒软件开发商)带来了一系列的问题。这些问题中主要是有限的内存和移动平台的处理能力,以及它们所拥有的有限的输入/输出能力(例如,无光盘驱动或软驱,无高带宽的固定线路网络或互联网连接)。不幸的是,这一缺点使得所有对移动通信设备进行的更新工作变得难以开展。
发明内容
本发明提供了一种可有效更新移动通信设备中的扫描子系统的系统、方法和计算机程序产品。首先接收到的是用于更新一台移动通信设备的扫描子系统的第一部分更新程序。之后,除了接收到第一部分更新之外,还可以接收到更多的更新部分。然后该更新程序就被安装于该扫描子系统。
在一个实施例中,可确定更新程序是否具有完整性。相应地,根据该更新的完整性,该更新程序可有条件地安装于扫描子系统。
作为一种选择,更新的完整性可以通过使用一个签名来决定。此签名可以通过更新的某一部分来接收(比如最后一部分)。之后,可以将该签名与另一个通过利用更新的每个部分而生成的签名进行比对。
为适应移动通信框架中固有的有限带宽问题,更新程序的一部分可以最小化。此外,可以针对更新程序的某些部分进行压缩。
在使用中,可以决定第一部分是否为空。由此,可以基于第一部分是否决定为空而针对更新程序的其它部分进行有条件的接收。同样,此特征对于解决移动通信框架中固有的有限带宽接收问题也有益处。
作为一种选择,使用扫描子系统的扫描可以在接收到更新程序的时候暂停。此外,扫描可以在更新程序被安装于扫描子系统中之后继续进行。
在另外一个实例中,可将更新程序的每一部分的格式进行特殊设计,使其能适应移动通信框架固有的有限带宽的问题。例如,更新程序的每个部分可以包括一个头文件。该头文件可以指明一个与更新程序相关联部分的识别码、与更新程序相关联部分的一段长度等。
在另外一个实例中,可由移动通信设备发出更新请求。该更新可以由带有一请求数据结构的移动通信设备发出请求。该数据结构可以选择性地包括数个变量,例如一个统一资源定位器(URL)变量,一个移动通信识别码变量,一个应用程序接口版本变量,一个侦测逻辑变量,一个签名版本变量,和/或一个部分号码变量。
附图说明
图1是移动通信框架一个实施例示意图;
图2是移动通信框架另一个实施例示意图;
图3是与一个移动通信设备相关联的一个架构的实施例示意图;
图4是一个通过使用一台移动通信设备访问安全或内容分析功能的系统的实施例示意图;
图5是根据图4所示系统的一个应用服务器的实施例,通过使用一台移动通信设备访问安全或内容分析功能框架的示意图;
图6是根据图4所示系统的一个重复加载函数库的实施例,通过使用一台移动通信设备访问安全或内容分析功能框架的示意图;
图7是在图4所示系统下执行的一个按需式扫描系统的示意图;
图8是一个应用程序接口(API)的各种不同组件的一个阶梯状关系的实施例示意图,它可以用于在移动应用程序与一个扫描子系统之间提供接口;
图9是一个示范型函数库接口启动的示意图;
图10是一个出错代码功能的一个示范性格式的实施例示意图;
图11是一个扫描子系统API的调用次序的实施例示意图;
图12是一个示范性配置API的调用次序的实施例示意图;
图13是各种不同的示范性扫描数据类型的示意图,这些数据类型可以由应用程序通过一个API传递到扫描子系统;
图14是一个包含恶意软件严重性标识和应用程序表现水准的位-域变量的示范性实施例示意图;
图15是一个图表示意图,该图阐述了运用扫描子系统进行扫描的时间作为通过图13中的变量所识别的数据类型的一个函数而变化的方式;
图16是一个示范性流程的实施例示意图,该流程描述了该更新程序由一个用户界面启动的方式。
图17是对一台移动通信设备的一个扫描子系统进行有效更新的方法的实施例示意图。
具体实施方式
图1是一个移动通信框架100的实施例示意图。如图所示,该框架包括移动通信设备102以及能够通过无线网络进行通信的后端服务器104。在当前描述的环境下,移动通信设备102可包括(但并不局限于)蜂窝式电话、无线个人数字助理(PDA)、无线掌上电脑、无线手提式电脑或任何其它能够通过无线网络进行通信的移动设备。
在一个实施例中,移动通信设备102可配备一扫描子系统105。该扫描子系统105可包括任何能够储存于移动通信设备102或存放于所进行通信之中的扫描数据的子系统。当然,该扫描可以是访问式扫描、需求式扫描或者其他任何类型的扫描。此外,扫描可能牵涉到上述数据所代表的内容(即文本、图片等),以及对恶意软件进行的通用安全类型的扫描等等。
仍旧回到图1,移动通信设备102可以进一步配备有一个能够描绘多个图形用户界面108的显示器106,此显示器经过改装以用于管理包括以上所述扫描功能在内的各种功能。
使用时,移动通信设备102的显示器106用于在一个网络(如互联网等)上显示数据。请参见操作1。在当前的使用过程中,用户可以使用显示器106浏览各类网络上的数据,具体是通过后端服务器104选择链接或锚点以从网络上获取数据。请参见操作2。接着,在操作3中,扫描子系统105被调用以扫描所获取的数据。
在当前的实施例中,扫描子系统105显示出已经找到与操作4中所获取数据有关的恶意软件。此时,通过显示器106向一位用户提供了一个选项,即中断此次获取和/或使用/访问该数据而忽略所识别出的恶意软件,如操作5所示。基于操作5中的决定,用户会或不会成为一次‘攻击’的对象,如操作6所示。
图2是基于另一个实施例的移动通信框架200的示意图。该移动通信框架200类似于图1所示的移动通信框架100,只是移动通信设备对所获取数据中恶意软件的识别作出反应的方式有所不同。
具体地,操作5中仅提供给用户一个选项。即,用户只能关闭任何与被发现包含恶意软件的数据有关的对话。
图3显示了基于一个实施例的与移动通信设备相关联的架构300。当前的架构300可以包含于图1和图2的移动通信设备。当然,架构300可在任何所需的场合执行。
如图所示,当前的架构300可包括多个移动应用程序302。在当前描述的情况下,移动应用程序302可包括任何安装于移动通信设备中的应用程序或软件等,以利于开展不同的任务。还应该注意,该应用程序302也可以按用户的需要安装于固件、硬件等之中。
在另一个实施例中,应用程序302可包括(但是并不限于)邮件应用程序,其任务包括管理电子邮件。此外,该应用程序可以包括浏览器应用程序,其任务包括浏览网络。另外,该应用程序还可以包括电话簿应用程序,其任务包括管理多个电话号码。作为一种选择,该应用程序可以包括消息应用程序,其任务包括消息通信。应该注意,该应用程序可为任何类行。例如,可以为Java应用程序或其他类似的程序。
继续回到图3,通过第一个应用程序接口(API)306及第一个同扫描子系统304相关的函数库308,扫描子系统304与应用程序302进行通信。更多关于第一个应用程序接口306及第一个函数库308的可选择示范性信息将在下文讨论图4-12的时候作进一步阐述。
作为一种选择,应用程序302可同扫描子系统304进行信息通信,以方便扫描子系统304的扫描工作。该信息可以同将要进行扫描的数据类型、及同此类扫描相关的时间安排有关。更多关于扫描子系统304同应用程序302以此种方式进行互动的示范性信息将在讨论图13-15的时候作进一步阐述。
如图3所示,第一个函数库308可包括更新管理器310、配置管理器312、以及一个签名数据库314。在使用中,该更新管理器310可管理签名数据库314更新扫描用的最新签名的过程。在一个实施例中,更新的过程可以进行简化以适应移动通信框架固有的有限带宽的问题。更多的关于该更新过程的示范性信息将在讨论图16-17时进行阐述。
作为图3中架构300的一个组成部分又进一步提供了操作系统316,该操作系统安装于移动通信设备上并经过改装以方便执行应用程序302。在一个实施例中,扫描子系统304可以独立于平台,因此能够在任何操作系统/移动通信设备组合中加以执行。
为适应这个特性,安排了第二个应用程序接口318以及第二个函数库320,其能够支持多种功能,例如系统/函数库初始化322、出错函数336、内存分配334、输入/输出(I/O)328、数据授权332、同步330、高级文本传送协议326、设备信息324、调试338、以及其他功能(即共享内存、系统时间,等)。在一个实施例中,第二个应用程序接口318可以是独立于平台的,类似于扫描子系统304。更多关于第二个应用程序接口318及第二个函数库320的可选择示范性细节将在讨论附件A时作进一步阐述。
图4显示了基于一个实施例的系统400,其通过使用一台移动通信设备以访问安全或内容分析功能。在一个范例中,当前的系统400可在图3之架构300中的应用程序、扫描子系统以及操作系统环境下执行。但是应该注意到,当前的系统400可在任何所需的环境下加以执行。
如图所示,这里包括了能通过无线网络进行通信的安装于一移动通信设备的操作系统402。另外还提供了安装于移动通信设备的应用程序404,其通过使用操作系统402加以执行并完成各种任务。
扫描子系统406通过一个应用程序接口及一个关联函数库(参见图3中的第一个应用程序接口306及第一个函数库308)保持与应用程序404进行通信。该扫描子系统406经过改装以访问安全或内容分析功能,以及应用程序404所进行的任务。在一个实施例中,安全或内容分析为安全分析。在另外一个实施例中,安全或内容分析为内容分析。另外,安全或内容分析可以包括按需式病毒扫描和/或存取式病毒扫描。
在使用中,安全或内容分析功能可应用于与应用程序404所运行任务相关联的应用数据。在当前描述的环境下,应用数据可包括任何由应用程序404执行的任务所输入、处理、输出的数据或其他与之相关的数据。
通过应用程序接口使扫描子系统406与应用程序404紧密联合,可以降低管理费用与代码重复率。更多关于该应用程序接口与相关函数库的示范性信息将在讨论此后的图表时作进一步阐述。
图5基于图4中系统400的应用服务器,显示了通过使用移动通信设备访问安全或内容分析功能的框架500。应该注意到当前的框架500可以在任何所需的环境中加以执行。
如图所示,扫描子系统可包括扫描程序502,该扫描程序通过应用程序接口506以及一个关联的协议(例如uItron消息联络系统)与应用程序504进行通信。应用程序接口506会牵涉到一个与扫描程序502相关联的第一个组件508,以及与应用程序504相关联的第二个组件510,这会在下文中作进一步阐述。
向应用程序接口506提供的多种不同的调用512可包括开放式的调用、数据调用、以及封闭式的调用。在使用中,扫描程序502可以扫描与应用程序504所运行的任务相关联的应用数据516。
图6所示为一个通过使用移动通信设备用以访问安全或内容分析功能的框架600,该框架与图4中系统400的重复加载库实例相一致。应该注意,当前的框架600可以在任何所需的环境下加以执行。
如图所示,扫描子系统可包括一个重复加载函数库602。在使用中,扫描子系统重复加载函数库602可在运行时连接于应用程序604。由此,应用程序接口606可以被植入多个应用程序604中的每一个之中。
类似于先前图5中的框架500,应用程序接口606可能涉及多种不同的调用612,包括开放式的调用、数据调用、以及封闭式的调用。在使用中,重复加载函数库602可以用于扫描与应用程序604所运行的任务相关的应用数据616。
图7所示为一个在图4中系统400环境下执行的按需式扫描系统700。应该注意,当前系统700可以在任何所需的环境下加以执行。
按需式扫描对所储存应用数据702进行扫描,以侦测恶意内容或代码并在发现后将其除去。用户可以通过一个用户界面703来启动按需式扫描。此外,每个应用程序704可以调用扫描子系统706以运行针对储存于相应内存内对象进行的扫描。
另一方面,按需式扫描在应用程序704处理或转换应用数据702之前提供了对恶意代码或内容的识别。在扫描子系统706侦测到恶意应用数据702之前,按需式扫描对于用户是透明的。
图8基于一个实施例,显示了应用程序接口800的各种不同组件的层次体系,可用于在移动应用程序与一个扫描子系统之间提供接口。作为一种选择,当前的应用程序接口800可以在图4中系统400的环境下加以执行。但是应该注意到,当前的应用程序接口800可以在任何所需的环境下加以执行。
如图8所示,应用程序接口的函数包括MdoScanOpen()802、MDoScanClose()804、MDoScanVersion()806、及MDoScanData()808。MoDoScanOpen()802和MDoScanClose()804是用于创建/打开并关闭一个扫描子系统对象实例。MDoScanVersion()806提供了扫描子系统及签名模式数据版本信息。MDoScanData()808运行内容/数据扫描及报告。同时包括在扫描应用程序接口中的有MDoScanUpdate()810,它能提供恶意软件签名数据库及侦测逻辑更新。当MDoScanUpdate()810由一次更新应用所调用时,函数库就会连接上一个远程后端服务器(参见例如图1)并下载最新的文件(例如mdo.sdb与mdo.pd)。
扫描子系统配置是通过运用MDoConfigOpen()812、MDoConfigClose()814、MDoConfigGet()816以及MDoConfigSet()818所达成的。一旦一个配置句柄通过调用当前的应用程序接口800而获得,进行调用的应用程序使用get与set配置API以查询并设定扫描子系统配置的各种变量。
同时包含于当前应用程序接口800的是一个称为MDoGetLastError()820的出错获取函数。该函数用于获取关于已发生的最后出错的信息。
在作出任何API调用之前,最好是在启动时间,MDoSystemInit()825被调用以初始化函数库环境设置。该函数库保存了配置设置、恶意软件代码侦测逻辑(如mdo.pd)与签名数据库(如mdo.sdb)、及各种内部变量(如同步对象,等),并将其存放于固定的持续性储存地点。
MDoLibraryOpen()830和MDoLibraryClose()840用于初始化函数库。一个应用程序可以在任何其它的API调用发生之前调用MDoLibraryOpen()830,而且应用程序可以在终止之前调用MDoLibraryClose()840。
应用程序接口800可以通过使用不同的应用程序接口组件从而能够支持各种不同的功能,例如系统环境初始化、版本状态信息获取、更新扫描子系统、扫描、配置扫描子系统,等。更多关于在应用程序接口800环境下上述功能的信息将在下文进行阐述。
系统初始化
MDoSystemInit()825针对保存于特定永久储存域的数据进行验证与环境初始化工作。一个恶意代码/内容签名模式的数据库(即mdo.sdb)、侦测逻辑(即mdo.pd)、配置设置、以及同步对象可以储存于这些存储域中。MDoSystemInit()825可以在API函数中的任一函数被执行之前被调用一次(即在启动时)。
表#1说明了关于MDoSystemlnit()825的示范性信息。
表#1
MDoSystemInit
描述
核实并初始化系统环境信息
原型
int MDoSystemInit(void);
参数
无
返回值
如成功则0,否则为非零出错代码。
函数库接口API
应用程序接口800包括多个函数库接口组件。API接口实例化可以通过使用MDoLibraryOpen()830来达成。使用该函数而获得的实例化函数库接口句柄可以用于其后的API调用。在该应用程序终结之前,MDoLibraryClose()840可以被调用以释放该句柄。图9说明了通过使用MDoLibraryOpen()830及MDoLibraryClose()840的一个示范性函数库接口初始化过程900。
表#2说明了关于MDoLibraryOpen()830的示范性信息。
表#2
MDoLibraryOpen
描述
初始化并返回一个APl函数库界面句柄
原型
MDOLIB_HANDLE MDoLibraryOpen(void)
参数
无
返回值
如成功,则返回函数库界面句柄,
否则为INVALID_MDOLIB_HANDLE。
也可参见
MDoLibraryClose()
表#3说明了关于MDoLibraryClose()840的示范性信息。
表#3
MDoLibraryClose
描述
释放由MDoLibraryClose()函数返回的与一个API函数库句柄相关联的系
统资源
原型
void MDoLibraryClose(MDOLIB_HANDLE hLib);
参数
hLib
[in]由MDoLibraryOpen返回的函数库句柄
返回值
无
也可参见
MDoLibraryOpen()
出错获取
一旦函数库已经成功地由MDolibraryOpen()830初始化并实例化,MDoGetLastError()820向应用程序提供关于最近一次发生出错的信息。
表#4说明了关于MDoGetLastError()820的示范性信息。
表#4
MDoGetLastError
描述
返回指定的函数库实例的最后一次出错值
原型
MDoErrorCode MDoGetLastError(MDOLIB_MANDLE hLib);
参数
hLib
[in]由MDoLibraryOpen返回的函数库句柄
返回值
MDoErrorCode数据类型可以被定义为一个32位的无符号整数,它既包含组件又包含出错代码。通常,获取的出错信息可能被设定在平台抽象API层。有鉴于此,此处所给的MDoErrorCode格式类似于由抽象层API所定义的AlErrorCode格式(参见附件A)。图10基于一个实施例说明了一个MDoErrorCode的示范性格式1000。
表#5说明了关于MDoGetLastError()820的示范性信息。
表#5
MDoErrorCode被定义为:
typedef unsigned long MDoErrorCode;
也可参见
MDoLibraryOpen(),MDoScanOpenO,MDoScanData(),
MDoScanUpdate()
示范性计算机代码#1通过调用一次MDoGetLastError()820说明了一个样本函数库的调用次序。
计算机代码#1
**MDOLIB_HANDLE hLib:MDOSCAN_HMFDLE hScanner;MDoErrorCode errCode;** |
hMDoLib=MDoLibraryOpen();if(hMDoLib==INVALID_MDOLIB_HANDLE){return(-1);}**hScanner=MDoScanOpen(hLib);if(hScanner==INVALID_MDOSCAN_HANDLE){errCode=MDoGetLastError(hLib);ReportError(errCode);MDoLibraryClose(hMDoLib);return(-1);}**MDoScanClose(hScanner);MDoLibraryClose(hMDoLib);** |
出错代码
一个由MDoGetLastError 820报告的出错代码包括两个部分:组件代码与出错代码。请参见附件A以获得更多信息。表#6列出了示范性出错代码及相应的组件代码。MDoGetLastError 820也返回设定于抽象函数库层的出错代码。应该注意,以下的列表仅仅出于说明的目的,不应该将其理解为在任何方式上具有限制性。
表#6
组件代码 | 出错代码 | 描述 |
MDO_ERROR_MODULE | MDOE_CFG_UNKNOWN_VARIABLE | 未知/无效配置变量名 |
ML_ERROR_MODULE | MLE_XFILE_ SEEK_MODE | 无效元文件寻找模式值 |
MLE_XFILE_SEEK_OOB | 无效元文件寻找地点 | |
MLE_XFILE_SIZE_OOB | 无效元文件大小 | |
MLE_PKG_INVALID FILE | 无效更新包文件 | |
MLE_PKG_INVALID_FORMAT | 无效更新包文件格式 | |
MLE_SDB_INVALID_POSITION | 无效SDB记录位置 | |
MLE_SDB_INVALID_STRUCTURE | 无效/损毁SDB记录结构 | |
MLE_SDB_RECORD_NOT_FOUND | SDB记录失踪。无法找到记录 | |
MLE_SDB_NO_INODES | SDB INode空间不够 | |
ML_ERROR_MODULE | MLE_SDB_NO_BLOCKS | SDB块空间不够 |
MLE_SDB_INVALID_OFFSET_SIZE | 无效SDB偏移 | |
MLE_SDB_BAD_INITIALIZE_PARAMS | 无效SDB初始化参数 | |
MLE_ME_INVALID_SUBTYPE | 无效次级记录ID值 | |
MLE_ME_INVALID_TYPE | 无效次级记录ID值 | |
MLE_ME_TYPE_NOT_FOUND | 未知次级记录ID值 | |
MLE_ME_VIRUS_NOT_FOUND | 失踪/无效病毒代码 | |
MLE_DBU_INVALID_COMMAND | 无效SDB更新命令 | |
MLE_ME_SMALL_VREC_ARRAY | 病毒记录阵列大小不佳 | |
MLE_ME_TOO_MANY_WVSELECT_BUCKET S | 未能添加新的SDB记录 | |
MLE_ME_BACKPTR_OVERFLOW | 未能更新SDB记录 |
扫描子系统API
应用程序接口800包括多个扫描子系统组件。扫描子系统API组件提供了数据/内容扫描及签名更新服务。其中包括MDoScanOpen()802、MDoScanClose()804、MDoScanVersion()806、MDoScanUpdate()810、及MDoScanData()808。MDoScanOpen()802用于扫描子系统对象实例化。MDoScanVersion()806提供扫描子系统及签名数据库版本信息。MDoScanUpdate()810运行签名数据库更新。MDoScanData()808运行恶意代码/内容数据扫描。图11基于一个实施例说明了扫描子系统API调用次序1100。
MdoScanOpen
表#7说明了关于MDoScanOpen()802的示范性信息。
表#7
描述
返回一个扫描子系统实例句柄
原型
MDOSCAN_HANDLE MDoScanOpen(MDOLIB_HANDLE hLib)
参数
hLib
[in]通过使用MDoLibraryOpen()函数而获得的函数库句柄
返回值
如成功,则返回扫描子系统实例句柄。
如出错,则为INVALID_MDOSCAN_HANDLE。
也可参见
MDoScanClose(),MDoScanData(),MDoScanUpdate(),
MDoLibraryOpen()
MdoScanClose
表#8说明了关于MDoScanClose()804的示范性信息。
表#8
描述
释放扫描子系统实例及相关联的系统资源
原型
void MDoScanClose(MDOSCAN_HANDLE hScan);
参数
hScan
[in]通过使用MDoScanOpen()函数而获得的扫描子系统句柄
返回值
无
也可参见
MDoScanOpen(),MDoScanData(),MDoScanUpdate()
MdoScanVersion
表#9说明了关于MdoScanVersion()806的示范性信息。
表#9
描述
从由MDoScanOpen()函数返回的一个扫描器句柄获得扫描子系统及签名版
本信息
原型
int MDoScanVersion(MDOSCAN_HANDLE hScan,
SVerlnfo* pVersion);
参数
hScan
[in]通过使用MDoScanOpen()函数而获得的扫描子系统句柄。
pVersion
[out]指向一个包含版本信息结构的指针
返回值
如成功则返回0,否则为-1。
也可参见
MDoScanOpen(),MDoScanClose(),MDoScanData(),
MDoScanUpdate()
示范性计算机代码#2说明一个样本版本信息结构。
计算机代码#2
/*版本信息由以下组成<device id>+<MDo>+<PD>+<SDB>例如:device id::″Win32TestPlatformRev05″MDo: 1mdo.pd: 2mdo.sdb: 32*/#define MDO_DEVID_MAX 32typedef struct{char szDevID[MDO DEVID MAX];/*device id*/unsigned int uMDoVer; /*版本*/uns igned int uEngVer; /*侦测逻辑(mdo.pd)version */unsigned int uSDbVer; /*签名数据库(mdo.sdb)version*/}SVerlnfo; |
由MdoScanVersion()806所报告的移动通信设备识别字符串是通过由AlDevGetInfo所返回的使用设备识别字符串而设定的(参见附件A)。
MdoScanData
表#10说明了关于MDoScanData()808的示范性信息。
表#10
描述
MDoScanData将从一个应用程序被调用以扫描一个特定的数据类型。调用应用程序指定了扫描的动作、扫描目标类型、一套用以访问数据的I/O函数、以及一个可选性回调函数。数据扫描的结果以一个调用函数提供的数据结构被返回。MDoScanData是重复加载的。
原型
int MDoScanData(MDOSCAN_HANDLE hScan,
SScanParam* pParam,
SScanResult* pResult);
参数
hScan
[in]从一次调用MDoScanOpen()函数而获得的扫描子系统句柄
pParam
[in]指向一个包含数据扫描参数的结构的指针
pResult
[out]指向一个包含数据扫描结果的结构的指针
返回值
如成功则返回0,否则为-1而且出错代码被设定
也可参考
MDoScanOpen(),MDoScanClose(),MDoScanVersion(),
MDoScanUpdate()
MdoScanUpdate
表#11说明了关于MDoScanUpdate()810的示范性信息。
表#11
描述
运行恶意代码/内容签名模式数据库(mdo.sdb)及侦测逻辑(mdo.pd)更新。
原型
int MDoScanUpdate(MDOSCAN_HANDLE hScan,
SUpdateParam* pParam);
参数
hScan
[in]通过使用MDoScanOpen()函数而获得的扫描句柄
pParam
[in]指向一个更新参数结构的指针,该结构包含一个用于更新取消/放弃及进程状态更新的回调函数指针
示范性计算机代码#3说明了更新参数结构被定义的方式
计算机代码#3
typedef struct SStatus struct{int iCurrent:int iTotal:}SStatus;typedef struct SUpdateParam_struct{void*pPrivate;int(*pfCal lBack)(void*pPrivate,int iReason,void*pParam);}SUpdateParam; |
调用应用程序可以在调用函数的时候设定函数指针及将要传递给函数的数据。请注意表#12。
表#12
回调原因(iReason) | 描述 |
MDO_UCB_STATUS | 执行回调以报告更新的状态。pParam指向SStatus结构。SStatus.iCurrent包含所收到数据的量,而iTotal以字节为单位报告全部更新数据的大小。 |
MDO_UCB_CANCEL | 执行回调以判明是否更新取消被设定。pParam指向NULL。 |
配置API
应用程序接口800包括多个配置组件。包括一套用于获取并指定扫描子系统设定的函数。这些函数的一个目标是向应用程序及扫描子系统提供集中型的运行时间配置访问。其配置数据储存于非易失性永续型数据储存体(如闪存,等)。
图12基于一个实施例说明了一个示范性配置API调用次序1200。如图所示,MDoConfigOpen()830返回一个句柄,该句柄将被传递到配置获取及指定的函数。MDoConfigClose()814被用于释放并关闭由MDoConfigOpen()812返回的配置句柄。MDoConfigSet()818用一个特定值设定了一个特定的配置变量,且MDoConfigGet()816为一个指定的变量返回一个配置值。在MDoConfigClose()814被调用前,由MDoConfSet()818所限定的配置变量设定并不一定被存放于永久储存体。
当存取和/或指定一个变量值的时候,应用程序可以调用配置打开、获取或设定,并立刻在其后添加关闭函数。
使用应用程序接口800配置组件而指定/获取的配置变量与值可以用以无效字符(’\0’)结尾的8位字符的字符串来代表。表#13列出了现有的各种配置变量。
表#13
配置变量 | 值/范例 | 描述 |
″ScanEnable″ | “0” | 关闭扫描 |
“1” | 启用扫描 |
"UpdateURL″ | "http://update.mcafeeacsa.com/504i″ | 更新签名的Base-URL(参见0部分) |
MdoConfigOpen
表#14说明了关于MDoConfigOpen()812的示范性信息。
表#14
描述
返回一个句柄到一个配置设定,然后将其传递给后面的调用MDoConfigGet()和MDoConfigSet().
原型
MDOCONFIG_HANDLE MDoConfigOpen(MDOLIB_HANDLE hLib);
参数
hLib
[in]通过使用MDoLibraryOpen()函数获得的函数库句柄
返回值
如成功则返回配置句柄。
如出错则返回INVALID_MDOCONPIG_HANDLE。
也可参见
MDoConfigClose(),MDoConfigSet(),MDoConfigGet()
MdoConfigClose
表#15说明了关于MDoConfigClose()814的示范性信息。
表#15
描述
释放系统资源并关闭配置句柄
原型
void MDoConfigClose(MDOCONFIG_HANDLE hConfig);
参数
hConfig
[in]由MDoConfigOpen()函数返回的配置句柄
返回值
无
也可参见
MDoConfigOpen(),MDoConfigSet(),MDoConfigGet()
MdoConfigGet
表#16说明了关于MDoConfigGet()816的示范性信息。
表#16
描述
为指定的配置变量获得一个配置值
原型
int MDoConfigGet(MDOCONFIG_HANDLE hConfig
char const* pszName,
char* pBuffer,
unsigned int uSize);
参数
hConfig
[in]由MDoConfigOpen()函数返回的配置句柄
pszName
[in]以NULL-终止的配置变量名称
pBuffer
[out]配合所指定变量的以NULL-终止的配置设定/值
uSize
[in]以字节计算的pBuffer长度
返回值
成功则返回0,否则为-1。
也可参见
MDoConfigOpen(),MDoConf igClose(),MDoConf igSet()
MdoConfigSet
表#17说明了关于MDoConfigSet()818的示范性信息。
表#17
描述
为指定的配置变量设定一个值
原型
int MDoConfigGet(MDOCONFIG_HANDLE hConfig
char const* pszName,
char const* pszValue);
参数
hConfig
[in]由MDoConf igOpen()函数所返回的配置句柄
pszName
[in]以NULL-终结的配置变量名称
pszValue
[int]配合所指定变量的以NULL-终结的新的配置设定/值
返回值
如成功则返回0,否则为-1
也可参见
MDoConfigOpen(),MDoConfigClose(),MDoConfigGet()
为便于扫描的应用程序/扫描子系统通信
如前所述,应用程序可与扫描子系统进行信息通信以方便扫描子系统进行扫描。这一通信可通过上面所描述的API得到便利。上述的信息可与被扫描的数据类型及与此类扫描相关联的时间安排有关。更多关于上述API达成此结果方式的描述将在下文作阐述。
扫描参数(SscanParam)
调用应用程序可以通过使用SScanParam结构向扫描子系统提供一个扫描参数。包含于扫描参数的信息向扫描子系统提供:
1)扫描子系统的动作类型(例如iAction),
2)扫描数据类型(例如需要扫描的应用数据的类型-iDataType),
3)指向扫描目标的数据指针(例如pPrivate),
4)获取数据大小(以字节为单位)的函数(例如pfGetSize),
5)重置扫描数据大小的函数(例如pfSetSize),
6)扫描子系统用于获取一个扫描数据块的函数(例如pfRead),
6)用于向扫描数据写入的函数(例如pfWrite),以及
7)扫描子系统状态/进程报告的回调函数(例如pfCallBack)。
示范性计算机代码#4说明了一个数据扫描参数的结构。
计算机代码#4
typedef struct SScanParam struct{int iAction;int iDataType;void* pPrivate;unsigned int(*pfGetSize)(void*pPrivate);int (*pfSetSize)(void*pPrivate,unsigned int uSize);unsigned int(*pfRead)(void*pPrivate,unsigned int uOffset,void*pBuffer,unsigned int uCount);unsigned int(*pfWrite)(void*pPrivate,unsigned int uOffset,void const*pBuffer,unsigned int uCount);int (*pfCallBack)(void*pPrivate,int iReason,SCBArg const*pCBArg);}SSCanParam; |
扫描动作(iAction)
扫描动作指定了在被提供的应用数据上要运行的扫描的类型。表#18说明了各种不同的示范性扫描动作。
表#18
扫描动作ID | 描述 |
MDO_SA_SCAN_ONLY | 扫描子系统运行扫描并报告发现的恶意代码。不进行任何修复。 |
MDO_SA)_SCAN_REPAIR | 在运行扫描之后,包含恶意代码的对象将被修复。 |
扫描数据类型(iDataType)
调用应用程序可以通过使用这一变量向扫描子系统通知应用数据类型以及格式。
图13说明了各种不同的示范性应用数据类型1300,应用程序能够将其通过API向扫描子系统进行传送。Ur1-字符串的格式可以符合统一资源定位器(RFC 1738)规格。Email-字符串的格式可以符合互联网电子邮件地址格式(RFC 822)规格。缺省的域可以设置为任何所需的域。另外,电话号码字符串可以包括数字字符’0’至’9’,以及’#’与’*’字符。
扫描数据指针/句柄(pPrivate)
另外会提供一个指向一个应用扫描对象的指针(或句柄)。扫描子系统并不一定使用该数据指针/句柄运行直接的内存I/O。数据指针/句柄被传递回调用函数以通过使用调用函数所指定的I/O函数进行读/写。
扫描数据大小(pfGetSize)
当前的函数由扫描子系统用于从调用应用程序处获得扫描目标数据的大小(以字节为单位)。
扫描数据调整大小(fSetSize)
该函数由扫描子系统用于请求调用应用程序调整被修复/清洗的应用数据至一个给定的大小(以字节为单位)。这一函数可以与扫描并修复/删除选项同时使用。
扫描数据读取函数(pfRead)
该即时函数可由扫描子系统使用,用于从调用应用程序读取一个指定量的应用数据。
扫描数据写入函数(pfWrite)
这是一个可选的参数,可由扫描子系统使用,用于向扫描对象写入一个指定量的应用数据以作为修复过程的一部分。如扫描动作被设定为修复或删除,则这个函数指针可以进行设定。
回调函数(pfCallBack)
如被指定,扫描子系统通过以下表格内所描述的信息调用该指定函数。如果返回的是一个负返回值,则回调函数放弃扫描过程。表#19阐述了一个示范性的回调代码列表。
表#19
回调原因ID | 描述 |
MDO_CB_DETECTED | 向调用应用程序通知在扫描对象中已经侦测到一个恶意代码。回调数据参数’arg’被设定为指向SCBArg结构。 |
MDO_CB_CLEAN_READY | 向调用应用程序通知被识别的恶意软件可以被清除/修复。回调数据参数’varg’被设定为指向SCBArg结构。 |
示范性的计算机代码#5说明了一个扫描子系统的回调结构。
计算机代码#5
typedef struct SCBArg_struct{text_t const* pszName; /*被侦测恶意软件的名称*/text_t const* pszVariant; /*被侦测恶意软件的变量名*/unsigned int uType; /*恶意软件类型*/}SCBArg; |
扫描结果(SScanResulf)
对象扫描的结果,即被侦测到的恶意软件信息,包含于由调用应用程序所提供的SScanResult结构被返回至调用应用程序。该SScanResult结构包含一个指向一个包含扫描结果信息结构的指针,以及一个指向一个被用于移除扫描结果资源函数的指针。用于存放扫描结果的内存由扫描子系统进行分配,并由调用pfDeleteResult指针所指向的函数所释放。
示范性计算机代码#6说明了一个样本调用次序。
计算机代码#6
int ScanAppData(...){SScanResult scanResult;**if(MDoScanData(hScanner,&scanParam,&scanResult) ==0){**scanResult.pfFreeResult(&scanResult);}**} |
示范性计算机代码#7说明了一个被侦测到的恶意代码/内容信息结构。
计算机代码#7
typedef struct SDetected struct{struct SDetected_struct*pNext;/*指向下一个被发现的恶意软件 |
*//*如在名单末尾则为NULL*/text_t const*pszName; /*被侦测到的恶意软件名称*/text_t const*pszVariant; /*被侦测到的恶意软件的变量名*/unsigned int uType; /*被侦测到的恶意软件类型*/unsigned int uBehavior; /*指定严重性的位-域*//*等级及行为级别*/}SDetected; |
示范性计算机代码#8说明了一个扫描结果结构。
计算机代码#8
typedef struct SScanResult_struct{int iNumDectected; /*所发现的恶意软件数目*/SDetected* pList; /*被侦测到的恶意软件名单*//*用于释放被报告扫描结果的函数ptr*/void (*pfFreeResult)(struct SScanResult struct*pResult);} SScanResult; |
严重性等级与行为级别(uBehavior)
图14基于一个示范性实施例,它表明了包括在SDetect结构内的含有恶意软件严重度标志及应用程序行为级别的位-域变量1400。
表#20阐述了一个示范性恶意软件的严重性级别列表。
表#20
严重度标志 | 描述 |
MDO_SC_USER | 所侦测到的恶意软件对用户有害。 |
MDO_SC_TERMINAL | 所侦测到的恶意软件对设备有害。 |
如被扫描过的应用数据包含对移动通信设备用户有害的恶意软件,则扫描子系统设定MD_SC_SER标志。如果对移动通信设备本身有害,MDO_SC_TERMINAL标志被设定。如果其对用户和移动通信设备都有害,则MDO_SC_USER与MDO_SC_TERMINAL标志都被设定。
应用程序行为级别指定了对侦测到包含恶意软件的应用数据采取什么样的措施。表#21列出了行为级别的各种值及应用程序采取的相应行动。
表#21
行为级别 | 描述 |
MDO_BC_LEVELO | 以警告加以处理。该严重性级别可被分配给先前被认为是恶意的数据。 |
MDO_BC_LEVEL1 | 在处理前提示用户。询问用户是否他/她希望应用程序处理该数据。 |
MDO_BC_LEVEL2 | 不处理该数据。 |
MDO_BC_LEVEL3 | 不处理该数据并不提示用户作移除。如果内容被储存于设备中,在移除前提示用户给予许可。 |
MD9O_BC_LEVEL4 | 不处理该数据,如果被储存将其自动移除。 |
当在被扫描的数据中发现多个恶意代码,调用应用程序预期将以最高级别的行为级别来做出反应。例如,如果MDO_BC_LEVELO和MDO_BC_LEVEL3都被报告,应用程序可以采取MDO_BC_LEVEL3的行动。
图15说明了一个图表1500,阐明了扫描子系统的扫描时机安排作为通过图13的各变量被识别出数据类型的一个函数而变动的方式。
签名数据库更新
如前所述,更新过程可被简化,以适应移动通信框架固有的有限带宽。更多关于可达成如此效果的各种不同方式将在下文作阐述。
被更新的组件
MDoScanUpdate函数随着更新服务提供了两个组件[例如恶意代码侦测逻辑(mdo.pd)与签名数据库(mdo.sdb)]。一个组件(例如mdo.pd)可包含侦测逻辑并在一个更新的版本出现时被完全更新。另一个组件(例如mdo.sdb)可以逐步更新直到n个先前的版本。对第二个组件的一次完全更新可在具有比n更早版本的移动通信设备上运行。例如,如果n被设定为5,而最新版本是20,那么会在一个比15更早版本的移动通信设备上进行一次完整的更新。
通过用户界面激活
图16说明了一个基于一个实施例的示范性的流程1600,它描述了由一个用户界面启动的更新方式。如图所示,病毒码的更新可以由移动通信设备用户通过一个用户界面1602选择一个菜单输入来启动。一旦用户选择了该更新菜单,一个更新应用程序1604被激活,并通过适当的更新界面函数1606连接到一台后端服务器。
通信协议
更新函数库可以通过HTTP协议与后端服务器进行通信。
更新过程
图17基于一个实施例,它说明了用于有效地更新一台移动通信设备的一个扫描子系统的一个方法1700。在一个实施例中,当前的方法1700可以在图3的架构300中的应用程序、扫描子系统与操作系统、以及图1和2中的系统中执行。但是应该注意,当前的方法1700可以在任何所需的环境中加以执行。
要初始化该过程,可以从至少一台移动通信设备向一台后端服务器发送一次更新请求。当然,在其他的实例中,更新可以不经过请求而发送。
在一个实施例中,更新可以由移动通信设备通过使用一个请求数据结构而进行请求。此数据结构还可以选择性地包括统一资源定位器(URL)变量、移动通信识别变量、应用程序接口版本变量、侦测逻辑变量、签名版本变量、和/或部分号码变量等变量。
表#22说明了可以用于此目的的一个示范性的URL。
表#22
<BASE-URL>?dev=<DEV-ID>&mdo=<MDO-VER>&eng=<ENG-
VER>&sdb=<SDB-VER>&chk=<CHUNK>
以下是一个描述上述URL变量的表格:
变量 | 描述 |
<BASE-URL> | 更新通过使用MDoConfigGet函数而获得的服务器URL(参见0部分) |
<DEV-ID> | 移动通信设备识别码;由AlDevGetlnfo函数返回 |
<MDO-VER> | MDo API版本 |
<ENG-VER> | 侦测逻辑,mdo.pd,版本 |
<SDB-VER> | 签名数据库,mdo.sdb,版本 |
<CHUNK> | 更新软件包块,或部分、号码;最初为1(=1) |
表#23说明了一个符合上述描述的URL的一个特定范例。
表#23
http://update.mcafeeacsa.com/504i?dev=X504i05&mdo=2&eng=3&sdb=56&chk=1
以上表#23的URL指定了基本-URL″http://update.mcafeeacsa.com/504i″,″X504i05″为设备识别码,API版本2,恶意代码侦测逻辑版本3,以及签名数据库版本56。应该注意,当移动通信设备最初联络后端服务器的时候,其″数据块″或部分、号码可以设定为1。此外,基本-URL可以通过让MDoConfigGet API使用″UpdateURL″配置变量而获得。
在收到请求之后,后端服务器通过将已储存的恶意代码侦测逻辑及签名数据库版本同在URL中编码存放的版本信息相比较,从而决定哪个更新包需要被下载。
如果不需要进行更新,后端会返回一个无内容的回应。在操作1701中,移动通信设备收到了作为第一部分的回应。如果决定第一部分包括上述的无内容回应(参见决定1702),方法1700被中止,这是因为没有更新需要下载。该特征对适应移动通信框架中固有的有限带宽是有益的。
另一方面,如果一个更新包的第一个部分被返回,方法1700将在收到更新的第一部分之后(或者有可能的是与之同时)继续接收更新的其它部分。请注意操作1704-1708。应该注意第一部分可伴随着整包的大小及部分的计数信息。
在下载剩余的更新部分时,可以对所下载URL的部分号码作限定。表#24说明了一个指定部分号码″3″的URL的特定范例。
表#24
http://update.mcafeeacsa.com/504i?dev=X504i05&mdo=2&eng=3&sdb=56&chk=3
在一个实施例中,可以决定更新的完整性。相应地,在是否被核实了更新的完整性的基础上,可以有条件地将更新安装于扫描子系统中。
作为一种选择,更新的完整性可以通过使用一个签名来确定。此签名可以同更新的一个部分一起接收(即一个最后部分)。之后,可以将该签名同使用更新的每个部分生成的另一签名进行比对。请注意操作1710。
在一个实施例中,签名可以通过一个RSA私钥生成并在移动通信设备上使用一个包含于更新内的相应公钥进行认证。签名核实及生成可通过使用一个特定的认证函数库作进一步运行。
假设完整性被核实,任何由扫描子系统运行的扫描会被停顿或中止。请注意操作1712。应该注意该停顿是可选择的。
接下来,可将更新安装于扫描子系统。请注意操作1714。在实例中任何扫描被停顿的地方,一旦更新被安装于扫描子系统,之后可以继续使用扫描子系统进行扫描。参见操作1716。
为适应移动通信框架中固有的有限带宽,更新的某些部分的大小可以最小化。此外,可以对更新的部分进行压缩。
在另一个实施例中,可将每个更新部分的格式设计为能够适应移动通信框架中固有的有限带宽。更多关于此类格式的信息将在下文作阐述。
表#25说明了一个下载更新各部分的示范性格式。
表#25
MPKG<part1><part2>***<partn>[signature:sig-len][sig-len:4] |
在表#25中列出的上述部分的每一个部分在表#26中作如下定义。
表#26
X-ContentLength:<part-length>rnX-ContentName:<part-name>rnX-Name:<component-name>rnX-Version:<component-versjon>rnrn[part-data:part-length bytes] |
每个部分由一个文件头和数据组成。文件头可以指明更新的相关部分的一个识别码、更新的相关部分的一段长度等等。此外,文件头可以指定包含的数据名称与长度,并用一个额外的CR+LF对将其与实际数据相分隔。表#27列出了与文件头相关联的示范性数据/内容的名称。
表#27
组件名称 | 描述 |
"pd" | 侦测逻辑 |
″sdb″ | 签名数据库更新 |
表#28说明了一个示范性的更新包。
表#28
MPKGX-ContentLength:6423rnX-ContentName:update3O_32rnX-Name:sdbrnX-Version:32rnrn<SDB update binary:6423><signature:sig-len><sig-len:4> |
抽象函数库API
如前所述,提供了一个独立于平台的系统及相关的方法以用于一台移动通信设备。其包括一独立于平台的扫描子系统,可同用于扫描的移动通信设备的操作系统进行通信。另外还提供了一个独立于平台的应用程序接口,为操作系统及扫描子系统之间提供界面帮助。独立于平台的应用程序接口包括了一个抽象函数库,用于将独立于平台的扫描子系统接驳于移动通信设备及相关联的操作系统。
通过该设计,扫描子系统可以独立于平台,并由此能在任何类型的操作系统/移动通信设备的组合上加以执行。
在一个实施例中,抽象函数库可以支持系统初始化、函数库初始化、出错函数、内存分配、输入/输出(I/O)、数据认证、同步、超文本传输协议、共享内存、系统时间、设备信息、以及调试。更多关于上述应用程序接口的一个可选择实例的示范性信息将在附件A中进行阐述。
虽然上文描述了不同的实施例,但容易理解,它们仅通过范例的形式被提出,而不具有限制性。因此,某个特定实例的应用广度与范围不应该由任何以上所描述的示范性实例所限制,而应只根据权利要求及与其有同等效果的陈述所确定。
附件A
当前的应用程序接口(API)包括以下子系统:
· 系统初始化
· 函数库初始化
· 出错函数
· 堆内存分配
· 永续性内存/储存体I/O
· 数据认证
· 同步对象(信标)
· HTTP API
· 共享内存
· 系统时间
· 设备信息
· 调试
本附件中还描述了一套定义于抽象函数库(AL)层的C-语言定义,供在API函数库中使用。
系统初始化
依赖于平台/系统的启动初始化是由AlLibrarySysInit()函数运行的。该函数的设计使其能从先前描述过的MDoSystemlnit()函数被调用。
AlLibrarySysInit
描述
运行依赖于系统的初始化
原型
int AlLibrarySysInit(void);
参数
无
返回值
成功则返回0,否则为-1。
函数库初始化
平台抽象API函数库通过使用Al InitLibrary()函数被初始化。在一个抽象API函数被调用之前,抽象函数库就被初始化一次。当AlCleanupLibrary()函数被调用时,由Al InitLibrary()获得并初始化的系统资源被释放。
AlInitLibrary
描述
运行函数库初始化。该函数将由MDoLibraryOpen()函数调用。
原型
int AlInitLibrary(void);
参数
无
返回值
成功则返回0,否则为-1。
AlCleanupLibrary
描述
释放由Al InitLibrary()函数获得的系统资源。该函数将由先前指定的MDoLibraryClose()函数调用。
原型
void AlCleanupLibrary(void);
参数
无
返回值
无
出错函数
AL函数库包含了一套出错函数,该套函数用于设定并获取有关特定任务/线程的出错代码。抽象层实现者应负责设定适当的出错代码及组件代码。
AlGetLastError
描述
返回调用任务/线程的最后出错代码值。函数通过使用AlSetLastError()函数设定返回的值。
AlErrorCode数据类型是使用一个32-位无符号值进行内部表达的数据类型。
原型
AlErrorCode AlGetLastError(void);
参数
无
返回值
调用线程/任务的最后出错值设定是通过使用AlSetLastError()函数完成的
AlSetLastError
描述
为调用线程/任务设定最后出错代码
原型
void AlSetLastError(AlErrorCode errorCode);
参数
errorCode
[in]32-位出错代码值
返回值
无
出错/状态代码
组件 | 出错 | |||
代码 | 值 | 代码 | 值 | 描述 |
N/A | 00h | ALE_SUCCESS | 0000h | 成功;非出错 |
N/A | 00h | ALE_CANCELLED | 0001h | 操作取消;非出错 |
AL_SYS_MODULE | 01h | ALE_BAD_FILE_MODE | 2711h | 无效的文件模式 |
ALE_FILE_OPEN | 2712h | 打开失败 | ||
ALE_FILE_WRITE | 2713h | 向文件写入失败 | ||
ALE_BAD_SEEK_MODE | 2714h | 无效的寻找模式 | ||
ALE_SEEK_OOB | 2715h | 无效的寻找地址 |
ALE_FILE_SEEK | 2716h | 向一个特定的文件地址寻找失败 | ||
ALE_FILE_READ | 2717h | 读取失败 | ||
ALE_FILE_WRITE_MODE | 2718h | 无效的写入模式存取 | ||
ALE_SIZE_OOB | 2719h | 无效的文件大小;更改文件大小失败 | ||
ALE_SEM_CREATE | 271A h | 信标创建失败 | ||
ALE_SEM_OPEN | 271B h | 信标打开失败 | ||
ALE_SEM_WAIT | 271C h | 信标等待失败 | ||
AL_HTTP_MODULE1000h-1FFFh) | 11h | ALE_HTTP_OK | 11C8 h | ″200 ok″;非出错 |
ALE_HTTP_NO_CONTENT | 11CC h | ″204无内容″;非出错 | ||
ALE_HTTP_FORBIDDEN | 1193h | ″403禁止″;禁止的URL | ||
ALEJ3TTP_NOT_FOUND | 1194h | ″404未找到″;无效的URL | ||
ALE_HTTP_REQ_TIMEOUT | 1198h | ″408请求逾时″;GET/PUT请求逾时 | ||
ALE_HTTP_GW_TTMEOUT | 11F8h | ″504网关逾时″;从网关接收信息失败 | ||
AL_COM_MODULE(2000h-20FFh) | 20h | ALE_COM_TEMP_ERROR | 2000h | 临时性通信出错 |
ALE_COM_PERM_ERROR | 2001h | 永久性通信出错 | ||
AL_DA_MODULE(2100h-20F | 21h | ALE_DA_CERT_EXPIRED | 2100h | 证书过期 |
ALE_DA_CERT_BAD | 2101h | 证书无效 |
Fh) | ALE_DA_CERT_UNSUPPORTED | 2102h | 证书不受支持 | |
ALE_DA_CERT_REVOKE | 2103h | 证书被取消 | ||
ALE_DA_CERT_EXPIRED | 2104h | 证书过期 | ||
ALE_DA_S CA_CERT_EXPIRED | 2105h | 次CA证书过期 | ||
ALE DA RCA CERTEXPIRED | 2106h | 根CA证书过期 | ||
ALE_DA_RCA_CERT_DISABLED | 2107h | 根CA证书失效 | ||
ALE_DAJ2ERT_UNKNOWN | 2108h | 未知证书 | ||
ALE_DA_DATA_ALTERED | 2109h | 数据被更改 |
上述的表格列出了一套AL组件及出错代码。一个使用AlSetLastError函数报告的出错是一个由组件代码与出错代码组合而形成的32-位的值。设定在AL层次的出错通过使用MDoGetLastError函数而获取,以方便在出错发生时采取适当的行动。
堆内存分配
抽象层提供了一个堆内存分配API,以方便一个调用应用程序(例如″调用函数″)来动态地分配所需的内存。被分配的内存被假设为可在全局范围内共享,即可以由多个应用/任务所存取。AlMemAlloc()与AlMemFree()API函数提供了堆内存的分配与取消分配。
函数 | 描述 |
void*AlMemAlloc(unsigned intuSize) | 分配一块动态内存 |
void AlMemFree(void*ptr) | 使用AlMemAlloc释放被分配的内存 |
AlMemAlloc
描述
分配一个指定量的动态内存并向该内存返回一个指针。被分配的内存块可直接由调用函数(即调用应用程序)所存取,而不需要一个特别的操作(即内存锁定)。
原型
void*AlMemAlloc(unsigned int uSize);
参数
uSize
[in]以字节计算的需分配内存的量
返回值
一个指向被分配内存的指针。如请求失败或请求大小为零则返回NULL。
也可参见
AlMemFree()
AlMemFree
描述
释放由AlMemAlloc()函数返回的动态内存块
原型
void AlMemFree(void*pData);
参数
pData
[in]指向一个需释放内存块的指针
返回值
无
也可参见
AlMemAlloc()
永续性储存体I/O
永续性储存体(例如:闪存)存取是通过使用一个文件I/O API进行的。参见下文:
名称 | 描述 |
AL_FILE_HANDLE AlFileOpen(char const*pszFilename,int iMode) | 打开,如有必要则创建,特定的文件并返回其句柄 |
void AlFileClose(AL_FILE_HANDLE_hFile) | 关闭由AlFileOpen()返回的文件句柄 |
unsigned int AlFileSeek(AL_FILE_HANDLE_hFile) | 重新定位文件偏移量 |
Unsigned int AlFileRead(AL_FILE_HANDLE hFile,void*pBuffer,unsigned int uSize) | 从一个文件句柄读取 |
unsigned int Al Fi leWrite(AL_FILE_HANDLE hFile,void const*pBuffer,unsigned int uSize) | 向一个文件句柄写入 |
int AlFileSetSize(AL_FILE_HANDLE hFile,unsigned int uSize) | 调整文件大小 |
int AlFileStat(char const*pszFi lename,ALStatBuf*pStat) | 获得文件信息 |
文件句柄类型AL_FILE_HANDLE被定义为:
typedef struct AL_FILE_HANDLE_struct
{
} *AL_FILE_HANDLE;
而一个用来指定一个无效的永续性储存体句柄INVALID_AL_FILE_HANDLE的常量被定义为:
#define INVALID_AL_FILE_HANDLE((AL_FILE_HANDLE)O)
文件状态缓冲区类型AlStatBuf被定义为
typedef struct AlStatBuf_struct
{
unsigned long ulsize;
unsigned long ulTime;
}AlStatBuf;
AlFileOpen
描述
打开指定的文件并返回其句柄。
原型
AL_FILE_HANDLE AlFileOpen(const char*pszFilename,
int iMode);
参数
pszFilename
[in]文件名/路径字符串
iMode
[in]文件存取模式
AL_OPEN_READ 打开文件供读取
AL_OPEN_WRITE 打开文件供读取与写入
返回值
如成功则返回文件句柄,否则为INVALID_AL_FILE_HANDLE。
也可参见
AlFileClose(),AlFileRead(),AlFileWrite()
AlFileClose
描述
关闭并释放与特定文件句柄相关联的系统资源
原型
void AlFileClose(AL_FILE_HANDLE hFile);
参数
hFile
[in]由AlFileOpen()返回的文件句柄
返回值
无
也可参见
AlFileOpen(),AlFileRead(),AlFileWrite()
AlFileSeek
描述
重新定位读/写文件偏移量
原型
long AlFileSeek(AL_FILE_HANDLE hFile,
long lOffset,
int iWhence);
参数
hFile
[in]一个打开文件句柄
lOffset
[in]与iWhence指示符有关的文件偏移量
iWhence
[in]初始位置。可能的值有:
AL_SEEK_SET 偏移量参数指定绝对文件偏移量。换言之,自文件开始处的偏移
量。
MJ_SEEK_CUR 指定相对偏移量-偏移量参数从当前文件偏移量指定文件偏
移量。
AL_SEEK_END 从文件末尾指定文件偏移量。
返回值
如成功则返回文件偏移量,否则为-1L
也可参见
AlFileOpen(),AlFileClose(),AlFileRead(),AlFileWrite()
AlFileRead
描述
从一个文件读取一块数据
原型
unsigned int AlFileRead(AL_FILE_HANDLE hFile,
void*pBuffer,
unsigned int uSize);
参数
hFile
[in]一个打开文件句柄
pBuffer
[out]数据缓冲区
uSize
[out]需读取数据的量
返回值
如成功则返回读取的字节数,否则为-1
也可参见
AlFileOpen(),AlFileClose(),AlFileSeek(),AlFileWrite()
AlFileWrite
描述
向一个文件写入一块数据
原型
unsigned int AlFileWrite(AL_FILE_HANDLE hFile,
void cons t*pBuffer,
unsigned int uSize);
参数
hFile
[in]一打开文件句柄
pBuffer
[int]存有需写入数据的缓冲区
uSize
[out]需写入数据的量
返回值
如成功则返回写入数据的量,否则为-1
也可参见
AlFileOpen(),AlFileClose(),AlFileSeek(),AlFileRead()
AlFileSetSize
描述
调整打开文件大小。
对于不支持本地文件调整大小的平台,抽象函数库在Al FileClose()函数被调用时通过限定储存在每个文件开始处的大小信息执行该功能。
原型
unsigned int AlFileSetSize(AL_FILE_HANDLE hFile,
unsigned int uSize);
参数
hFile
[in]引用一个带有写入模式的打开文件的句柄
uSize
[out]以字节计算的新文件的长度
返回值
如成功则返回0,否则为-1
也可参见
AlFileStat()
AlFileStat
描述
获取文件大小及创建时间戳。
对于不提供本地文件大小和/或时间戳信息获取方法的平台,抽象函数库通过在每个文件的开始处储存信息执行本函数。
原型
int AlFileStat(char const*pszFilename,
AlStatBuf*pStat);
参数
pszFilename
[in]获取信息的文件名称
pStat
[out]指向一个用于返回大小与时间戳信息结构的指针。该结构包含以下域:
typedef struct AlStatBuf struct
{
unsigned long ulSize; /*以字节计算的大小*/
unsigned long ulTime; /*创建时间*/
}AlStatBuf;
返回值
如成功则返回0,否则为-1
数据认证
平台抽象API包括一套用于认证数据的函数。数据认证API用于认证所下载的恶意软件的签字数据库。
一旦调用函数通过使用AlDaOpen函数获得了一个认证对象,会对AlDaVerify作出一次调用,以核实所提供的数据。
AlDaGetSignerlnfo()用于获取一个签字者信息。AlDaClose()用于关闭并释放数据认证句柄及相关的系统资源。以下是一个示范性的数据认证API
函数 | 描述 |
AL_DA_ANDLE AlDaOpen(const void *pSig,unsigned int uSigSize) | 从一个给出的签名/证书中获得数据认证句柄 |
void AlDaClose(AL_DA_HANDLE hHandle) | 关闭通过使用AlDaOpen()获得的数据认证句柄 |
AlDaVeri fy(AL_DA_HANDLE hDA,int (*pfRead)(void*,void*,int),void*pPrivate) | 数据认证函数。调用函数通过回调函数提供一个数据获取方法 |
int AlDaGetSignerlnfo(AL_DA_HANDLE hDA,DaSignerlnfo*pDSI) | 获取签名者信息 |
由AlDaOpen()函数返回的数据认证句柄被定义为
ALHANDLE(AL_DA_HANDLE);
#define INVALID_AL_DA_HANDLE((AL_DA_HANDLE)0)
签名者信息结构被定义为
#define MAX_DA_SIGNER_NAME 128
typedef struct DaSignerlnfo_struct
{
char szSignerName[MAX DA_SIGNER_NAME];
}DaSignerlnfo;
AlDaOpen
描述
创建并返回一个数据认证句柄。
原型
AL_DA_HANDLE AlDaOpen(const void*pSig,
unsigned int uSigSize);
参数
pSig
[in]指向一个签名数据的指针
uSigSize
[in]以字节计算的签名大小
返回值
如成功则返回数据认证句柄,否则为INVALID_AL_DA_HAWDLE
也可参见
AlDaClose(),AlDaUpdate(),AlDaVerify(),
AlDaGetSignerlnfo()
AlDaClose
描述
释放用于一个数据认证句柄的系统资源。
原型
void AlDaClose(AL_DA_HANDLE hDa);
参数
hDa
[in]由AlDaOpen返回的数据认证句柄。
返回值
无
也可参见
AlDaOpen(),AlDaUpdate(),AlDaVerify(),
AlDaGetSignerinfo()
A1DaVerify
描述
运行数据认证
原型
intAlDaVerify(AL_DA_HANDLE hDa,
int(*pfRead)(void*,void*,int),
int iTotalSize,
void*pPrivate);
参数
hDa
[in]数据认证句柄
pfRead
[in]调用函数的回调函数,用以读取数据(参见)。如有一个出错它会返回-1,如再无数据可读则返回0,否则返回所读取数据的量,并返回到AlDaVerify函数。预计该函数将被多次调用。
iTotalSize
[in]需核实的全部数据大小。
pPrivate
[in]由pfRead回调函数传递的调用函数的私有数据。
返回值
如应用数据得到认证则为0,否则为-1。
也可参见
AlDaOpen(),AlDaClose(),AlDaGetSignerlnfo()
以下为一个样本数据读取的回调函数。
int ReadCallback(void*pPrivate, void*pData, int iSize){**return iDataRead;} |
AlDaGetSienerlnfo
描述
获取数据认证签名者信息
原型
int AlDaGetSignerMo(ALJDAJHANDLE hDA,
DaSignerlnfo*pDSI);
参数
hDa
[in]数据认证句柄
pDSI
[out]指向一个含有签名者信息的结构的指针
返回值
如成功获得签名者信息则返回0,否则为-1
也可参见
AlDaOpen(),AlDaClose(),AlDaVerify()
同步对象
资源同步及控制是通过使用一个信标来达到的。抽象函数库内包括一套用以创建、打开、关闭并限定一个信标对象的函数。以下是一个示范性信标APl。
函数 | 描述 |
AL_SEM_HANDLE AlSemCreate(char cons t*pszName) | 创建一个被命名的信标并返回其句柄 |
AL_SEM_HANDLE AlSemOpen(char const*pszName) | 返回一个句柄到一个现存的信标 |
void AlSemClose( | 关闭信标句柄;引用计数减少一位,且如果 |
AL_SEM_HANDLE hHandle) | 计数达到零则所引用的信标会被释放。 |
int AlSemGet(AL_SEM_HANDLE hHandle) | 获得一个信标 |
int AlSemRelease(AL_SEM_HANDLE hHandle) | 释放一个信标 |
AlSemCreate
描述
创建一个被命名的信标,设定内部计数为零,并返回其句柄。
原型
AL_SEM_HANDLE AlSemCreate(char const*pszName);
参数
pszName
[in]信标名称字符串
返回值
如成功则返回信标句柄,否则为INVALro_AL_SEM_HANDLE
也可参见
AlSemOpen(),AlSemClose(),AlSeraGet(),AiSemRelease()
AlSemOpen
描述
返回一个句柄至一个现存的信标。
原型
AL_SEM_HANDLE AlSemOpeh(char const*pszName);
参数
pszName
[in]信标名称
返回值
如成功则返回信标句柄,否则为INVALID_AL_SEM_HANDLE
也可参见
AlSemCreate(),AlSemClose(),AlSemGet(),AlSemRelease()
AlSemClose
描述
关闭并释放与特定信标句柄相关联的系统资源。信标使用/引用计数也减少,且如计数达到零,被引用的信标对象会被销毁。
原型
void AlSemClose(AL_SEM_HANDLE hSem);
参数
hSem
[in]使用AlSemCreate()or AlSemOpen()而获得的信标句柄
返回值
无
也可参见
AlSemCreate(),AlSemOpen(),AlSemGet(),AlSemRelease()
AlSemGet
描述
获得指定的信标。如进入时内部计数大于零,其数值会减少一位并立即被返回。如进入时内部计数为零,调用被阻止,直到其它任务/线程调用AlSemRelease()从而使之大于零。
原型
int AlSemGet(AL_SEM_HANDLE hSem);
参数
hSem
[in]信标句柄
返回值
成功则返回0,否则为-1
也可参见
AlSemCreate(),AlSemOpen(),AlSemClose(),AlSemRelgase()
AlSemRelease
描述
释放信标,内部计数增加1
原型
int AlSemRelease(AL_SEM_HANDLE hSem);
参数
hSem
[in]信标句柄
返回值
成功则返回0,否则为-1
也可参见
AlSemCreate(),AlSemOpen(),AlSeraClose(),AlSemGet()
HTTP API
抽象函数库内包括一套函数,该套函数能通过使用一个调用函数提供的回调结构提供HTTP网络I/O。以下是一个示范性的HTTP API。
函数 | 描述 |
AL_HTTP_ANDLE AlHttpOpen(void) | 创建并返回一个HTTPI/O句柄 |
void AlHttpClose(AL_HTTP_HANDLE hHandle) | 关闭HTTP I/O句柄 |
int AlHttpExec(AL_HTTP_HANDLE hHandle,char const*pszMethod,char const*pszURL,AlHttpCallbacks*pHttpCb,void*pPrivate) | 运行GET或PUT操作 |
由AlHttpOpen()函数返回的HTTP句柄被定义为:
typedef struct AL_HTTP HANDLE_struct
{
}*AL_HTTP_HANDLE;
#define INVALID AL HTTP_HANDLE((ALJ3TTP_HANDLE)O)
HTTP回调结构AlHttpCallbacks被定义为:
typedef struct AlHttpCal lbacks_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);
}AlHttpCallbacks;
在以上HTTP回调结构中所给出的回调函数提供了以下各种功能:
pWrite 由系统HTTP函数库调用,以储存收到的HTTP请求数据。
pRead 用于获取申请数据,以便作为一个HTTP请求的一部分被发送。
pGet Size 提供带申请者的内容数据大小的HTTP函数库,″Content-Length″。
pSet Size 由HTTP函数库调用,以便在数据到位时向调用的应用程序通知收到的内容数据的大小。
AlHttpOpen
描述
创建并向HTTP函数库返回一个句柄。
原型
AL_HTTP_HANDLE AlHttpOpen(void);
参数
无
返回值
如创建一个HTTP实例失败,则返回INVALID_AL_HTTP_HMTDLE
也可参见
AlHttpClose()
AlHttpClose
描述
关闭并释放与一个HTTP句柄相关联的系统资源。
原型
void AlHttpClose(AL_HTTP_HANDLE hHTTP);
参数
hHTTP
[in]由AlHttpOpen()函数返回的HTTP函数库句柄。
返回值
无
也可参见
AlHttpClose()
AlHttpExec
描述
在指定的URL上执行一个HTTP方法(″GET″或″POST″),并带有可选择的文件头信息。
原型
intAlHttpExec(AL_HTTP_HANDLE hHTTP,
char const* pszMethod,
char const* pszURL,
AlHttpCallbacks* pHttpCb,
void* pPrivate);
参数
hHTTP
[in]由AlHttpOpen()函数返回的HTTP函数库句柄
pszMethod
[in]HTTP方法规格。HTTP″GET″或″POST″
pszURL
[in]作出HTTP请求所在地址的URL
pHttpCb
[in]指向一套调用函数指定的HTTP I/O函数的指针。HTTP函数库使用在
AlHttpCallbacks结构中指定的函数,以进行数据I/O
pPrivate
[in/out]指向一个调用函数数据的指针,该调用函数数据需传回在AlHttpCallbacks结构中指定的回调函数
返回值
成功则返回0,否则为-1
也可参见
AlHttpOpen(),AlHttpClose()
共享内存
存放函数库的共享对象的系统内存地址是通过使用AlShmAddress()函数而得到的。该共享信息区域在设备启动时间被分配/准备,而且为函数库的不同实例所引用。
AlShmAddress
描述
返回共享内存地址。
原型
void*AlShmAddress(void);
参数
无
返回值
如成功则返回共享内存的地址,否则为NULL
时间
AlTmGetCurrent()向调用函数提供以秒为单位的当前系统时间。
AlTmGetCurrent
描述
获得当前的系统时间。
原型
unsigned long AlTmGetCurrent(void);
参数
无
返回值
如成功,则返回自纪元(协调世界时00:00:00,1970年1月1日)以来的以秒为单位的时间。如出错,则返回((unsigned long)-1L)。
设备信息
AIDevGetInfo
描述
获取设备的特定信息。由此函数返回的设备识别字符串被API使用。
原型
int AlDevGetInfo(AlDeviceInfo*pDeviceInfo);
参数
pDevicelnfo
[out]指向设备信息的指针
AlDevicelnfo结构被定义为
#define AL_MAX_DEVICE_ID 32
typedef struct AlDeviceinfo struct
{
char szDeviceID[AL_MAX_DEVICE_ID];
}AlDevicelnfo;
识别字符串szDevicelD是一个独一无二的终端/设备识别码-它用来将一个特定的移动通信设备与所有其它的设备单独识别出来。此信息用于为移动通信设备构建一个恶意软件签名下载URL。它不能包含任何不允许在一个URL中出现的字符(即空格)。
返回值
成功则返回0,失败则为-1
调试
AlDbgQutput
描述
向一个调试控制台输出调试字符串。该函数是一个用于发布版本的零函数
原型
int AlDbgOutput(char const*pszOutput);
参数
pszOutput
[in]向调试控制台输出的字符串
返回值
成功则返回0,失败则为-1
Claims (25)
1、一种有效更新移动通信设备的扫描子系统的方法,其特征在于包括:
收到一次更新的第一部分,该更新经过改装而适用于移动通信设备的扫描子系统;
除了接收到所述更新的第一部分之外,收到所述更新的其它部分;和
将所述更新安装于所述扫描子系统。
2、如权利要求1所述的方法,其特征在于,还包括确定所述更新的完整性。
3、如权利要求2所述的方法,其特征在于,如果所述更新的完整性得到核实,则将所述更新安装于所述扫描子系统。
4、如权利要求2所述的方法,其特征在于,所述更新的完整性通过使用一个签名来确定。
5、如权利要求4所述的方法,其特征在于,所述签名与所述更新的一个部分一起收到。
6、如权利要求4所述的方法,其特征在于,所述签名同另一个由利用所述更新的每一个部分所生成的签名作比对。
7、如权利要求4所述的方法,其特征在于,所述签名仅与所述更新的其它部分中的最后一个一起收到。
8、如权利要求1所述的方法,其特征在于,所述更新的部分的大小被最小化。
9、如权利要求1所述的方法,其特征在于,所述更新的部分被压缩。
10、如权利要求1所述的方法,其特征在于,还包括确定所述第一部分是否为空。
11、如权利要求10所述的方法,其特征在于,在确定所述第一部分是否为空的基础上,有条件地接收所述更新的其它部分。
12、如权利要求1所述的方法,其特征在于,还包括暂停使用所述扫描子系统所进行的扫描。
13、如权利要求12所述的方法,其特征在于,还包括在所述更新被安装于扫描子系统中之后,使用所述扫描子系统重新开始扫描。
14、如权利要求1所述的方法,其特征在于,所述更新由所述移动通信设备请求。
15、如权利要求14所述的方法,其特征在于,所述更新由所述移动通信设备使用一个请求数据结构而请求。
16、如权利要求15所述的方法,其特征在于,所述请求数据结构包括一些变量,这些变量选自由统一资源定位器(URL)变量、移动通信识别码变量、应用程序接口版本变量、侦测逻辑变量、签名版本变量及部分号码变量组成的群组。
17、如权利要求15所述的方法,其特征在于,所述请求数据结构包括一些变量,这些变量选自包括统一资源定位器(URL)变量、移动通信识别码变量、应用程序接口版本变量、侦测逻辑变量、签名版本变量及部分号码变量的群组。
18、如权利要求1所述的方法,其特征在于,所述更新的每个部分包括一文件头。
19、如权利要求18所述的方法,其特征在于,所述文件头指示了所述更新的相关部分的一个识别码。
20、如权利要求18所述的方法,其特征在于,所述文件头指示了所述更新相关部分的长度。
21、如权利要求1所述的方法,其特征在于,所述移动通信设备包括蜂窝式电话。
22、一种计算机程序产品,用于有效地更新移动通信设备的扫描子系统,其特征在于包括:
用于接收一个更新的第一部分的计算机代码,该更新可以被改装以用于更新移动通信设备的扫描子系统;
用于接收除了所述更新的第一部分之外的其它部分的计算机代码;和
用于将所述更新安装于所述扫描子系统的计算机代码。
23、一种用于有效更新移动通信设备的扫描子系统的系统,其特征在于包括:
一后端服务器;和
一移动通信设备,可与所述后端服务器进行无线通信,以接收可改装用于更新所述移动通信设备的扫描子系统的一个更新的第一个部分,以及接收除了所述更新的第一部分之外该更新的其它部分,并将所述更新安装于所述扫描子系统。
24、一种通过使用后端服务器从而有效更新移动通信设备的一个描子系统的方法,其特征在于包括:
发送可改装而用于更新移动通信设备的扫描子系统一个的更新的第一部分;
发送除了所述更新的第一部分之外该更新的其它部分;
其中所述更新被安装于所述移动通信设备的所述扫描子系统。
25、一种用于更新移动通信设备的扫描子系统的方法,其特征在于包括:
发送要求一个更新的请求,所述更新可改装而用于更新移动通信设备的扫描子系统;
响应所述请求接收所述更新的第一部分;
确定所述第一部分是否为空;
如所述第一部分确定不为空,则接收除了所述更新的第一部分之外该更新的其它部分;
核实与所述更新相关的一个签名;
暂停使用所述扫描子系统进行的扫描;
如果所述签名得到核实,则将所述更新安装于所述扫描子系统;和
在所述更新被安装于所述扫描子系统之后,使用所述扫描子系统重新开始扫描。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US46388503P | 2003-04-17 | 2003-04-17 | |
US60/463,885 | 2003-04-17 | ||
US10/639,007 | 2003-08-11 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1981263A true CN1981263A (zh) | 2007-06-13 |
CN100524211C CN100524211C (zh) | 2009-08-05 |
Family
ID=38131597
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004800169936A Expired - Fee Related CN100524211C (zh) | 2003-04-17 | 2004-04-05 | 在移动通信框架内用于更新扫描子系统的更新系统与方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100524211C (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102067146A (zh) * | 2008-05-16 | 2011-05-18 | 赛门铁克公司 | 安全的应用程序流式传输 |
CN105204940A (zh) * | 2014-05-28 | 2015-12-30 | 中兴通讯股份有限公司 | 一种内存配置方法和装置 |
CN107257152A (zh) * | 2011-04-28 | 2017-10-17 | 佐尔循环公司 | 用于更新数据、操作参数和/或软件的系统 |
CN110311889A (zh) * | 2019-05-17 | 2019-10-08 | 中国电力科学研究院有限公司 | 一种验证智能配变终端app有效性的方法 |
-
2004
- 2004-04-05 CN CNB2004800169936A patent/CN100524211C/zh not_active Expired - Fee Related
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102067146A (zh) * | 2008-05-16 | 2011-05-18 | 赛门铁克公司 | 安全的应用程序流式传输 |
CN107257152A (zh) * | 2011-04-28 | 2017-10-17 | 佐尔循环公司 | 用于更新数据、操作参数和/或软件的系统 |
CN107257152B (zh) * | 2011-04-28 | 2021-04-09 | 佐尔循环公司 | 用于更新数据、操作参数和/或软件的系统 |
CN105204940A (zh) * | 2014-05-28 | 2015-12-30 | 中兴通讯股份有限公司 | 一种内存配置方法和装置 |
CN110311889A (zh) * | 2019-05-17 | 2019-10-08 | 中国电力科学研究院有限公司 | 一种验证智能配变终端app有效性的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN100524211C (zh) | 2009-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101248427B (zh) | 利用移动通信设备进行内容/上下文相关扫描的系统、方法 | |
CN1939042B (zh) | 用于移动通信框架内的独立平台扫描子系统应用程序接口 | |
CA2517485C (en) | Api system, method and computer program product for accessing content/security analysis functionality in a mobile communication framework | |
CA2517548C (en) | Update system and method for updating a scanning subsystem in a mobile communication framework | |
CN101714201B (zh) | 代码签字系统及方法 | |
WO2005084202A2 (en) | Execution of unverified programs in a wireless device operating environment | |
CN100524211C (zh) | 在移动通信框架内用于更新扫描子系统的更新系统与方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 1209 Orange Street, Wilmington, New Fort, 19801, Delaware, USA Co-patentee after: NTT Mobile Communications Patentee after: Mike Non Ltd. Address before: California, USA Co-patentee before: NTT Mobile Communications Patentee before: Mcafee Inc. |
|
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090805 |