虚拟USB设备总结

2023-05-16

开发环境:windows

首先来总结最近研究的虚拟USB设备,进而虚拟USB键盘成功了,开心!

得出了一个C/S框架,首先说一下客户端

客户端有两个部分,用户空间工具底层虚拟总线驱动

在本文件中 我们将 它们分别指向 用户空间工具底层虚拟总线驱动。首先,用户启动用户空间工具来查询导出的来自服务器的USB 设备 ,如果有可用的设备,他或她可能会决定导入设备。如果入口请求成功,  用户空间工具 会向 底层虚拟总线驱动 发送一个 IRP,通知它创建一个物理设备对象 。

它代表 插入客户端计算机的真实USB 设备。当然,没有真正的设备附加到客户端机器,但我们的系统 会在不知情的情况下将其视为真实机器。然后系统将发送许多 IRP 到 我们用于查询目的的虚拟总线驱动程序, 例如设备能力查询、设备硬件 ID 查询等

有些查询与服务器端的实际设备无关 ,我们的虚拟总线驱动程序会马上完成它们。但是当用户访问远程 USB 设备上的数据存储时 ,我们的总线驱动程序会收到 IRP 那些与 URB(USB 请求块)相关的数据,总线驱动程序不能 立即给她返回所需的数据。

在这种情况下,底层虚拟总线驱动 将查找是否有来自 用户空间工具的挂起读取 请求,如果 

(1):

确实有一个待处理的读取请求;底层虚拟总线驱动将使用 URB 正确地提供读取任务,IRP 是入队 并设置为挂起状态。到这个时候,用户空间工具的读操作会成功返回, 然后 用户空间工具 将根据客户端和服务器之间的协议将 URB嵌入 到一个包中并发送这个 打包到服务器。用户空间工具 总是 在一个套接字上等待,当它从服务器接收到一个包时,它会调用 WriteFile() API 将包写入我们的虚拟 USB 设备。收到写 IRP 后,底层虚拟总线驱动 得到来自这个写 IRP 的数据并将适当的数据提供给前一个挂起的 IRP  ,然后那个挂起的 IRP 将成功完成后,它将随后出队。  

(2): 

没有挂起的读请求;IRP 将入队并设置为挂起状态。如果来了一段时间后来自 用户空间工具 的读取请求,底层虚拟总线驱动 将搜索队列以获取尚未发送到服务器的 IRP。当它找到一个时,它将向读取操作提供信息,从发现的 IRP 开始,所有后续行为都将与上述 (1) 完全相同。

服务端待续更新。。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

