gpt4 book ai didi

windows - 用自定义驱动程序替换 Windows USB 类驱动程序?

转载 作者:可可西里 更新时间:2023-11-01 13:11:48 28 4
gpt4 key购买 nike

我想知道是否有人可以提供帮助,这是一个专业问题。

我有一个应用程序需要读取和分析多个 USB 设备(不是同时,它们每个都在单独的测试中运行,理论上可以在不同的机器上运行)。

每个 USB 设备都基于 USB HID 类,由不同的公司制造,这些 USB 设备都不是为在 PC 上运行而设计的,而是用于不同的平台,但是为了测试设备客户已请求从 PC 运行测试应用程序。

一些设备将启动,被 windows 识别,windows 将使用内置在 windows 中的通用 HID 类驱动程序正确地初始化和启动它们,然后设备将开始发送要测试的数据的正确数据包。

一些设备将启动,被窗口识别,这些窗口将尝试启动它们,但无法完全初始化它们,使它们处于半初始化状态。这很好,因为我可以使用我的 beagle 协议(protocol)分析器从正版平台捕获初始化数据包,然后使用 LibUSBDotNet 库复制初始化序列中的剩余数据包并让它们开始正确发送数据包。

我遇到的问题是一个特定的设备(虽然还有一些我还没有测试过,所以很可能其中一个也可能出现同样的问题)。问题是 Windows HID 类驱动程序识别设备并尝试初始化并启动它,这在一种方式之后起作用并且设备开始发送数据。

问题是发送的数据与发送到正版平台的数据不同(仅包含完整数据的一个子集)。就好像 Windows 已将设备初始化为不同的模式。

当我使用 USB 协议(protocol)分析器从 PC 和正版平台捕获初始化数据包时,我看到 Windows 正在发送一些稍微不同的初始化数据包。一旦 Windows 已经启动设备,使用 LibUSBDotNet 重新发送正确的数据包似乎没有效果。

我的问题是我需要阻止 Windows 尝试使用标准 HID 类驱动程序初始化设备,我尝试在设备管理器中删除驱动程序但它仍然初始化它(并且驱动程序在设备管理器中神奇地重新分配)。我已经做了一些调查,有可能的替代方案:

  • 创建一个特定的驱动程序,windows 会将其分配给设备的特定 VID/PID,但什么也不做,然后我可以使用 LibUSBDotNet 从我自己的代码中将正确的初始化序列发送到设备。
  • 使用类似 WinUSB 的东西来为设备创建一个合适的驱动程序(或者可能创建一个像 1 这样的“死”驱动程序。

  • Windows 是否会优先使用定义了特定 VID/PID 的驱动程序,而不是其内置的 USB HID 类驱动程序?如果没有,那么我会浪费时间沿着这条路线走吗?

    请注意,我的 mac 正确初始化了问题设备,我已经问过客户端是否可以为 Mac 开发应用程序,他们的回答只是让 Windows 感到沮丧。

    我没有编写适当的 Windows 驱动程序的经验,尽管我有在相对较低级别与 USB 通信的经验(因此这部分不会太担心)。任何人都可以建议一个好的行动方案(在我可能会浪费数周时间研究如何为 PC 编写驱动程序之前,却发现我选择的行动方案无法满足我的要求)。

    任何帮助或建议非常感谢。

    谢谢,
    富有的

    在尝试以下建议后添加:

    我尝试使用 LibUsbDotNet inf 向导来创建必要的文件并安装它们,这似乎有效 - 当然该设备现在作为 libusb-win32 设备出现在设备管理器中 - 而不是 HID 设备,相关的驱动程序是 libusb 驱动程序。即使这样做后,设备仍然似乎变成初始化并开始发送错误类型的数据包虽然现在这些分组不再由类驱动程序处理,并刚刚失去了。

    我还遇到了 Zadig,它有一个类似的 WinUSB inf 创建向导,结果完全相同。

    一位同事建议可能不是 windows 本身将设备切换到这种模式,而是设备识别它连接到 windows 机器并将自己切换到这种模式。我怀疑是这种情况,在这种情况下我被卡住了 - 是时候与客户进行另一次对话了。

    非常感谢您的帮助。

    最佳答案

    您使用 libusb-win32 作为过滤器驱动程序;也就是说,为您的设备分配并加载了 HidUsb 设备驱动程序,然后 libusb-win32 驱动程序加载在顶部,让您可以畅通无阻地访问硬件。

    如果您不希望 HidUsb(或任何其他类驱动程序)“代表您”执行任何通信,只需将 libusb-win32 关联为 设备驱动程序 与您的硬件。为此,您必须创建一个 .INF 文件,将其与每个 USB 设备的 VID/PID/修订版相关联。如果我没记错的话,libusb-win32 甚至附带了一个实用程序来生成此类 .INF 文件。

    如果您安装此 .INF 文件,例如与 PnpUtil.exe (在 Vista 或更高版本上可用),您可能仍会遇到问题,尽管您比通用 HID 驱动程序更匹配,但仍选择 HID 驱动程序。

    通用 HID 驱动程序通过它们的兼容 ID(即通过 USB 接口(interface)类)匹配设备,而您将通过硬件 ID(具有更高优先级)进行匹配。但是,Windows 可能会优先考虑其他方面,例如您的驱动程序未签名。阅读:How Windows Selects Drivers

    幸运的是,即使在这种情况下,使用自生成证书(使用 CertUtil.exeMakeCat.exeSignTool.exe )签署驱动程序也不是太困难。

    关于windows - 用自定义驱动程序替换 Windows USB 类驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9061895/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com