【问题标题】:Mock Device connecting through USB通过 USB 连接的模拟设备
【发布时间】:2011-08-15 17:18:52
【问题描述】:

我有一个设备和该设备的驱动程序。我想做的是构建一个模拟 USB 设备以与第三方应用程序通信的应用程序。

更具体地说,我正在尝试构建一个应用程序,该应用程序可以模拟模仿 Microsoft Zune 的 USB 设备。我想这样做,以便我的应用程序可以注册为 zune 设备,然后与客户端通信。我已经在我的应用程序中添加了几个 DLL,以尝试确定告诉软件连接的设备是合法 zune 的调用,但到目前为止我运气不佳。

我是这种类型的开发新手——即模仿硬件设备,而且我在导入用 C/C++ 编写的 dll 方面不是很有经验。我正在使用 Visual Studio 2010 (.net 4.0) 来开发我的应用程序,如果有人可以为我提供模仿硬件的任何帮助,我将不胜感激。我确实有设备驱动程序,Visual Studio 拒绝直接引用。我还有一个实际的物理设备,所以我可以在设备管理器中查看它使用的驱动程序。

目标如下

  1. 应用程序将自己注册为 USB 设备,以类似于虚拟克隆驱动器模仿 DVD 播放器的方式模仿 Microsoft Zune。
  2. 应用程序被 zune 客户端识别为有效的 microsoft zune。
  3. Zune 软件与应用程序一起工作,就像它与硬件设备一样(同步等)

【问题讨论】:

  • 您需要您的模拟 Zune 来完成普通 Zune 可以做到的所有(至少就 USB 接口而言)?您基本上将不得不编写 Zune 固件的很大一部分。驱动程序和固件是完全不同的动物。你愿意为此投入多少时间?去买 100 个真正的 Zune 可能会更便宜...
  • 它不会执行所有功能。理想情况下,它将通过同步,例如,您可以设置应用程序以将媒体传递到指定位置。我想让 zune 软件将设备识别为有效,允许您通过 zune 客户端选择同步策略,然后将适当的媒体同步到应用程序指向的任何位置。同步部分实际上很容易。我可以通过客户端 dll 看到如何做到这一点。我想避免让我的应用程序支持选择要同步的媒体。我知道这可能会更容易。
  • umockdev 帮助模拟 USB 设备 stackoverflow.com/a/43917529/6180077

标签: c# c++ mocking hardware-interface zune


【解决方案1】:

我刚刚找到了一个名为 Device Simulation Framework 的东西,这可能正是您所需要的。不过,它仍然需要对 USB 如何工作以完成您的解决方案进行大量研究。并且可能仍然通常使用 C 或 C++ 来完成。

Zune 使用称为 MTPZ 的 MTP 协议的修改版本,但我发现此示例使用设备模拟框架来模拟常规 MTP 设备。它被称为The MTP Device Simulator。我不知道源代码是否可用。

【讨论】:

    【解决方案2】:

    您能否用您自己的 DLL 替换 zune 客户端软件使用的 DLL?在这种情况下,您可以用您的 DLL 包装原始 DLL 并拦截操作。

    更新:要找出 DLL 中函数的签名,请查看Dependency Walker 工具,该工具将列出导出的函数(以及许多其他信息)。我猜你会想用 C 写你的替换 DLL。


    否则,您将不得不编写驱动程序来使用正确的端点注册 USB 设备。我不确定如何在 Windows 上执行此操作 - 我只在固件端进行了 USB 编码,而不是驱动程序端。您应该可以使用任何教程来创建 Windows USB 驱动程序,例如 Getting Started with USB Driver Development

    Zune 的具体信息也可能有用。也许这篇博文及其后续文章可以提供帮助:Inside the Zune/USB Protocol: Part 1

    【讨论】:

    • 我很想用我自己的 DLL 包装 zune 驱动程序,但我不确定如何为我的导入提取方法签名。
    • @Josh - 尝试使用 Dependency Walker 工具(已更新答案)。
    • 非常酷,但它显示的是名称而不是参数。看起来我有很多猜测要做,因为似乎没有什么是 zune 特定或明显的。
    • @Josh - 是的,更简单的方法实际上可能是编写虚拟 USB 驱动程序。看起来无需使用名为 WinUSB 的东西编写内核模式驱动程序是可能的
    • 使用 zune INF 文件有帮助吗?我真的在这里在黑暗中拍摄。
    猜你喜欢
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 2018-07-17
    • 2014-04-25
    • 1970-01-01
    • 2017-03-25
    相关资源
    最近更新 更多