求助,如何编写一个程序模拟usb设备插拔

小小峰逍遥 2017-12-13 09:20:20
想咨询一个问题,就是我准备基于VS2013+WDK8.1环境的WDM驱动模型,准备做一个虚拟的usb设备(例如:模拟一个u盘),但是模拟的U盘需要有插拔过程,如何实现虚拟usb设备的插拔过程呢??

对于usb设备,他们是即插即用设备,只有当windows检测到有设备插入时,会枚举该设备,然后通知PNP(即插即用)管理器加载底层总线驱动,底层总线驱动会创建PDO(物理设备对象),然后windows内核加载我们开发的设备驱动程序,并且把PDO作为参数传入我们开发的驱动程序,我们开发的驱动程序会在AddDevice派遣函数里创建FDO(功能设备对象),并且把这个FDO挂载到PDO上形成设备堆栈,至此完成基本的初始化。
由于usb设备类驱动是上面描述的过程,因此我需要模拟usb设备的插拔,让PNP管理器通知底层驱动创建PDO,否则我就没法获取PDO了。

希望能得到大家一丝帮助。或者说是不是说制作了一个虚拟usb设备,压根不需要底层总线驱动创建PDO,让这个虚拟usb设备不经过底层总线,而直接与上层的应用程序打交道?
...全文
1451 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
小火龙呢 2019-04-26
  • 打赏
  • 举报
回复
请问楼主最终实现了吗?有没有类似的开源项目可以参考的,最近也在弄虚拟USB设备
小小峰逍遥 2017-12-18
  • 打赏
  • 举报
回复
您好,我能想再向您咨询点信息。都说搞驱动的在调试时,都是拿虚拟设备来测试所开发的驱动,但是这个虚拟设备开发网上资料特别少。 所有希望得到更多帮助。 1、你说虚拟设备必须依据虚拟总线来做,那么虚拟总线我得自己来做对吧? 2、做出了虚拟总线,我应该开始做虚拟设备,虚拟设备一般需要怎么开发,我觉得虚拟设备至少应该包含一系列真实设备(我们意图虚拟的那个真实设备)的信息,包括vid,pid。版本等等,其次还有各种描述符也得有吧? 3、既然是虚拟,那么我是否需要模拟设备插拔,通过PNP管理器得到设备栈中的物理设备对象(PDO)?
  • 打赏
  • 举报
回复
虚拟USB设备 是必须包含一个虚拟的USB总线的 通过USB总线去搞,其实一个完整的虚拟usb 是包含USB集线器驱动、USB总线驱动、USB设备驱动的 这样才能构造一个完整的USB设备栈。 当然虚拟USB设备总体来说 你得虚拟什么USB设备,根据设备而定到底需要不需要一套完整的设备栈,你说的这个U盘 当然需要一个完整的USB设备栈咯。。
小小峰逍遥 2017-12-14
  • 打赏
  • 举报
回复
虚拟usb设备 你有开发经验么,是不是必须得用用微软的DSF框架。自己改造usb驱动应该也能实现吧
  • 打赏
  • 举报
回复
总线是得经过总线的,如果不经过总线操作系统是不知道这个设置是真实存在的。像filedisk 就是因为没有一个完整的设备栈导致他不伦不类的原因。。

21,619

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