一种硬件设备状态自适应的方法及装置
技术领域
本发明涉及计算机驱动领域,特别涉及一种硬件设备状态自适应的方法及装置。
背景技术
驱动程序(Device Driver)全称为“设备驱动程序”,是硬件的一部分,一般由硬件开发商提供,当安装新硬件时,驱动程序是一项不可或缺的重要元件。凡是安装一个原本不属于电脑中的硬件设备时,***会要求安装对应的驱动程序,将新的硬件与电脑***连接起来。
驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,相当于硬件与操作***的接口,操作***只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。
设备驱动程序用来将硬件本身的功能告诉操作***,完成硬件设备电子信号与操作***及软件的高级编程语言之间的互相翻译。当操作***需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。驱动程序提供了硬件到操作***的一个接口以及协调二者之间的关系,而因为驱动程序有如此重要的作用,驱动程序也被形象的称为“硬件和***之间的桥梁”。
无驱设备指***默认支持的一些设备类,操作***为支持的USB设备类提供类驱动程序,操作***中包含了这些设备类的驱动程序及安装文件,实现了设备类规范中所述的设备类通用功能。各类驱动程序均作为该类中所有设备的客户端驱动程序。例如,如果所连接的USB设备属于一个操作***支持的类,则将自动加载类驱动程序,无需其他驱动程序即可保证设备正常工作。硬件供应商无需再为支持的设备类编写驱动程序。比如Microsoft支持的设备类包括蓝牙类、人机接口设备(HID)类、智能卡类等。
HID(Human Interface Device,人机接口设备)主要指的是一些实现人与主机进行交互的设备,如键盘、鼠标、游戏杆等,但是HID设备不一定非要是这些人机交互设备,只要是符合HID设备级定义规范要求的都可以认为是HID设备。Windows操作***自带了HID类的类驱动程序Hidclass.sys。
日常使用硬件的过程中,经常存在因兼容性、其他软件或驱动程序影响、没有或没有正确安装驱动程序、驱动程序丢失或损坏以及病毒等因素的影响导致硬件无法正常使用,这给用户的使用带来了极大的困扰。
INF(Device INFormation File)是Microsoft公司为硬件设备制造商发布其驱动程序推出的一种描述设备安装信息的文件格式,是Windows可以找到硬件设备的驱动并正确安装的关键所在。INF文件中包含硬件设备的信息或脚本以控制硬件操作,它用特定语法的文字来说明要安装的设备类型、生产厂商、型号、要拷贝的文件、拷贝到的目标路径,以及要添加到注册表中的信息等,通过读取和解释这些内容,Windows便知道应该如何安装驱动程序,INF文件一般存储在C:/Windows/INF文件夹中。
USB协议为USB设备定义了一套描述设备功能和属性的有固定结构的描述符,包括标准的描述符即设备描述符、配置描述符、接口描述符和端点描述符,他们通常被保存在USB设备的固件程序中。USB设备通过描述符反映自己的设备特性。每个USB设备只有一个设备描述符,由一个或多个配置组成。设备描述符用于说明设备的总体信息(如制造商标识号ID、产品ID等),并指明其所含的配置的个数。一个USB设备可以包含一个或多个配置,每个配置对应一个配置描述符,配置描述符用于说明USB设备中各个配置的特性,如配置所含接口的个数等。配置描述符中又定义了该配置里面有多少个接口,每个接口对应一个接口描述符,接口描述符用于说明USB设备中各个接口的特性,如接口所属的设备类及其子类等。端点是USB设备中的实际物理单元,用以描述端点的属性以及各个端点的位置。端点作为通信管道的终点,有四种类型:批量(Bulk)、控制(Contor1)、中断(Interrupt)和同步(Isochronous),HID类设备只有控制端点和中断端点。
设备的接口描述符中描述了类标识信息,USB协议根据功能进行划分,为不同的类定义不同的值(十六进制),如音频类 0x01、人机接口类(HID) 0x03、智能卡类 0x0B等。
发明内容
有鉴于此,本发明提供了一种自动加载设备驱动的方法。
一种自动加载设备驱动的方法,所述方法用于自适应地在操作***中加载设备驱动,所述方法至少包括如下步骤:
步骤1:将设置有类标识的硬件设备与主机电连接;
步骤2:操作***自动检测新接入的所述设置有类标识的硬件设备;
步骤3:操作***读取所述硬件设备内的所述设备描述符获取设备标识信息;
步骤4:操作***根据所述设备标识信息查找注册表中是否存在所述硬件设备的注册表项,如果存在,则执行步骤5,否则,执行步骤6;
步骤5:操作***动态地装载所述硬件设备的驱动程序;
步骤6:操作***根据所述设备标识信息查找INF目录下是否存在所述硬件设备的INF文件,如果查找到与所述设备标识信息相符的所述硬件设备的INF,执行步骤7,如果没有找到,则执行步骤8;
步骤7:操作***根据所述INF文件中描述的安装信息自动安装驱动程序并填写注册表;
步骤8:操作***读取所述硬件设备的接口描述符,获取类标识信息;
步骤9:操作***根据所述类标识信息,自动装载类驱动程序。
所述步骤1中所述硬件设备中设置的类标识包括HID类标识、智能卡类标识。
根据本发明的一个方面,所述USB协议规定的HID类标识为0x03。
所述步骤3中获取所述设备标识信息至少包括制造商标识号ID、和/或产品ID、和/或产品序列号、和/或所属设备类号、和/或产品字符串。
所述步骤4中所述用于查找注册表项的标识信息包括制造商标识号ID、和/或产品ID。
所述步骤9中所述的类驱动程序为操作***默认支持的设备类对应的类驱动程序。
根据本发明的一个方面,所述操作***中默认支持HID类, 其对应类驱动程序Hidclass.sys。
本发明通过在硬件设备中设置类标识,使得***可以在设备驱动存在问题无法正常工作时,自动识别类标识,加载类驱动程序,在设备驱动没有问题时,使用设备自有驱动。通过本发明提供的方法,无需人工操作,简单方便,增加了设备使用的灵活性,便于使用。
附图说明
图1为按照本发明的一种设备状态自适应的一个优选实施方式的流程示意图。
图2为按照本发明的一种设备状态自适应的实施例1的流程示意图。
图3为按照本发明的一种设备状态自适应的实施例2的流程示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
本发明的增加类标识的方法适用于所有可设置类标识的硬件设备,如数码相机、USB Key等。
设置类标识的设备接入***时,***会获取设备的描述符信息,并判断该设备是否已经安装过驱动,如果已经成功安装过驱动,则直接装载驱动,如果没有安装过,则查找设备的驱动并安装设备驱动,如果找不到设备驱动程序,则自动读取设备内的类标识,自动加载类驱动程序。
根据本发明的一种方法,如图1所示,包括如下步骤:
步骤1:将设置有类标识的硬件设备与主机电连接;
步骤2:操作***自动检测新接入的硬件设备;
步骤3:操作***读取硬件设备内的设备描述符获取设备标识信息;
步骤4:操作***根据标识信息查找注册表中是否存在该设备的注册表项,如果存在,则执行步骤5,否则,执行步骤6;
步骤5:操作***动态地装载硬件设备的驱动;
步骤6:操作***根据标识信息查找INF目录下是否存在该设备的INF文件,如果查找到与标识信息相符的INF,执行步骤7,如果没有找到,则执行步骤8;
步骤7:操作***根据INF文件中描述的安装信息自动安装驱动程序并填写注册表;
步骤8:操作***读取设备的接口描述符,获取类标识信息;
步骤9:操作***根据类标识,自动装载类驱动程序。
所述步骤1中硬件设备中设置的类标识包括但不限于HID类标识、智能卡类标识。根据一个具体实施方式,USB协议规定的HID类标识为0x03。
所述步骤3中获取设备标识信息包括制造商标识号ID、产品ID、产品序列号、所属设备类号、产品字符串等信息。
步骤4中所述用于查找注册表项的标识信息包括制造商标识号ID、产品ID。
步骤9中所述的类驱动程序为***默认支持的设备类对应的类驱动程序。根据一个具体实施方式,***中默认支持HID类,其对应类驱动程序Hidclass.sys。
实施例一
本实施例中,所述硬件设备为信息安全设备,比如加密锁。其中,根据该实施例,加密锁具有驱动程序,且为初次使用,所述主机为计算机。加密锁内部接口描述符中设置HID类标识,以便于在加密锁接入主机使用时,当找不到驱动时,通过读取HID类标识,加载HID类驱动程序,从而以HID设备方式运行加密锁设备。
设置HID类标识主要包括:HID描述符(HID描述符中包括报告描述符和物理描述符),HID描述符与接口描述符关联,设备描述符中设置:bDeviceClass字段值为0,该字段为设备类码,设为0表明一个设置下每个接口指出它自己的类,各个接口各自独立工作;bDeviceSubClass(子类码)和bDeviceProtocol(协议码)字段值设置为0,接口描述符中bInterfaceClass(即设备类标识)的值设置为0x03(0x03为USB协议规定的HID设备类标识码)、bInterfaceSubClass(子类码)和bInterfaceProtocol(协议码)设置为0。
根据本发明的一个具体实施方式,一种设备状态自适应的方法,如图2所示,具体步骤包括:
1. 将设置HID类标识的加密锁设备通过接口与计算机主机电连接;
2. 操作***自动检测加密锁设备的设备描述符信息从而获取制造商ID、产品ID等标识信息;
3. 操作***根据标识信息查找注册表中是否存在该设备的注册表项,如果存在,执行步骤4,否则,执行步骤5;
4. 操作***动态地装载所述加密锁设备的驱动程序;
5. 操作***根据标识信息寻找加密锁设备的INF文件,自动安装所述加密设备的驱动程序并填写注册表;
6. 正常使用加密锁的操作功能。
本实施例通过读取硬件设备描述符获取标识信息,并自动检查该设备的INF文件,根据INF文件安装设备驱动程序,进而支持加密锁的使用,本实施例通过USB设备批量传输端点进行通信,具有速度快的优势,可以提高效率。
实施例二
本实施例与实施例一类似,其区别在于,假定用户没有安装加密锁驱动或者加密锁驱动丢失或损坏,根据本发明的一个实施方式,一种设备状态自适应的方法,如图3所示,具体步骤包括:
1.将加密锁设备通过接口与计算机主机电连接;
2.操作***检测加密锁设备的设备描述符信息获取制造商ID、产品ID等标识信息;
3.操作***根据标识信息查找注册表中是否存在该设备的注册表项,如果存在,执行步骤4,否则,执行步骤5;
4.操作***自动装载所述加密锁设备的驱动程序;
5.操作***根据标识信息查找加密锁的INF文件,如果查找到相符的INF文件,则执行步骤6,否则执行步骤7;
6.操作***根据INF文件自动安装所述加密锁设备的驱动程序并填写注册表;
7.操作***读取加密锁接口描述符获取类标识0x03(HID类标识);
8.操作***自动加载HID类驱动程序Hidclass.sys。
本发明在硬件设备中增加类标识,使得当设备驱动无法正常使用时,可以根据类标识将设备识别为无驱类设备,无需安装驱动即可正常使用。本发明无需人工操作,简单方便,增加了设备使用的灵活性,提升用户体验,具有很大的实用性。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。