用于移动通信框架内的独立平台扫描子系统应用程序接口的制作方法

文档序号:7606632阅读:195来源:国知局
专利名称:用于移动通信框架内的独立平台扫描子系统应用程序接口的制作方法
技术领域
本发明涉及移动通信设备的安全领域,具体地说,是关于扫描移动通信设备以侦测恶意软件。
背景技术
在过去的十年中,移动蜂窝式电话的数目与使用增长迅速。最近一段时期,引入了无线设备,它能将移动电话与个人数字助理(PDA)的功能相结合。可以预计,在未来一段时间内,随着新型蜂窝式电信标准(例如GPRS、UMTS及WAP)使得跨无线界面上的高速数据传输成为可能,这一领域将经历强劲的增长。
可以预计,无线通信平台将有可能遭受到所谓的恶意软件(malware),如病毒、特洛伊木马、计算机蠕虫(下文中统称为‘病毒’),以及其它干扰性/有害内容的侵袭;其侵害方式与现今个人计算机以及工作站所受侵害方式大致相同。事实上已经有多种移动电话病毒被确认。
为抵御病毒的袭击,必须在移动平台上布置安装防病毒软件,其方式与桌上型计算机环境的布置方式大致相同。多种不同的桌上型防病毒应用软件现已问世。这些应用软件的大部分依靠一种基本的扫描引擎,它会寻找可疑档案中是否存在预先确定的病毒签名。这些签名储存在一个数据库中,必须经常对其进行更新,以反映最新识别的病毒信息。
一般来说,用户们可以每隔一段时间通过互连网、从接收的电子邮件、或从一张光盘和软盘下载替换用数据库。用户们也需要时常更新软件引擎,以便于在发现新类型的病毒时利用最新的病毒侦测技术。
移动无线平台给软件开发商们(包括防病毒软件开发商)带来了一系列的问题。具体地,移动无线平台通常不像传统的桌面电脑那样被标准化。例如,移动无线平台可能安装多种类型的操作系统,而不是运行微软公司的视窗操作系统。诸如此类或其他标准化的缺乏,使得设计可运行于任何移动无线平台的反病毒软件复杂起来。

发明内容
本发明提供了一种用于移动通信设备的独立平台系统以及与之相关的方法。包括一能够通过无线网络通信的移动通信设备。该移动通信设备安装有一操作系统。与之相关联的有一独立平台扫描子系统与移动通信设备上的操作系统进行通信以达到扫描目的。还提供了一种独立平台应用程序接口,用于为操作系统以及扫描子系统提供接口。该独立平台应用程序接口包括一抽象库,该抽象库作为端口将独立平台扫描子系统安装到移动通信设备以及与之关联的操作系统。
在一个实施例中,应用程序可包括一邮件应用程序、一浏览器应用程序、一电话薄应用程序、一消息应用程序和/或Java应用程序。
在另一个实施例中,该抽象库可支持系统环境初始化、库初始化、出错函数、内存配置、输入/输出(I/O)、数据认证、同步对象、超文本传输协议、共享内存、系统时间、设备信息和/或调试。


