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

2021年9月25日 5点热度 0条评论 来源: 雨中风华

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

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

    原文作者:雨中风华
    原文地址: https://blog.csdn.net/fanxiushu/article/details/51494169
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。