如何在虚拟一个USB设备

winterxu416 2011-05-04 02:20:53
我想在本地虚拟一个USB接口,USB接口的数据来自于TCP/IP通道的另一端。
其中这个USB接口是通用的,也就是说,这个接口上虚拟出来的设备类型比较多,可能是U盘、摄像头、USB Key等各种设备。

如果想开发这样一个USB接口,我应该如何做?
另外,本人从未做过DDK方面的开发,但是有多年c语言开发经验,希望各位高手给建议时,能够稍微详细一点儿,万分感谢。
...全文
6370 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyyjaf 2012-11-23
  • 打赏
  • 举报
回复
能否再具体一点,我现在也要做一个这样的虚拟设备,可以挂载同种设备类但不同PID的多种设备的驱动程序,当有该设备类类型的设备接入时,对应的驱动程序会被调用,不再需要手动安装驱动程序。
project2502 2012-10-26
  • 打赏
  • 举报
回复
这个超简单

你看看ddk 里 vhidmini 这个例子 和usb协议中关于 usb描述符的部分

只要简单的改改 usb描述符 就可以 将vhidmini虚拟成任何usb设备

数据可以是从用户模式得到 也可以通过 与ndis过滤驱动交互得到
nothing0x 2012-10-11
  • 打赏
  • 举报
回复
需要用到dsf吧。
c_panpan 2011-11-28
  • 打赏
  • 举报
回复
楼主,你写出来了没?我也想看一看,如果写出来,请拿出来晒一晒吧!!!谢谢
wowocpp 2011-07-19
  • 打赏
  • 举报
回复
mark
youkong yangjiu yixia
yangxhjamin 2011-06-02
  • 打赏
  • 举报
回复 2
[Quote=引用 9 楼 supermanking 的回复:]
引用 7 楼 yangxhjamin 的回复:

呵呵,这个东西嘛,据我所知与驱动基本没关系。
去微软官网下个wdk最新的7600.***版,从ddk6.0开始微软专门提供了一套设备虚拟框架DSF,wdk安装后DSF就会被安装在C盘program files下,里面有四个例子;在ddk提供的源码src\test\dsf\usb下有这四个例子的源码。
DSF是microsoft提供专门用于基……
[/Quote]
当然“与驱动基本没关系”我说的有点绝对了,wdk的确大多数人是它用来开发设备驱动的,但它在其中增加了另一块儿-DSF;如果你安装下wdk就会看到其中包含DDK和DSF及其他东西,ddk和dsf被安装在不同的地方;说这个的目的说dsf是专门提供用来做虚拟设备的所以他被独列出来了,虚拟设备的市场需求最终导致微软专门提供了一套开发虚拟设备的框架DSF;USB当然只是一种接口,具体是什么驱动当然得根据设备功能来定,这个也是初学者容易搞混的地方。
据我目前所知,开发虚拟设备有两条路线:1从驱动整体结构入手欺骗操作系统开发虚拟设备,2用dsf架构欺骗操作系统开发虚拟设备。随着Windows的安全机制的完善第一种方案难度很大,而且只有对驱动开发比较熟悉的工程师才搞的来,这个也就是你说的从驱动入手用驱动虚拟;第二种就不用说了,微软专门搞了个Divice simulation Framework(DSF)欺骗自己的操作系统用于开发虚拟设备(目前仅支持开发USB接口的设备),据我对DSF的了解微软自己搞的DSF就是用小端口驱动把一个虚拟USB设备控制器驱动接在USB控制器驱动上,前面的关于驱动层面的东西DSF已经做好了,开发人员不需要管驱动的东西,所以开发基于DSF框架的虚拟设备已经与驱动没有关系了。如果还有不清楚的可以看MSDN官网提供的资料
http://msdn.microsoft.com/en-us/library/ff542267(v=VS.85).aspx
现在还是人类 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yangxhjamin 的回复:]

呵呵,这个东西嘛,据我所知与驱动基本没关系。
去微软官网下个wdk最新的7600.***版,从ddk6.0开始微软专门提供了一套设备虚拟框架DSF,wdk安装后DSF就会被安装在C盘program files下,里面有四个例子;在ddk提供的源码src\test\dsf\usb下有这四个例子的源码。
DSF是microsoft提供专门用于基于USB接口设备虚拟的框架,开发人员不需要管驱动之类……
[/Quote]
如果真的没关系就不可能做出来。光看你说的 WDK 和DDK,就明显的与驱动挂钩了,怎么还能说与驱动无关呢?你所说的只是这种驱动程序是自己写还是用现成的程序过代码而已,飞不出去的。

