CN1288548C - 基于类别创建驱动构件对象实现设备驱动程序多态的方法 - Google Patents

基于类别创建驱动构件对象实现设备驱动程序多态的方法 Download PDF

Info

Publication number
CN1288548C
CN1288548C CNB021594880A CN02159488A CN1288548C CN 1288548 C CN1288548 C CN 1288548C CN B021594880 A CNB021594880 A CN B021594880A CN 02159488 A CN02159488 A CN 02159488A CN 1288548 C CN1288548 C CN 1288548C
Authority
CN
China
Prior art keywords
classification
class
category
drive member
drive
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.)
Expired - Fee Related
Application number
CNB021594880A
Other languages
English (en)
Other versions
CN1512323A (zh
Inventor
苏翼鹏
陈榕
杜永文
梁宇洲
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ketai Century Science and Technology Co., Ltd., Shanghai
Original Assignee
KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI filed Critical KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI
Priority to CNB021594880A priority Critical patent/CN1288548C/zh
Priority to US10/747,058 priority patent/US7444646B2/en
Publication of CN1512323A publication Critical patent/CN1512323A/zh
Application granted granted Critical
Publication of CN1288548C publication Critical patent/CN1288548C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

一种基于类别创建驱动构件对象实现设备驱动程序多态的方法,首先定义并实现驱动构件类;然后,构件客户程序使用类别的智能指针创建驱动对象。本发明使操作***根据客户的指定,自动根据指定的构件类型选用相应的构件,进一步实现应用程序对驱动程序的多态访问。不需为每个种类的驱动实现一个伪驱动作为公用入口,而只要定义这种驱动类别的公用接口,属于这个类别的驱动都实现该公用接口;本发明只在创建驱动对象的过程中的动态绑定时才附加一些效率上的开销;一旦驱动对象创建出来,操作***把驱动对象所实现的公共接口返回给应用程序,应用程序就可以直接调用具体驱动对象的方法,没有额外的效率开销;实现了应用程序对驱动程序的多态访问。

Description

基于类别创建驱动构件对象实现设备驱动程序多态的方法
技术领域
本发明涉及一种基于类别创建驱动构件对象实现设备驱动程序多态的方法,特别是指一种操作***根据客户的指定,自动根据指定的构件类型选用相应的构件,进一步实现应用程序对驱动程序的多态访问的构件创建方法,属于计算机技术领域。
背景技术
在操作***中,真正的硬件驱动程序总是针对某一特定的硬件设备进行I/O访问,并向上层应用提供这一特定设备的访问接口。但对于驱动程序的使用者来说:他们大多数情况下并不关心使用的是什么设备,而只关心***上有没有这种类型的可用设备。例如:使用打印机的应用程序只关心机器上有没有打印机可以用,而不关心是使用的是并口打印机、串口打印机还是网络打印机,更不会去关心打印机的型号或品牌。因此,让使用打印机的应用程序去直接指定所要使用的打印机驱动程序的做法是不合理的。
为了解决这一问题,传统操作***中的做法是把驱动程序分层,参见图1,打印机驱动程序通常被分成三层:硬件I/O层3、打印驱动层2及应用接口层1。在应用接口层1,操作***实现一个伪打印驱动程序,目的是为上层应用程序提供一个标准的打印机接口,这样应用程序就可以在不需要关心打印机的具体型号的情况下使用它。下层具体的打印驱动程序在安装时再把自己注册到虚拟打印机的伪驱动程序中,这样虚拟打印机驱动可以把上层应用的打印请求转发给具体的打印驱动程序,执行相应的打印指令。
这种通过抽象接口(应用接口层1),根据接口引用到的实体对象(驱动程序)的不同而获取不同功能特征的特性,在面向构件(或面向对象)的技术里被称为多态。
通过这种多态特征,可以很好地解决应用程序与具体硬件隔离的问题。但由于传统操作***内核中并没有真正的组件对象模型(The ComponentObject Model,简称COM)去支持这种特征,使得这种模型存在以下两个问题:一是没有通用性,需要为每一类设备实现一个面向上层应用的伪驱动程序;二是由于需要接口层的转接,带来了额外的效率开销,有时还会增加不必要的数据拷贝。
在COM中,所有的构件都是以类标识(Class Identification,简称CLSID)作为构件类的唯一标识,每一个CLSID就对应了一个构件实现。
COM规范认为:将虚接口抽象出来,就实现了二进制的多态。但实际情况并不完全如此。构件客户端在使用构件时,还是需要指定构件服务器的CLSID来创建构件对象,指定CLSID实际上就是指定了构件的实现。
以上述的打印机模型为例:假设打印驱动程序都是构件化的,并且它们都实现了“打印机公共接口”;如果要求应用程序在创建驱动对象时指定CLSID,也就指定了用什么打印驱动程序,这样实际上依然达不到设备及驱动对应用程序透明的目的。
因此,把接口抽象出来只是实现了构件方法调用的多态性,并未实现构件创建的多态性。而一个构件的使用总要经过创建、调用、消亡这三个过程,只有实现了构件创建的多态性,才可以实现构件使用的多态。
发明内容
本发明的主要目的在于提供一种基于类别创建驱动构件对象实现设备驱动程序多态性的方法,操作***根据客户的指定,自动根据指定的构件类型选用相应的构件,进一步实现应用程序对驱动程序的多态访问。
本发明的目的是这样实现的:
一种基于类别创建驱动构件对象实现设备驱动程序多态性的方法,至少包括:
步骤1:定义并实现驱动构件类别,具体为:
步骤11:通过继承定义的构件类别定义构件类;
步骤12:根据构件的功能需求实现构件类;
步骤13:编译构件程序并自动注册构件类别;
步骤14:在构件类别中设定该类别的缺省的类标识;
步骤2:构件客户程序基于该驱动构件类别创建驱动对象,具体为:
步骤21:指定要创建驱动对象的驱动构件的类别标识;
步骤22:取该类别的缺省类标识;
步骤23:判断该类标识是否属于驱动程序类别,如果是,则执行步骤24;如果不是,则使用类标识创建出普通的构件对象,执行步骤26;
步骤24:使用类标识创建具体的驱动对象;
步骤25:从驱动对象查询出类别中的公用接口;
步骤26:返回该类别的公共接口。
上述的构件类别中CLSID的设定方法为:对构件类别及其所属的构件类进行注册,并将最后一个注册到构件类别中的CLSID作为该构件类别的缺省CLSID。
上述的构件类别中CLSID的设定方法还可以为:
步骤31:读入***构件类别注册文件中的类别注册信息;
步骤32:读取打包在对应的动态连接库文件资源段(Resource Section)中的构件元数据;
步骤33:在构件元数据中查找是否定义了新的类别,否则执行步骤35;
步骤34:把包括驱动构件类别标识的新的类别信息添加到类别注册信息中;
步骤35:在元数据中查找是否存在属于类别注册信息中构件类别的构件类,不存在,则执行步骤37;
步骤36:将包括驱动构件类别标识的构件类信息添加到相应的构件类别名下,并将该构件类作为该类别的缺省构件类;
步骤37:将修改后的类别注册信息写回到***类别注册文件中。
上述的构件类别中CLSID的设定方法又可以为:如果定义构件类别的动态连接库文件中有一个以上的构件类相应的构件类别,则使用最后一个属于该类别的构件类作为缺省类,否则返回失败信息。
本发明在定义并实现驱动构件类之前,还包括使用构件描述语言定义驱动的类别。
上述的驱动构件类允许定义一个或一个以上的接口。
本发明具有如下的优点:
1)不需为每个种类的驱动实现一个伪驱动作为公用入口,而只要定义这种驱动类别的公用接口,属于这个类别的驱动都实现该公用接口;
2)本发明只有在创建驱动对象的过程中的动态绑定时才需要附加一些效率上的开销;一旦驱动对象创建出来,操作***把驱动对象所实现的公共接口返回给应用程序,应用程序就可以直接调用具体驱动对象的方法,没有额外的效率开销;实现了应用程序对驱动程序的多态访问。
附图说明
图1为传统驱动模型的示意图;
图2为本发明基于构件类别的驱动模型示意图;
图3为本发明实现基于构件类别驱动程序创建的流程图。
具体实施方式
以下结合附图和具体的实施例对本发明作进一步的详细说明:
为了达到本发明的目的,设计的一个构件类别包含了一组公用接口,具体的某个驱动构件类(class)要属于这个类别,就必须继承该类别,并实现该类别包含的所有接口。构件类别本身没有实现代码,因此,构件类别也可以被称为抽象类或超类。
继承于构件类别的所有构件类(class)均实现构件类别中包含的所有接口,这也正是构件类别作为类别中所有构件类的公共入口点的技术基础。
参见图2,其为以打印驱动为例,用构件类别创建构件化驱动程序的模型示意图。
应用程序通过指定打印驱动类别来创建构件驱动,操作***为该应用程序创建出类别中缺省的打印驱动,然后把该打印驱动的接口返回给应用程序,应用程序就可以直接调用该打印驱动对象的接口方法来执行打印操作。
例如:在应用层,应用程序通过指定打印机类别,例如:HP LaserJet(一种类型的打印机),向操作***提出创建打该印驱动的请求。
操作***根据应用程序指定的HP LaserJet类别标识,找出该类别中缺省的构件(在示意图中为HP LasertJet),并创建出驱动构件对象。
创建对象成功后,操作***把对象的公共接口直接返回给应用程序。这样,应用程序调用的接口方法就是直接调用HP LasertJet驱动对象的接口方法,不再需要操作***的参与、转接了。
参见图3,具体的实现方法为:
首先定义驱动类别,例如在构件对象模块(Easy Component ObjectModel,简称ezCOM)的构件描述语言(Component Description Language,简称CDL)文件中使用构件描述语言定义的驱动类别,如:定义一个名称为“CatPrinter”的打印驱动类别,用具体的CDL语言描述如下:
 [uuid(02aff0b1-a887-4da7-bf2e-626af6165a56)]
