本发明涉及计算机系统技术领域,尤指一种在windows操作系统中使usb设备即插即用的方法。
背景技术:
正常的操作系统中,对于usb设备,第一次插入设备时,系统会找到新设备,要求安装驱动。
而当相同的设备插到不同的usb口上,或者插入另外一个同型号的设备时,系统依旧会找到新设备,并有重新安装驱动的过程,如果安装过程有弹出界面(例如罗技的一款usb摄像头),还需每次都要确认。如果系统是还原的,那么每次插入设备都会有这样的过程,影响客户使用体验。
技术实现要素:
本发明方法旨在解决当相同的设备插到不同的usb口上,或者插入另外一个同型号的设备时,系统依旧会找到新设备,并有重新安装驱动的过程,如果安装过程有弹出界面(例如罗技的一款usb摄像头),还需每次都要确认。如果系统是还原的,那么每次插入设备都会有这样的过程,影响客户使用体验的问题。
本发明提供的一种在windows操作系统中使usb设备即插即用的方法,包括监测注册表部分、找到对应的usb设备注册表部分和复制对应的usb设备注册表到指定的注册表部分,其具体步骤如下;
s1、在驱动程序初始化后调用cmregistercallback函数,绑定驱动设备,注册一个注册表监测函数,此函数当注册表有修改时,会通过回调函数通知驱动程序。
s2、监测到usb下的注册表有创建动作,当监测到usb下的注册表有创建动作时,查看是否是创建了一个设备对象的位置信息,如果不是,不处理,如果是,找到是否存在相同设备的原来的设备注册表,如果没有,不处理,如果有,记录下来。
s3、把找到的对应注册表下的所有信息复制到新创建的注册表项中。
优选的,所述s2步骤中的usb的路径为hkey_local_machine\system\currentcontrolset\enum\usb。
优选的,所述s3步骤中的对应注册表包括containerid、driver、parentidprefix、service等信息。
本发明的技术手段可获得的技术效果为:
(1)、本发明提供一种在windows操作系统中使usb设备即插即用的方法,主要用来修改windows操作系统的注册表,从而达到让已经装过驱动的usb设备即插即用的效果。
附图说明
图1为本发明一种在windows操作系统中使usb设备即插即用的方法技术组成图。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图说明本发明的具体实施方式。
本发明所提供的一种在windows操作系统中使usb设备即插即用的方法的较佳实施例如图1所示:
一种在windows操作系统中使usb设备即插即用的方法涉及三个方面,监测注册表部分,找到对应的usb设备注册表部分,复制对应的usb设备注册表到指定的注册表部分,三个步骤后最终完成整个方法,其中各功能如下所示:
一、监测注册表
在驱动程序初始化后调用cmregistercallback函数,绑定驱动设备,注册一个注册表监测函数,此函数当注册表有修改时,会通过回调函数通知驱动程序。
二、找到对应的usb设备注册表
当监测到hkey_local_machine\system\currentcontrolset\enum\usb下的注册表有创建动作时,查看是否是创建了一个设备对象的位置信息,如果不是,不处理。如果是,找到是否存在相同设备的原来的设备注册表,如果没有,不处理。如果有,记录下来。
三、复制对应的usb设备注册表到指定的注册表
把找到的对应注册表下的所有信息复制到新创建的注册表项中,包括containerid,driver,parentidprefix,service等信息。
驱动安装好后,在注册表中会实际产生3个对象,设备对象,驱动对象和服务对象。所有设备的入口都在设备对象上,通过设备对象,能找到驱动对象和服务对象。
来个简单的例子,看一下hkey_local_machine\system\currentcontrolset\enum\usb这个注册表键值
vid_xxx&pid_xxx是厂商和设备id,这个一般跟设备型号是相关的,如果设备型号一样,这个id就一样,6&c51e984&0&4这个就是位置信息,位置信息下面的就是设备对象了,而driver对应的{745a17a0-74d3-11d0-b6fe-00a0c90f57da}\0038就是驱动对象了,具体位置为:hkey_local_machine\system\currentcontrolset\control\class\{745a17a0-74d3-11d0-b6fe-00a0c90f57da}\0038,对应的注册表如下:
而service对应的hidusb就是服务对象了,具体位置为:hkey_local_machine\system\currentcontrolset\services\hidusb,对应的注册表如下:
对于具有同样设备id的usb设备而言,驱动对象和服务对象是所有驱动共用的,所以无需再次处理,我们只需要对设备对象处理即可。
当插入一个新usb设备之后,就会因为位置不同,所以注册表就会产生一个新位置,新位置上开始是没有设备对象的,如果在此时复制上次的设备对象到这里,那么,就不会发现硬件了,就达到了即插即用的效果。要达到此效果,需要在驱动中监测usb设备的注册表部分,一旦创建了一个新的位置信息,把对应原来的信息复制过去即可。
以上所述仅为本发明示意性的具体实施方式,并非用以限定本发明的范围。任何本领域的技术人员,在不脱离本发明的构思和原则的前提下所作的等同变化与修改,均应属于本发明保护的范围。而且需要说明的是,本发明的各组成部分并不仅限于上述整体应用,本发明的说明书中描述的各技术特征可以根据实际需要选择一项单独采用或选择多项组合起来使用,因此,本发明理所应当地涵盖了与本案发明点有关的其他组合及具体应用。