还有就是,不要被“USB”这个词所误导,这种程序和USB通讯协议无关。因为既然是虚拟的,就不会存在真正的USB通讯过程,就不去要处理USB通讯上的相关IRP请求,只要处理相应的磁盘或目标设备处理过程的IPR请求就可以了。当然,如果要模拟USB的HID设备通讯,需要了解HID通讯过程,才需要处理相应的IRP请求,但如果是模拟磁盘、光盘这种设备,没必要涉及这方面的东西。因为事实是即使真的USB设备,要在系统中实现磁盘或光盘的处理,除了处理USB数据传输这一块,主要的还是处理目标设备的IRP信息处理过程,在驱动程序中来看,除了通讯过程,其他的和USB这种接口无关。

打个比方,就像以前的一款软件,叫网络蜂盘,是通过 Internet 网络进行数据的交换,然后虚拟出本地硬盘。这种方式和 USB 的移动硬盘区别只是在于传输数据的方式和速度不同,但最终都是实现磁盘设备的接口处理,难道这种驱动应该被叫成“网络驱动”?只要是通过网络传输数据的,无论虚拟出的是磁盘、光盘、键盘、打印机,难道都应该叫“网络驱动”?还有那种直接通过磁盘文件内容虚拟成一个本地磁盘的方式,难道也应该叫成“文件驱动”?不是这样的,这种只是数据的接口来源方式而已,和驱动程序的定性无关。除非是模拟一个 USB 通讯通道,如前面我说的 USB HID 设备的通讯模拟,这种需求因为要实质了解通讯的设置与数据交换过程才能实现,所以这种可以叫做“USB驱动”,否则是与 USB 这种接口技术是无关的。

之所以我一再说这种问题,主要是纠正理解概念上的问题,因为如果理解的概念上错了,将会走很多的弯路。理解这种问题应该这样,“磁盘驱动”、“光盘驱动”、“键盘驱动”……,这样理解目标程序比较贴切。因为只有这样去理解,才会正确的找出访问磁盘时的过程需要处理哪些 IRP 请求。不然路一偏,去了解 USB 通讯时的具体过程、有几种方式、要处理哪些请求、每种请求的含义、具体的设备地址、宏操作方式等等等等,走了一大截,发现和目标根本就很远,当意识过来,发现走了很多弯路,所以说概念一定要清楚,不然一定会很苦。
allenzh 2011-05-25
  • 打赏
  • 举报
回复
yangxhjamin说的应该是另外一个办法,这个办法我没有验证过
使用驱动方式是可以实现的,我曾经开发过一个虚拟usb设备,可以将远端很多usb设备接入进来,包括键盘,鼠标,U盘,Camera,Audio,Printer,Reader等等USB设备
yangxhjamin 2011-05-23
  • 打赏
  • 举报
回复
呵呵,这个东西嘛,据我所知与驱动基本没关系。
去微软官网下个wdk最新的7600.***版,从ddk6.0开始微软专门提供了一套设备虚拟框架DSF,wdk安装后DSF就会被安装在C盘program files下,里面有四个例子;在ddk提供的源码src\test\dsf\usb下有这四个例子的源码。
DSF是microsoft提供专门用于基于USB接口设备虚拟的框架,开发人员不需要管驱动之类的复杂的东西(基本一点关系都没有),只需要开发一个动态链接库用做模拟设备功能,再开发一个脚本文件(microsoft提供的脚本文件是用VBscript编写)用于模拟设备的物理插拔动作;这样一个虚拟设备就模拟ok了。
详细资料可以去官网查看
http://msdn.microsoft.com/en-us/library/ff542267(v=VS.85).aspx
还发现有一个2月份在发表在《计算机系统应用》上的一篇论文:基于DSF架构的USB设备虚拟,想办法弄下来就行了http://www.cnki.com.cn/Article/CJFDTotal-XTYY201102052.htm
还有《软件导刊》上的:基于TCP/IP虚拟USB集线器的设计
http://www.cnki.com.cn/Article/CJFDTotal-RJDK200907049.htm

呵呵,给分
Lingxy 2011-05-16
  • 打赏
  • 举报
回复
虚拟成hub啊
mhjava 2011-05-09
  • 打赏
  • 举报
回复
做这个东西很复杂,好像wdk里面有一套微软的可以虚拟任意的usb设备你可以到网上查查,
开发这个你要先把usb在windows的架构搞清楚,驱动层次搞清楚,这些都可以参考wdk.下载一个
wdk慢慢研究吧。
现在还是人类 2011-05-04
  • 打赏
  • 举报
回复
USB只是一种接口技术,属于计算机接口技术的其中一种接口技术,这种
技术是一种规范的通讯标准而已,而这种通讯标准非常的灵活,可以包含
任何形式的数据通信,但是你要求的是虚拟设备驱动,这和这种通讯标准
无关,完全是在Windows抽象化后的环境开发就可以了,不用涉及具体的
USB通讯相关的东西,只要用好DDK中的API、结构体、宏命令就OK了。
因为驱动程序可以说是没有任何硬件形式而存在的软件程序,所谓的USB
驱动并不是真正直接对应硬件的程序,而是安装时放在注册表某个指定位
置而已,连图标或设备分类都可以自己在安装程序中定义,真正的驱动程
序不会管注册表位置在哪而执行不同过程,而是同样的入口,同样的 IRP
请求包,没什么应用层看见的这种某种设备的概念。所以,专业上来说是
“驱动开发”,而不是“USB驱动开发”、“PCI驱动开发”,他们的区别
只是如何操作IRP、如何用好宏命令、如何用好下层的NTAPI。
winterxu416 2011-05-04
  • 打赏
  • 举报
