USB设备驱动开发之远程访问USB设备(二 USB设备虚拟端)

本文介绍了如何开发虚拟总线驱动来模拟USB设备,详细讲解了虚拟USB设备端的工作原理,包括创建Child PDO设备、处理URB_FUNCTION命令等。通过虚拟总线驱动,可以实现在不同平台间远程访问USB设备。文章还提到了虚拟USB设备在系统中的存在问题,以及未来可能完善的虚拟ROOTHUB和USB控制器开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

By Fanxiushu 2016-05-22 转载或引用请注明原始作者
接上文,
在处理好USB数据采集端的问题之后,接下来进入核心的部分,虚拟USB设备端的开发工作。
上文简单介绍过,需要开发虚拟总线驱动来模拟USB设备。
所谓虚拟总线驱动,就是安装于System系统设备下的一个驱动,由PnP管理器创建出一个虚拟的总线PDO设备,
我们的虚拟总线驱动Attach到这个PDO上,形成一个FDO功能设备驱动,
然后在我们的驱动中,根据需要创建出若干个 Child PDO设备,
这些 Child PDO设备就是我们根据需要模拟出来的虚拟设备。
我们的总线驱动每当创建出一个 Child PDO并且初始化之后,
调用 IoInvalidateDeviceRelations函数,通知PnP管理器我们的的Child PDO有变化。
于是PnP管理器接着发送 IRP_MN_QUERY_DEVICE_RELATIONS即插即用消息给我们的驱动,
等我们把新的所有Child PDO列表告诉给PnP管理器,它接着比较他内部维护的新旧的PDO列表,
知道哪些PDO被新添加,哪些已经被移除。
对于新添加的设备,PnP管理器发送查询设备ID的消息IRP_MN_QUERY_ID给我们创建的Child PDO,查询设备的各种ID,
然后PnP管理器根据设备ID从注册表查找是否已经为这个Child PDO安装了功能驱动,
如果已经安装,则加载它,没安装则提示用户安装新的驱动。

这就是虚拟总线驱动的大致框架,原理上来说并不复杂,而且有微软提供的 例子代码,
可以阅读它的例子代码进一步加深对总线驱动原理的理解,或者可以查看我提供在优快云上的源代码来加深理解。

评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨中风华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值