图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的示范性信息。
表 #1MDoSystemInit描述核实并初始化系统环境信息原型int MDoSystemInit(void);
参数无返回值如成功则0,否则为非零出错代码。
函数库接口API应用程序接口800包括多个函数库接口组件。API接口实例化可以通过使用MDoLibraryOpen()830来达成。使用该函数而获得的实例化函数库接口旬柄可以用于其后的API调用。在该应用程序终结之前,MDoLibraryClose()840可以被调用以释放该句柄。图9说明了通过使用MDoLibraryOpen()830及MDoLibraryClose()840的一个示范性函数库接口初始化过程900。
表#2说明了关于MDoLibraryOpen()830的示范性信息。
表 #2MDoLibraryOpen描述初始化并返回一个API函数库界面句柄原型MDOLIB_HANDLE MDoLibraryOpen(void);参数无返回值如成功,则返回函数库界面句柄,否则为INVALID_MDOLIB_HANDLE。
也可参见MDoLibraryClose()表#3说明了关于MDoLibraryClose()840的示范性信息。
表 #3MDoLibraryClose描述释放由MDoLibraryClose()函数返回的与一个API函数库句柄相关联的系统资源原型void MDoLibraryClose(MDOLIB_HANDLE hLib);参数hLib[in]由MDoLibraryOpen返回的函数库句柄返回值无也可参见MDoLibraryOpen()出错获取一旦函数库已经成功地由MDoLibraryOpen()830初始化并实例化,MDoGetLastError()820向应用程序提供关于最近一次发生出错的信息。
表#4说明了关于MDoGetLastError()820的示范性信息。
表 #4MDoGetLastError描述返回指定的函数库实例的最后一次出错值原型MDoErrorCode MDoGetLastError(MDOLIB_HANDLE hLib);参数hLib[in]由MDoLibraryOpen返回的函数库句柄返回值MDoErrorCode数据类型可以被定义为一个32位的无符号整数,它既包含组件又包含出错代码。通常,获取的出错信息可能被设定在平台抽象API层。有鉴于此,此处所给的MDoErrorCode格式类似于由抽象层API所定义的AlErrorCode格式(参见附件A)。图10基于一个实施例说明了一个MDoErrorCode的示范性格式1000。
表#5说明了关于MDoGetLastError()820的示范性信息。
表 #5MDoErrorCode被定义为typedef unsigned long MDoErrorCode;也可参见MDoLibraryOpen(),MDoScanOpenO,MDoScanData(),MDoScanUpdate()示范性计算机代码#1通过调用一次MDoGetLastError()820说明了一个样本函数库的调用次序。
计算机代码 #1



出错代码一个由MDoGetLastError 820报告的出错代码包括两个部分组件代码与出错代码。请参见附件A以获得更多信息。表#6列出了示范性出错代码及相应的组件代码。MDoGetLastError 820也返回设定于抽象函数库层的出错代码。应该注意,以下的列表仅仅出于说明的目的,不应该将其理解为在任何方式上具有限制性。
表 #6


扫描子系统 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


由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

调用应用程序可以在调用函数的时候设定函数指针及将要传递给函数的数据。请注意表#12。
表 #12