回复
补充一点,我希望虚拟的USB接口是通用的,我可以在本地安装驱动来调用这个USB接口,就像一个真正的USB硬件接口一样。
另外各位能否给一下关于USB虚拟接口开发的文章?
Eleven 2011-05-04
  • 打赏
  • 举报
回复
呃,Windows驱动编程~
现在还是人类 2011-05-04
  • 打赏
  • 举报
回复
这种需求肯定要用驱动来支持,而按你的需求来说,应该用WDM模型开发驱动。
不过你想一个驱动实现多种设备的虚拟,估计比较难实现。
你可以换个思路,每种设备写一个驱动,然后当你要使用什么样的设备时,再
触发某个驱动载入过程,这样理解就简单多了。
至于该如何做的问题,你应该看看驱动开发相关的书籍,然后了解一下计算机
接口技术,相信你就应该知道大概的开发路线了。
驱动开发上可以参考一下《Windows驱动开发技术详解》这本书,有电子版的,
而且在网上也有下,你可以看看的。
VMware-Workstation-8-Keygen 注册机和序列号 sn 里面包含 VMware Workstation 8 的注册机和注册码, 我发布时经测试可用. VMware Workstation 8 介绍 支持Win8安装,虚拟机VMware Workstation 8正式版日前已经发布,同时网上也开始流出VMware Workstation 8注册机和VMware Workstation 8序列号,有用VMware的童鞋赶快下载更新吧! VMware Workstation是非常优秀的虚拟机,与开源虚拟机VirtualBox齐名。不过个人更喜欢VMware Workstation,虽然相对VirtualBox,VMware Workstation的体积显得有些臃肿。 虚拟机的主要作用是什么呢?个人以为虚拟机的主要作用是创建虚拟的系统环境,实现测试开发等工作。通过虚拟机你可以轻松地搭建Windows系统、Linux系统和Mac系统等环境,无需在具体的机器再安装一个系统,即可实现。 笔者比较喜欢折腾各种软件,但又不能在电脑的系统安装那么多的软件,因此使用虚拟机VMware Workstation安装一个虚拟系统,在里面进行测试安装。这样在不影响现有的系统运作情况下,就可以完成对众多软件的测试。 如果你对虚拟系统感兴趣和喜欢折腾各类软件,建议你下载最新版VMware Workstation 8。VMware Workstation 8有什么新特征呢?以下引用官方说明: 随时随地访问VMware Workstation 提供了一种无缝的方式,无论虚拟机在什么地方运行,您都能随时访问所需的所有虚拟机。 从网络中的任何地方远程连接到基于 VMware Workstation、VMware vSphere 和 VMware vCenter 运行的虚拟机,不仅能充分利用本地 PC,也能充分利用内部云。 共享优势开始与您的团队、部门或组织中的任何人员共享虚拟化的优势。 将 VMware Workstation 8 作为服务器运行,您的虚拟机将在您注销之后继续长时间运行。 这是在更接近生产的环境中测试应用程序的最便捷的方式,而且对用户访问提供企业级控制。 新界面,新工作方式VMware Workstation 8 用户界面已经过全面重新设计和简化,采用了经简化的菜单、更新的工具栏、文件夹视图、活动缩略图栏和新的虚拟机库。 通过新的虚拟机库,可以方便地查看本地和远程虚拟机。 无论是在本地 PC 上、VMware vSphere 服务器上还是网络中的其他 Workstation 8 实例上运行的虚拟机,都可以通过筛选和搜索快速找到所需的虚拟机。 释放 PC 的潜能Workstation 8 让借助虚拟机完成的工作继续提升一个台阶。 它率先支持带 7.1 声道的高清音频、USB 3 和蓝牙设备。 通过对虚拟 SMP、3D 图形及 64GB RAM 支持的巨大改进,您可以在虚拟机中运行大部分要求最严苛的应用程序。 Workstation 8 如此强大,您可以在 VMware vSphere 上运行 64 位虚拟机,而 VMware vSphere 本身也在一个 Workstation 8 虚拟机中运行。 从您的桌面到内部云直接拖放虚拟机,即可将其从您的 PC 移到 VMware vSphere 服务器上。 这是从您的 PC 将完整的应用程序环境部署到服务器上最简单的方式,可便捷地进行进一步测试、调试或分析。 特别要说的是,VMware Workstation 8的新界面,重新得到设计和优化,简单极致,操作简单。 立刻下载VMware Workstation 8正式版:http://dl-sh-ctc-2.pchome.net/03/lt/VMware-workstation-full-8.0.0-471780.rar

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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