category CatPrinter{
  interface IPrinter;
}
其中,
[uuid(02aff0b1-a887-4da7-bf2e-626af6165a56)]与现有的COM规范相同;表示该构件的属性信息;
category CatPrinter定义一个打印机类别CatPrinter;
interface IPrinter定义一个打印机接口Iprinter。
打印驱动类别CatPrinter包含了一个打印机接口IPrinter(关于接口的概念及定义方式请参见相关COM规范)。本发明中,一个类别中允许定义一个到多个接口。
定义构件类
如果某个驱动构件类要属于打印驱动类别CatPrinter,那么它必须继承该打印驱动类别CatPrinter,例如:HP LaserJet6L打印驱动构件的定义方式,以具体的CDL语言描述如下:
[uuid(9defd903-6443-4eed-b4e4-a 3020b448cb5),driver]
 class CHPLaserJet6L:CatPrinter{
    interface ILaserJet6L;
}
其中,
[uuid(9defd903-6443-4eed-b4e4-a3020b448cb5),driver]与现有的COM规范相同;表示该构件的属性信息;
class CHPLaserJet6L:CatPrinter定义一个打印机类CHPLasterJet6L
interface ILaserJet6L表示:定义一个打印机接口ILaserJet6L。
其中,类CHPLasterJet6L的定义本身包含了打印机接口ILaserJet6L,同时由于它继承了打印驱动类别CatPrinter,并且还包含了打印驱动类别CatPrinter中的打印机接口IPrinter。
此外,在构件类(class)前的驱动(driver)属性声明之中,说明了类CHPLaserJet6L是一个驱动程序。因此,CHPLaserJet6L还必须实现另外一个隐含的***接口:驱动接口Idriver;因为,驱动程序本身也是一个类别,操作***中所有以驱动(driver)属性定义的构件类都属于驱动程序类别CatDriver,驱动接口IDriver则包含在驱动程序类别CatDriver之中。
本实施例中,驱动程序类别CatDriver中包含了驱动接口IDriver。本实施例中所有驱动构件类都是从驱动程序类别CatDriver继承来的;其中,驱动程序类别CatDriver的定义如下:
[uuid(0000112d-0000-0000-C000-000000000066)]
category CatDriver {
    interface IDriver;
}
其中,
[uuid(0000112d-0000-0000-C000-000000000066)]与现有的COM规范相同;表示该构件的属性信息;
category CatDriver定义一个驱动设备类别CatDriver;
interface Idriver定义一个驱动设备接口Idriver;
驱动设备类别Idriver包含了一个驱动设备接口Idriver。本发明中,一个类别中允许定义一个到多个接口。
实现构件类
使用ezCOM 的CDL编译器编译定义驱动构件类别以及构件类的CDL文件,会产生构件源程序的框架。该框架中包含了构件类所有接口的方法,构件实现者需要根据构件的功能填写相应的实现代码。以Cprinter为例,就必须实现IPrinter、ILaserJet6L及IDriver三个接口中的所有方法。
编译构件程序并自动注册构件类别
实现代码完成后,需要对构件程序进行编译生成构件的动态连接库文件。构件类别CatPrinter会被自动添加到类别注册文件“category.cfg”之中,类CHPLasterJet69则会被添加到类别CatPrinter之中,同时也会被添加到构件类别CatDriver之中。
重复上述的过程,可以定义并实现多个属于对应的驱动构件类。
驱动构件程序编译生成后,可以通过编写构件客户应用程序来使用驱动程序提供的功能。构件客户程序可以通过使用类别的智能指针来创建驱动对象,例如:通过以C++语言描述的类别CatPrinter创建打印驱动对象的代码如下:
#import<printer.dll>
……
CatPrinterRef catPrinterRef;
hr=catPrinterRef.Instantiate();
if(FAILED(hr)){
 ……
}
……
客户程序创建驱动对象
驱动构件客户程序通过类别创建驱动对象的实现过程如下:
1)指定驱动构件类别标识(CATID)来创建驱动对象;
2)取该类别的缺省(default)CLSID;
3)判断该CLSID是否属于驱动程序类别(CatDriver);
4)使用CLSID创建具体的驱动对象;
5)从驱动对象查询出类别中的公用接口;
6)返回类别公共接口;
构件客户在得到上述的公共接口后,就可以调用这些公共接口的功能。
本发明中还包括构件类别中的缺省类标识(CLSID)的设定方法,具体的设定可以是下列的三种之一:
编译工具在编译构件程序时,可自动对构件类别及其所属的构件类进行注册,并且将最后一个注册到构件类别中的CLSID作为该构件类别的缺省CLSID。
使用专用的工具注册构件类别中的缺省类标识。
当编译生成构件程序的动态链接库(DLL)文件后,编译工具自动调用对构件进行注册。
在没有注册文件的情况下,可以使用定义构件类别的动态连接库文件。如果该文件中有一个以上的构件类属于该类别,则使用第一个属于该类别的构件类作为缺省类,否则返回失败。
最后应说明的是:以上实施例仅用以说明本发明而并非限制本发明所描述的技术方案;因此,尽管本说明书参照上述的各个实施例对本发明已进行了详细的说明,但是,本领域的普通技术人员应当理解,仍然可以对本发明进行修改或者等同替换;而一切不脱离本发明的精神和范围的技术方案及其改进,其均应涵盖在本发明的权利要求范围当中。

