通用串行总线驱动解决办法
发布时间:2010-06-14 17:36:17 文章来源:www.iduyao.cn 采编人员:星星草
通用串行总线驱动
请教各位,我有一个USB设备,插入后会出现在[设备管理器]->[通用串行总线控制器]列表里。如何才能让这个驱动在未插入USB设备的时候也加载?
就是也出现在[通用串行总线控制器]列表里。
比如有些设备,像蓝牙适配器虚拟出的COM口,即使不插入蓝牙适配器,驱动也是显示在列表里是怎么实现的。
------解决方案--------------------
USB的驱动基本上都是在有设备的时候才会显示的,比如CP2102的USB转串口、CDC类的USB转串口,键盘、鼠标、U盘,包括我们常用的其它电脑硬件也都是这样,因为设备管理器显示的是已有的设备,并不是显示已有的驱动,如果非要在没有硬件的情况下显示有硬件存在估计要详细研究一下相应的驱动吧。
------解决方案--------------------
如果沒有硬件的话,应该是需要在上层进行设备模拟吧。
没做过,帮顶。
------解决方案--------------------
在没有硬件设备的情况下出现在设备管理器中,那就是虚拟设备啦。
就USB设备而言,Windows付出了这么大的努力才实现了即插即用,难道又想回归自然?
------解决方案--------------------
这种所谓的PnP设备可能必须先发现设备再显示驱动。
我想是否可以尝试欺骗一下USB BUS总线:
方式1:
USB新设备的信息无外乎存储在注册表的三个地方:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\GUID(具体哪个GUID看你设备的类型)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses(具体哪个GUID看你设备的类型)
分析拔下、插上你的设备时注册表的差异。然后再设备不在线的时候,尝试直接修改这些注册表值
方法二:
研究Bus总线是怎么发现设备的。然后自己写个应用直接用IOCTL发命令给BUS总线。
(都是一些想象,估计实现起来不是很容易)
DDK上一个关于总线的例子EnumBUS\Toaster 比较不错,你可以拿来研究下自定义总线下发现设备的情况。
------解决方案--------------------
首先,要了解usb设备的连接过程,对于大多数驱动,都是动态加载的,即插上usb设备的时候,系统进行枚举,然后根据枚举出的信息pid,vid,在注册表中找到该设备,然后找到相应的windows目录下的驱动,然后才调用activedevice去加载驱动,激活后,就可以在注册表中的drivers/active目录下找到虚拟出的设备,当然,如果你需要静态加载,首先需要在注册表中drivers/bulkin/加入你的驱动序列,然后系统开启后会自动加载,但是你的驱动如果需要枚举信息才能加载的话肯定加载失败,如果你的驱动修改成不需要枚举信息,那么就可以了。
------解决方案--------------------
"像蓝牙适配器虚拟出的COM口,即使不插入蓝牙适配器,驱动也是显示在列表里是怎么实现的"
串口作为Legacy设备,是系统读取注册表时发现有这个端口,就加载上去的。
但是对于像USB这种设备,不属于Legacy设备,是在PNP时被系统加载的。如果你想在没有设备连接在系统上时就有这个设备出现,那么你可以改写这个设备的驱动程序,让它生成另一个一个设备对象,类型可以为PORT,这样就可以像蓝芽虚拟COM口那样了。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
在驱动开发中出现 'struct' type redefinition 应该怎么办?? 大神们告诉小弟一下...
下面是我写的代码:
#pragma once
//**********...
-
大神们帮我看一下,我的代码错在什么地方? 加载成功,卸载就蓝屏了....
/*
*******************************************************...
-
sigma8653很罕见的问题
SOS!
sigma8653板子插上卡,上电后可以识别SD卡,然后软重启(reboot)就无法识别了!
奇怪的时,继续软重启一次又可...
-
Cancel自旋锁 起了什么作用?
发现IoCancelIrp 函数中
获取了Cancel自旋锁
设置了Irp->Cancel
调用了OnCancelIo函数
但是进入了On...
-
windows下 pnp设备的即插即用功能是怎么实现的?
看到 windows内核情景分析里说
加载驱动有三种方式 前两种是静态 分别是引导...
-
取消当前 IRP 执行的过程是怎样的?
#pragma code_seg("PAGE")
NTSTATUS MyWdmRead(PDEVICE_OBJECT DeviceObject,PIRP Irp)
{
...
-
vs2008中,link2001错误的问题,代码如下
vs2008中,link2001错误的问题,代码如下
#include <ntddk.h>
VOID OnUnload(IN PDRIVER_OBJ...
-
什么是内核缓冲区,用户缓冲区
比如网卡的内核缓冲区,那这个缓冲区是在pc内存还是在网卡的芯片上呢?
------解决方案---------------...
-
如果在一个函数中有提升IRQL的语句 是不是整个函数都不能放在分页内存中 ?
如果我在一个函数前使用了 #pragma code_seg("PAGE") ...
-
请教Linux下dm9000网卡驱动程序问题
应用程序网络编程是基于socket接口的,好像完全屏蔽了底层,不能像字符设备那样应用程序可以调用...