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

Posted 雨中风华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了USB设备驱动开发之远程访问USB设备(二 USB设备虚拟端)相关的知识,希望对你有一定的参考价值。

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安装了功能驱动,
如果已经安装,则加载它,没安装则提示用户安装新的驱动。

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

以上是关于USB设备驱动开发之远程访问USB设备(二 USB设备虚拟端)的主要内容,如果未能解决你的问题,请参考以下文章

RDP协议之USB重定向虚拟通道

USB Development Kit (UsbDk) Design and Architecture 中文版

Linux下USB驱动开发之USB光谱仪驱动

在云端开发,但通过远程桌面通过 USB 在本地设备上调试 Android 应用程序

USB开发——内核USB驱动+libusb开发方法

在 Windows 上的软件中关闭 USB 设备