Claims (7)

1、一种基于类别创建驱动构件对象实现设备驱动程序多态的方法,其特征在于:至少包括:
步骤1:定义并实现驱动构件类别,具体为:
步骤11:通过继承定义的构件类别定义构件类;
步骤12:根据构件的功能需求实现构件类;
步骤13:编译构件程序并自动注册构件类别;
步骤14:在构件类别中设定该类别的缺省的类标识;
步骤2:构件客户程序基于该驱动构件类别创建驱动对象,具体为:
步骤21:指定要创建驱动对象的驱动构件的类别标识;
步骤22:取该类别的缺省类标识;
步骤23:判断该类标识是否属于驱动程序类别,如果是,则执行步骤24;如果不是,则使用类标识创建出普通的构件对象,执行步骤26;
步骤24:使用类标识创建具体的驱动对象;
步骤25:从驱动对象查询出类别中的公用接口;
步骤26:返回该类别的公共接口。
3、根据权利要求2所述的基于类别创建驱动构件对象实现设备驱动程序多态的方法,其特征在于:所述的构件类别中类标识的设定方法为:对构件类别及其所属的构件类进行注册,并将最后一个注册到构件类别中的所述类标识作为该构件类别的缺省类标识。
4、根据权利要求2所述的基于类别创建驱动构件对象实现设备驱动程序多态的方法,其特征在于:所述的构件类别中类标识的设定方法为:
步骤31:读入***构件类别注册文件中的类别注册信息;
步骤32:读取打包在对应的动态连接库文件资源段中的构件元数据;
步骤33:在构件元数据中查找是否定义了新的类别,否则执行步骤35;
步骤34:把包括驱动构件类别标识的新的类别信息添加到类别注册信息中;
步骤35:在元数据中查找是否存在属于类别注册信息中构件类别的构件类,不存在,则执行步骤37;
步骤36:将包括驱动构件类别标识的构件类信息添加到相应的构件类别名下,并将该构件类作为该类别的缺省构件类;
步骤37:将修改后的类别注册信息写回到***类别注册文件中。
5、根据权利要求2所述的基于类别创建驱动构件对象实现设备驱动程序多态的方法,其特征在于:所述的构件类别中类标识的设定方法为:如果定义构件类别的动态连接库文件中有一个以上的构件类相应的构件类别,则使用最后一个属于该类别的构件类作为缺省类,否则返回失败信息。
6、根据权利要求1所述的基于类别创建驱动构件对象实现设备驱动程序多态的方法,其特征在于:步骤13具体包括:
步骤131:对构件程序进行编译,生成构件动态连接库文件;
步骤132:将定义的构件类别及类别所包含的构件类进行注册。
7、根据权利要求1所述的基于类别创建驱动构件对象实现设备驱动程序多态的方法,其特征在于:在定义并实现驱动构件类之前,还包括使用构件描述语言定义驱动的类别。
8、根据权利要求1所述的基于类别创建驱动构件对象实现设备驱动程序多态性的方法,其特征在于:所述的驱动构件类允许定义一个或一个以上的接口。
CNB021594880A 2002-12-31 2002-12-31 基于类别创建驱动构件对象实现设备驱动程序多态的方法 Expired - Fee Related CN1288548C (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CNB021594880A CN1288548C (zh) 2002-12-31 2002-12-31 基于类别创建驱动构件对象实现设备驱动程序多态的方法
US10/747,058 US7444646B2 (en) 2002-12-31 2003-12-30 Method of creating drive component object and realizing device drive program multiplicity on basis of category

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB021594880A CN1288548C (zh) 2002-12-31 2002-12-31 基于类别创建驱动构件对象实现设备驱动程序多态的方法

Publications (2)

Publication Number Publication Date
CN1512323A CN1512323A (zh) 2004-07-14
CN1288548C true CN1288548C (zh) 2006-12-06

Family

ID=32739367

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB021594880A Expired - Fee Related CN1288548C (zh) 2002-12-31 2002-12-31 基于类别创建驱动构件对象实现设备驱动程序多态的方法

Country Status (2)

Country Link
US (1) US7444646B2 (zh)
CN (1) CN1288548C (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011150604A (ja) * 2010-01-22 2011-08-04 Fuji Xerox Co Ltd 情報処理装置、印刷プログラム及び印刷システム
JP5458974B2 (ja) * 2010-03-10 2014-04-02 富士ゼロックス株式会社 印刷システム及び環境調査プログラム
IN2013MU03243A (zh) * 2013-10-15 2015-07-17 Tata Consultancy Services Ltd
CN112416310B (zh) * 2019-08-22 2024-06-25 杭州萤石软件有限公司 一种扩充的面向对象软件开发工具包的功能扩展方法
CN112596794B (zh) * 2020-12-14 2023-06-06 深圳忆联信息***有限公司 驱动布署顺序的控制方法、装置、计算机设备及存储介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6209037B1 (en) * 1995-05-30 2001-03-27 Roy-G-Biv Corporation Motion control systems using communication map to facilitating communication with motion control hardware
US6205492B1 (en) * 1997-04-04 2001-03-20 Microsoft Corporation Method and computer program product for interconnecting software drivers in kernel mode
US6825941B1 (en) * 1998-09-21 2004-11-30 Microsoft Corporation Modular and extensible printer device driver and text based method for characterizing printer devices for use therewith

Also Published As

Publication number Publication date
US20040154026A1 (en) 2004-08-05
CN1512323A (zh) 2004-07-14
US7444646B2 (en) 2008-10-28

Similar Documents

Publication Publication Date Title
CN1303523C (zh) 图形用户界面修改方法及使用该方法的装置
CN1196995C (zh) 应用软件开发***及其方法、以及应用软件生成方法
CN1841298A (zh) 信息处理装置和方法,程序以及存储介质
CN1841307A (zh) 能够定制设备驱动程序的信息处理装置、方法和控制程序
CN1203404C (zh) 具有逐模块验证的完全迟缓链接
CN1282046C (zh) 图像形成设备、打包方法
CN1959640A (zh) 在软件包管理***将用户进程表示为软件包的***和方法
CN1256668C (zh) 运用Linux完成操作***自动安装的方法
CN1832476A (zh) 动态服务代理
CN101042645A (zh) 统一软件开发环境的方法、设备及***
CN1592227A (zh) 用于提供网格服务生存期管理的方法和***
CN1737779A (zh) 一种扩展外设的方法及***
CN1577322A (zh) 管理数据处理***中的应用文件的方法和装置
CN1441352A (zh) 信息处理装置、该信息处理装置的控制方法、存储媒体
CN1298503A (zh) 分布式***中的动态查找服务
CN1313926C (zh) 模板编译方法
CN1294501C (zh) 控制***中装置的控制方法
CN1904853A (zh) 一种嵌入式软件装载调试方法及其***
CN1288548C (zh) 基于类别创建驱动构件对象实现设备驱动程序多态的方法
CN1696910A (zh) 有效地打补丁
CN1731351A (zh) 一种用于网格计算的模型驱动方法
CN1975669A (zh) Xml语言描述的业务逻辑映射到应用语言的方法
CN1869926A (zh) 一种生成仿真设备面板的方法及***
CN1255744C (zh) 智能卡通用高速发卡机及其发卡方法
CN1245685C (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
ASS Succession or assignment of patent right

Owner name: SHANGHAI KETAI SHIJI TECHNOLOGY CO., LTD.

Free format text: FORMER OWNER: KETAI SHIJI SCIENCE AND TECHNOLOGY CO., LTD., BEIJING

Effective date: 20050527

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20050527

Address after: 201203 Shanghai city Pudong New Area Jing Road No. 498 building 17 layer 2

Applicant after: Ketai Century Science and Technology Co., Ltd., Shanghai

Address before: 100084, No. 6, No. 618, block B, innovation building, Tsinghua Science Park, Beijing, Haidian District

Applicant before: Ketai Shiji Science and Technology Co., Ltd., Beijing

C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20061206

Termination date: 20151231

EXPY Termination of patent right or utility model