配置API应用程序接口800包括多个配置组件。包括一套用于获取并指定扫描子系统设定的函数。这些函数的一个目标是向应用程序及扫描子系统提供集中型的运行时间配置访问。其配置数据储存于非易失性永续型数据储存体(如闪存,等)。
图12基于一个实施例说明了一个示范性配置API调用次序1200。如图所示,MDoConfigOpen()830返回一个句柄,该句柄将被传递到配置获取及指定的函数。MDoConfigClose()814被用于释放并关闭由MDoConfigOpen()812返回的配置句柄。MDoConfigSet()818用一个特定值设定了一个特定的配置变量,且MDoConfigGet()816为一个指定的变量返回一个配置值。在MDoConfigClose()814被调用前,由MDoConfSet()818所限定的配置变量设定并不一定被存放于永久储存体。
当存取和/或指定一个变量值的时候,应用程序可以调用配置打开、获取或设定,并立刻在其后添加关闭函数。
使用应用程序接口800配置组件而指定/获取的配置变量与值可以用以无效字符(’\0’)结尾的8位字符的字符串来代表。表#13列出了现有的各种配置变量。
表 #13

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 hConfigchar const* pszName,char* pBuffer,unsigned int uSize);
参数hConf[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 hConfigchar 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


扫描动作(iAction)扫描动作指定了在被提供的应用数据上要运行的扫描的类型。表#18说明了各种不同的示范性扫描动作。
表 #18

扫描数据类型(iDataType)调用应用程序可以通过使用这一变量向扫描子系统通知应用数据类型以及格式。
图13说明了各种不同的示范性应用数据类型1300,应用程序能够将其通过API向扫描子系统进行传送。Url-字符串的格式可以符合统一资源定位器(RFC 1738)规格。Email-字符串的格式可以符合互联网电子邮件地址格式(RFC 822)规格。缺省的域可以设置为任何所需的域。另外,电话号码字符串可以包括数字字符’0’至’9’,以及’#’与’*’字符。
扫描数据指针/句柄(pPrivate)另外会提供一个指向一个应用扫描对象的指针(或句柄)。扫描子系统并不一定使用该数据指针/句柄运行直接的内存I/O。数据指针/句柄被传递回调用函数以通过使用调用函数所指定的I/O函数进行读/写。
扫描数据大小(pfGetSize)当前的函数由扫描子系统用于从调用应用程序处获得扫描目标数据的大小(以字节为单位)。
扫描数据调整大小(pfSetSize)该函数由扫描子系统用于请求调用应用程序调整被修复/清洗的应用数据至一个给定的大小(以字节为单位)。这一函数可以与扫描并修复/删除选项同时使用。
扫描数据读取函数(pfRead)该即时函数可由扫描子系统使用,用于从调用应用程序读取一个指定量的应用数据。
扫描数据写入函数(pfWrite)这是一个可选的参数,可由扫描子系统使用,用于向扫描对象写入一个指定量的应用数据以作为修复过程的一部分。如扫描动作被设定为修复或删除,则这个函数指针可以进行设定。
回调函数(pfCallBack)如被指定,扫描子系统通过以下表格内所描述的信息调用该指定函数。如果返回的是一个负返回值,则回调函数放弃扫描过程。表#19阐述了一个示范性的回调代码列表。
表 #19

示范性的计算机代码#5说明了一个扫描子系统的回调结构。
计算机代码 #5

扫描结果(SScanResulf)对象扫描的结果,即被侦测到的恶意软件信息,包含于由调用应用程序所提供的SScanResult结构被返回至调用应用程序。该SScanResult结构包含一个指向一个包含扫描结果信息结构的指针,以及一个指向一个被用于移除扫描结果资源函数的指针。用于存放扫描结果的内存由扫描子系统进行分配,并由调用pfDeleteResult指针所指向的函数所释放。
示范性计算机代码#6说明了一个样本调用次序。
计算机代码 #6


示范性计算机代码#7说明了一个被侦测到的恶意代码/内容信息结构。
计算机代码 #7


示范性计算机代码#8说明了一个扫描结果结构。
计算机代码#8

严重性等级与行为级别(uBehavior)图14基于一个示范性实施例,它表明了包括在SDetect结构内的含有恶意软件严重度标志及应用程序行为级别的位-域变量1400。
表#20阐述了一个示范性恶意软件的严重性级别列表。
表 #20

如被扫描过的应用数据包含对移动通信设备用户有害的恶意软件,则扫描子系统设定MDO_SC_USER标志。如果对移动通信设备本身有害,MDO_SC_TERMINAL标志被设定。如果其对用户和移动通信设备都有害,则MDO_SC_USER与MDO_SC_TERMINAL标志都被设定。
应用程序行为级别指定了对侦测到包含恶意软件的应用数据采取什么样的措施。表#21列出了行为级别的各种值及应用程序采取的相应行动。
表 #21

当在被扫描的数据中发现多个恶意代码,调用应用程序预期将以最高级别的行为级别来做出反应。例如,如果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中的应用程序、扫描子系统与操作系统、以及图l和2中的系统中执行。但是应该注意,当前的方法1700可以在任何所需的环境中加以执行。
要初始化该过程,可以从至少一台移动通信设备向一台后端服务器发送一次更新请求。当然,在其他的实例中,更新可以不经过请求而发送。
在一个实施例中,更新可以由移动通信设备通过使用一个请求数据结构而进行请求。此数据结构还可以选择性地包括统一资源定位器(URL)变量、移动通信识别变量、应用程序接口版本变量、侦测逻辑变量、签名版本变量、和/或部分号码变量等变量。
表#22说明了可以用于此目的的一个示范性的URL。
表 #22<BASE-URL>?dev=<DEV-ID>&mdo=<MDO-VER>&eng=<ENG-VER>&sdb=<SDB-VER>&chk=<CHUNK>
以下是一个描述上述URL变量的表格

表#23说明了一个符合上述描述的URL的一个特定范例。
表 #23http://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的特定范例。
表 #24http://update.mcafeeacsa.com/504i?dev=X504i05&mdo=2&eng=3&sdb=56&chk=3在一个实施例中,可以决定更新的完整性。相应地,在是否被核实了更新的完整性的基础上,可以有条件地将更新安装于扫描子系统中。
作为一种选择,更新的完整性可以通过使用一个签名来确定。此签名可以同更新的一个部分一起接收(即一个最后部分)。之后,可以将该签名同使用更新的每个部分生成的另一签名进行比对。请注意操作1710。
在一个实施例中,签名可以通过一个RSA私钥生成并在移动通信设备上使用一个包含于更新内的相应公钥进行认证。签名核实及生成可通过使用一个特定的认证函数库作进一步运行。
假设完整性被核实,任何由扫描子系统运行的扫描会被停顿或中止。请注意操作1712。应该注意该停顿是可选择的。
接下来,可将更新安装于扫描子系统。请注意操作1714。在实例中任何扫描被停顿的地方,一旦更新被安装于扫描子系统,之后可以继续使用扫描子系统进行扫描。参见操作1716。
为适应移动通信框架中固有的有限带宽,更新的某些部分的大小可以最小化。此外,可以对更新的部分进行压缩。
在另一个实施例中,可将每个更新部分的格式设计为能够适应移动通信框架中固有的有限带宽。更多关于此类格式的信息将在下文作阐述。
表#25说明了一个下载更新各部分的示范性格式。
表 #25


在表#25中列出的上述部分的每一个部分在表#26中作如下定义。
表 #26

每个部分由一个文件头和数据组成。文件头可以指明更新的相关部分的一个识别码、更新的相关部分的一段长度等等。此外,文件头可以指定包含的数据名称与长度,并用一个额外的CR+LF对将其与实际数据相分隔。表#27列出了与文件头相关联的示范性数据/内容的名称。
表 #27

表#28说明了一个示范性的更新包。
表 #28


抽象函数库API如前所述,提供了一个独立于平台的系统及相关的方法以用于一台移动通信设备。其包括一独立于平台的扫描子系统,可同用于扫描的移动通信设备的操作系统进行通信。另外还提供了一个独立于平台的应用程序接口,为操作系统及扫描子系统之间提供界面帮助。独立于平台的应用程序接口包括了一个抽象函数库,用于将独立于平台的扫描子系统接驳于移动通信设备及相关联的操作系统。
通过该设计,扫描子系统可以独立于平台,并由此能在任何类型的操作系统/移动通信设备的组合上加以执行。
在一个实施例中,抽象函数库可以支持系统初始化、函数库初始化、出错函数、内存分配、输入/输出(I/O)、数据认证、同步、超文本传输协议、共享内存、系统时间、设备信息、以及调试。更多关于上述应用程序接口的一个可选择实例的示范性信息将在附件A中进行阐述。
虽然上文描述了不同的实施例,但容易理解,它们仅通过范例的形式被提出,而不具有限制性。因此,某个特定实例的应用广度与范围不应该由任何以上所描述的示范性实例所限制,而应只根据权利要求及与其有同等效果的陈述所确定。
附件 A当前的应用程序接口(API)包括以下子系统· 系统初始化· 函数库初始化· 出错函数· 堆内存分配· 永续性内存/储存体I/O· 数据认证· 同步对象(信标)· HTTP API· 共享内存· 系统时间· 设备信息· 调试本附件中还描述了一套定义于抽象函数库(AL)层的C-语言定义,供在API函数库中使用。
系统初始化依赖于平台/系统的启动初始化是由AlLibrarySysInit()函数运行的。该函数的设计使其能从先前描述过的MDoSystemlnit()函数被调用。
AlLibrarySysInit描述运行依赖于系统的初始化原型iht AlLibrarySysInit(void);
参数无返回值成功则返回0,否则为-1。
函数库初始化平台抽象API函数库通过使用Al InitLibrary()函数被初始化。在一个抽象API函数被调用之前,抽象函数库就被初始化一次。当AlCleanupLibrary()函数被调用时,由AlInitLibrary()获得并初始化的系统资源被释放。
AlInitLibrary描述运行函数库初始化。该函数将由MDoLibraryOpen()函数调用。
原型int AlInitLibrary(void);参数无返回值成功则返回0,否则为-1。
AlCleanupLibrary描述释放由AlInitLibrary()函数获得的系统资源。该函数将由先前指定的MDoLibraryClose()函数调用。
原型void AlCleanupLibrary(void);参数无返回值无出错函数AL 函数库包含了一套出错函数,该套函数用于设定并获取有关特定任务/线程的出错代码。抽象层实现者应负责设定适当的出错代码及组件代码。
AlGetLastError描述返回调用任务/线程的最后出错代码值。函数通过使用AlSetLastError()函数设定返回的值。
AlErrorCode数据类型是使用一个32-位无符号值进行内部表达的数据类型。
原型AlErrorCode AlGetLastError(void);参数无返回值调用线程/任务的最后出错值设定是通过使用AlSetLastError()函数完成的
AlSetLastError描述为调用线程/任务设定最后出错代码原型void AlSetLastError(AlErrorCode errorCode);参数errorCode[in]32-位出错代码值返回值无出错/状态代码



上述的表格列出了一套AL组件及出错代码。一个使用AlSetLastError函数报告的出错是一个由组件代码与出错代码组合而形成的32-位的值。设定在AL层次的出错通过使用MDoGetLastError函数而获取,以方便在出错发生时采取适当的行动。
堆内存分配抽象层提供了一个堆内存分配API,以方便一个调用应用程序(例如″调用函数″)来动态地分配所需的内存。被分配的内存被假设为可在全局范围内共享,即可以由多个应用/任务所存取。AlMemAlloc()与AlMemFree()API函数提供了堆内存的分配与取消分配。

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被定义为typedef struct AL_FILE_HANDLE_struct{} *AL_FILE_HANDLE;而一个用来指定一个无效的永续性储存体句柄INVALID_AL FILE_HANDLE的常量被定义为#define INVALID_AL_FILE_HANDLE((AL_FILE_HANDLE)0)文件状态缓冲区类型AlStatBuf被定义为typedef struct AlStatBuf_struct{unsigned long ulsize;unsigned long ulTime;}AlStatBuf;AlFileOpen描述打开指定的文件并返回其句柄。
原型AL_FILE_HANDLE AlFileOpen(const char* pszFilename,intiMode);参数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,ihtiWhence);参数hFile[in]一个打开文件句柄lOffset[in]与iWhence指示符有关的文件偏移量iWhence[in]初始位置。可能的值有AL_SEEK_SET 偏移量参数指定绝对文件偏移量。换言之,自文件开始处的偏移量。
MLSEEK_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]需读取数据的量返回值如成功则返回读取的字节数,否则为-l也可参见AlFileOpen(),AlFileClose(),AlFileSeek(),AlFileWrite()AlFileWrite描述向一个文件写入一块数据原型unsigned int AlFileWrite(AL_FILE_HANDLE hFile,void const*pBuffer,unsigned int uSize);
参数hFile[in]一打开文件句柄pBuffer[int]存有需写入数据的缓冲区uSize[out]需写入数据的量返回值如成功则返回写入数据的量,否则为-1也可参见AlFileOpen(),AlFileClose(),AlFileSeek(),AlFileRead()AlFileSetSize描述调整打开文件大小。
对于不支持本地文件调整大小的平台,抽象函数库在AlFileClose()函数被调用时通过限定储存在每个文件开始处的大小信息执行该功能。
原型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