虚拟USB设备总结 的相关文章

  • Android Studio 无法将 Nexus 7 识别为设备

    我在 Nexus 7 上运行我在 Android Studio 中开发的应用程序时遇到问题 在使用同一台平板电脑和计算机 运行 Windows 8 之前 我已成功使其正常工作 但自从我的笔记本电脑修好并且所有内容都被擦除后 我确信我的开发环
  • 从 USB 可移动存储读取文件

    在我的应用程序中 我想从 USB 可移动存储读取文件 我有一个 txt 我想阅读它 void read UsbManager manager UsbManager getSystemService Context USB SERVICE H
  • 如何拦截并翻译USB事件

    我想使用飞利浦 LFH 2330 查看图像 使用 Windows Image Viewer 或其他查看器 如 IrfanView 等 LFH 2330 是一款带有四个踏板的脚踏控制器 参见here http www aaaaudio net
  • ALSA 记录 - 了解内存映射

    我尝试使用 ALSA 从 USB 音频设备获取输入并将其作为一系列内容写入磁盘signed short价值观 我最终得到的是看似有效的数据块 其中散布着大块的零 我猜测我的缓冲区设置不正确并且没有正确使用内存映射 我正在尝试什么 采样率 8
  • 使用 C# 向 USB 连接的 GPRS 调制解调器发送 AT 命令

    任何人都可以给我一个关于如何访问连接到 USB 端口的 GPRS 调制解调器的良好指示或指南 我应该为我的程序制作一个 USB 驱动程序以将 AT 命令发送到调制解调器吗 或者就像一个路由器 我可以使用IP地址访问它 谢谢 如果 Windo
  • 发现多个 USB-IrDA 设备,打开并连接每个设备的套接字

    对于任何优秀的套接字程序员 是否可以使用套接字枚举通过 USB 端口连接到 PC 的多个活动 IrDA 设备 如果是这样 怎么办 这确实是我的主要问题 帖子的其余部分完善了细节并描述了我所尝试的内容 我正在使用 Microsoft SDK
  • 无法使用 Android Studio、Windows 7 连接到 Samsung Galaxy Tab S

    我有一台漂亮的新三星 Galaxy Tab S 我正在尝试将其与 Android Studio 连接 我已在平板电脑上启用 USB 调试 并通过执行 SAMSUNG USB Driver for Mobile Phones v1 5 45
  • Android 上的 HP TouchPad USB 驱动

    我可以在运行的 HP TouchPad 上进行应用程序开发吗氰基模组 http en wikipedia org wiki CyanogenMod 9 我有一个安装了 CyanogenMod 9 的 HP TouchPad 并且正在尝试从E
  • 使用 adb 连接到 LG 手机时出现问题 (Mac OS X 10.7.5)

    当我跑步时adb devices没有设备显示为已连接 我的设备是运行 4 4 2 的 LG Optimus Exceed 2 周围有很多这样的帖子 所以这就是我所做的 我正在使用电话附带的数据线 它会充电并尝试同步照片 因此这不是问题 切换
  • 如何在 DriverKit 中将我的 dex 与 USB 设备匹配?

    我正在编写一个驱动程序包扩展 其目标是阻止 USB 设备 例如闪存驱动器 作为起点 我选择了示例项目https developer apple com documentation driverkit communicating Betwee
  • 使用自定义 INF 的微控制器的 USB 驱动程序安装问题

    我正在使用 NXP LPC1788 微控制器 并尝试在主机上创建一个驱动程序以通过 USB 与其进行通信 我相信我已经设法让设备正确处理标准 USB 请求 PC 能够正确读取字符串描述符 不过 我在编写示例 USB 驱动程序并为设备安装它时
  • 在 Python 中将 USB 视频捕获设备友好名称与 OpenCV 端口号相关联

    我想在 Windows 平台上使用 Python 获取外部 USB 视频捕获设备的友好名称和 USB 端口号 我正在使用 OpenCV 从 USB 捕获设备捕获视频 OpenCV 将 USB 端口称为 1 找到的第一个工作摄像头 0 对我来
  • Android 版 usbmon

    我想分析我的设备的 USB 通信 SGS4 我到处都看到需要配置 usbmon 并将其编译到内核中 Afaik 这个模块没有内置在android linux系统中 我在编译内核方面没有太多经验 但如果有必要 我会这样做 您能说出这样做的步骤
  • Java 两个独立键盘的独立输入

    我有两个 USB 键盘插入同一台机器 我正在开发一个 Java 应用程序 是否有办法允许 Java 应用程序分离出它来自哪个 USB 键盘 即是否有类似的东西http docs oracle com javase 6 docs api ja
  • USBInterfaceOpen总是报kIOReturnExclusiveAccess错误

    最近我遇到了这个问题 很头疼 我已经在这个问题上花了一个星期了 但仍然失败 希望您能帮我把这块石头踢开 非常感谢 我的问题 我们公司为iPhone生产USB存储设备 实际上这个存储设备中有一个SDCard 现在 我们想要开发一个 Mac 应
  • 我可以从哪里开始使用可编程硬件?

    一段时间以来 我一直渴望至少学习一点有关硬件编程的知识 并想在这里提出要求以获得一些起点 我是一位相当有成就的程序员 具有 Delphi 和 Objective c 经验 但从未听过设备端口 中断 我什至不知道术语 更不用说对硬件进行编程了
  • 在 Linux (libusb-1.0) 上访问 USB 设备?

    我正在编写一个小程序 使用 Linux 上的 libusb 1 0 与特定 USB HID 产品 由供应商和产品 ID 标识 进行通信 现在 我必须以 root 身份运行该程序 因为 libusb 需要对 USB 设备节点的写访问权限 有没
  • 如何设置USB连接模式?

    我正在编写一个应用程序 该应用程序应该将数据转储到 SD 卡上 然后在 PC 上编写另一个应用程序 当设备连接到 PC 时 在光盘驱动器模式下 该应用程序应该读取数据 在我的 HTC Legend 上 有一个对话框可供选择 仅充电 HTC
  • 使用 BeagleBone Black 内核 >= 3.8 打开/关闭 USB 电源

    我需要 关闭 gt 睡眠几秒钟 gt 打开 beaglebone black 的 USB 电源 能够对连接到 USB 的设备 华为 E220 调制解调器 进行硬件重置 已经尝试过软重置 使用取消绑定 绑定和授权0 1 但软件重置不足以使设备
  • libusb 和轮询/选择

    我正在使用 Linux 操作系统 想知道是否有任何文件描述符可以轮询 选择 当数据等待从 USB 设备读取时会触发这些文件描述符 我也在使用 libusb 库 但尚未找到可以使用的文件描述符 Use libusb 的轮询函数 http li

随机推荐