由AlDaOpen()函数返回的数据认证句柄被定义为ALHANDLE(AL_DA_HANDLE);#define INVALID AL DA HANDLE((AL DA HANDLE)0)签名者信息结构被定义为#define MAX_DA_SIGNER_NAME 128typedef 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(),AlDaGetSignerlnfo()AlDaVerify描述运行数据认证原型intAlDaVer ify(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()以下为一个样本数据读取的回调函数。

AlDaGetSienerlnfo描述获取数据认证签名者信息原型int AlDaGetSignerMo(ALJDAJHANDLE hDA,DaSignerlnfo *pDSI);参数hDa[in]数据认证旬柄pDSI[out]指向一个含有签名者信息的结构的指针返回值如成功获得签名者信息则返回0,否则为-1也可参见AlDaOpen(),AlDaClose(),AlDaVerify()同步对象资源同步及控制是通过使用一个信标来达到的。抽象函数库内包括一套用以创建、打开、关闭并限定一个信标对象的函数。以下是一个示范性信标API。


AlSemCreate描述创建一个被命名的信标,设定内部计数为零,并返回其句柄。
原型AL_SEM_HANDLE AlSemCreate(char const* pszName);参数pszName[in]信标名称字符串返回值如成功则返回信标句柄,否则为INVALro_AL_SEM_HANDLE也可参见AlSemOpen(),AlSemClose(),AlSeraGet(),AlSemRelease()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(),AlSemRelease()AlSemRelease描述释放信标,内部计数增加1原型int AlSemRelease(AL_SEM_HANDLE hSem);参数hSem[in]信标句柄返回值成功则返回0,否则为-1也可参见AlSemCreate(),AlSemOpen(),AlSeraClose(),AlSemGet()HTTP API抽象函数库内包括一套函数,该套函数能通过使用一个调用函数提供的回调结构提供HTTP网络I/O。以下是一个示范性的HTTP API。

由AlHttpOpen()函数返回的HTTP句柄被定义为typedef struct AL_HTTP HANDLE_struct{} *AL_HTTP_HANDLE;#define INVALID_AL_HTTP_HANDLE((ALJ3TTP_HANDLE)0)HTTP回调结构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回调结构中所给出的回调函数提供了以下各种功能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请求所在地址的URLpHttpCb[in]指向一套调用函数指定的HTTP I/O函数的指针。HTTP函数库使用在AlHttpCallbacks结构中指定的函数,以进行数据I/OpPrivate[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)。
设备信息AlDevGetInfo描述获取设备的特定信息。由此函数返回的设备识别字符串被API使用。
原型int AlDevGetInfo(AlDeviceInfo* pDeviceInfo);参数pDevicelnfo[out]指向设备信息的指针AlDevicelnfo结构被定义为#define AL_MAX_DEVICE_ID 32typedef struct AlDevicelnfo struct{charszDeviceID[AL_MAX_DEVICE_ID];}AlDevicelnfo;识别字符串szDevicelD是一个独一无二的终端/设备识别码-它用来将一个特定的移动通信设备与所有其它的设备单独识别出来。此信息用于为移动通信设备构建一个恶意软件签名下载URL。它不能包含任何不允许在一个URL中出现的字符(即空格)。
返回值成功则返回0,失败则为-1调试AlDbgQutput描述向一个调试控制台输出调试字符串。该函数是一个用于发布版本的零函数。
原型int AlDbgOutput(char const* pszOutput);参数pszOutput[in]向调试控制台输出的字符串返回值成功则返回0,失败则为-权利要求
1.一种用于移动通信设备的独立平台系统,其特征在于包括一移动通信设备,能够通过无线网络通信,并包括一安装于其上的操作系统;一独立平台扫描子系统,为扫描目的而与所述移动通信设备的操作系统进行通信;和一独立平台应用程序接口,为所述操作系统以及所述扫描子系统提供连接,该独立平台应用程序接口包括一抽象库,该抽象库作为端口将独立平台扫描子系统提供给所述移动通信设备以及与之关联的操作系统。
2.如权利要求1所述的系统,其特征在于,所述应用程序包括邮件应用程序。
3.如权利要求1所述的系统,其特征在于,所述应用程序包括浏览器应用程序。
4.如权利要求1所述的系统,其特征在于,所述应用程序包括电话薄应用程序。
5.如权利要求1所述的系统,其特征在于,所述应用程序包括消息应用程序。
6.如权利要求1所述的系统,其特征在于,所述应用程序包括Java应用程序。
7.如权利要求1所述的系统,其特征在于,所述移动通信设备包括蜂窝电话。
8.如权利要求1所述的系统,其特征在于,所述抽象库支持系统初始化。
9.如权利要求1所述的系统,其特征在于,所述抽象库支持库初始化。
10.如权利要求1所述的系统,其特征在于,所述抽象库支持出错函数。
11.如权利要求1所述的系统,其特征在于,所述抽象库支持内存配置。
12.如权利要求1所述的系统,其特征在于,所述抽象库支持内存输入/输出。
13.如权利要求1所述的系统,其特征在于,所述抽象库支持数据认证。
14.如权利要求1所述的系统,其特征在于,所述抽象库支持同步对象。
15.如权利要求1所述的系统,其特征在于,所述抽象库支持共享内存。
16.如权利要求1所述的系统,其特征在于,所述抽象库支持系统时间。
17.如权利要求1所述的系统,其特征在于,所述抽象库支持超文本传输协议。
18.如权利要求1所述的系统,其特征在于,所述抽象库支持设备信息。
19.如权利要求1所述的系统,其特征在于,所述抽象库支持调试。
20.如权利要求1所述的系统,其特征在于,所述抽象库支持系统初始化、库初始化、出错函数、内存配置、输入/输出、数据认证、同步对象、超文本传输协议、共享内存、系统时间、设备信息以及调试。
21.一种用于移动通信设备的平台独立的方法,其特征在于,包括利用一装有操作系统的移动通信设备并通过无线网络进行通信;利用一独立平台扫描子系统进行扫描,该子系统可与所述移动通信设备的操作系统进行通信;利用一独立平台应用程序接口连接所述操作系统和所述扫描子系统;其中所述独立平台应用程序接口包括一抽象库,该抽象库作为端口将所述独立平台扫描子系统提供给所述移动通信设备以及与之关联的操作系统。
22.一种用于移动通信设备的独立平台计算机程序产品,其特征在于,包括利用一装有操作系统的移动通信设备并通过无线网络进行通信的计算机代码;利用一独立平台扫描子系统进行扫描的计算机代码,该子系统可与所述移动通信设备的操作系统进行通信;以及利用一独立平台应用程序接口连接所述操作系统和所述扫描子系统的计算机代码;其中所述独立平台应用程序接口包括一抽象库,该抽象库作为端口将所述独立平台扫描子系统提供给所述移动通信设备以及与之关联的操作系统。
全文摘要
提供了一种用于移动通信设备的独立平台系统以及与之相关的方法。包括一能够通过无线网络通信的移动通信设备。该移动通信设备安装有一操作系统。与之相关联的有一独立平台扫描子系统与移动通信设备上的操作系统进行通信以达到扫描目的。还提供了一种独立平台应用程序接口,用于为操作系统以及扫描子系统提供接口。该独立平台应用程序接口包括一抽象库,该抽象库作为端口将独立平台扫描子系统安装到移动通信设备以及与之关联的操作系统。
文档编号H04M3/00GK1939042SQ200480016985
公开日2007年3月28日 申请日期2004年4月5日 优先权日2003年4月17日
发明者维克托·古内索夫, 达维德·利本齐, 迈克尔·C·帕克, 浦川安孝, 石井宪司, 藤田正德 申请人:迈克非公司, Ntt移动通讯公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1