【问题标题】:bank-switch usb devices in Windows8Windows 8 中的银行切换 USB 设备
【发布时间】:2013-05-14 12:21:04
【问题描述】:

USB 2.0 标准支持禁用单个集线器端口。我正在寻找从 Windows 8 下的用户代码调用的 API,特别是使用现有的 Windows 用户模式驱动程序在 C# 或 C++ 中禁用集线器端口。

看起来禁用集线器端口的 IOCTL 在 WDF 中已被弃用。

我已经构建并使用了 DevCon - 它会通过 DDK 禁用设备,但不会禁用集线器端口。

WinUSB 是一个强大的接口,需要将 WinUSB.sys 指定为您的驱动程序堆栈。但是,我不认为它的库 setupapi.lib 和 winusb.lib 提供这种级别的集线器控制。

我非常感谢在 Windows 8 中指向正确用户模式 ​​API 的指针,尤其是 C# 接口。如果不存在这样的 API,那么了解这也将非常有帮助。

-- 新增 6/3: 由于没有出现这方面的信息,我们现在正在研究一种基于软件的银行切换算法,该算法可以直接禁用和重新启用设备。我们希望能够以任意大小构建它,但当然该技术目前尚未得到证实。我会及时更新这个帖子。

【问题讨论】:

  • 我希望这将被重新打开,因为我无法在其他任何地方找到此信息。如果需要更多编辑,请告诉我。
  • WinUSB 似乎是用于访问 USB 设备的 MS api。我不知道它是否会做你想要的,但它可能值得一看。另见stackoverflow.com/questions/12036077/usb-api-for-windows
  • 感谢投票重新提出这个问题,因为它已经缩短并且更重要了。

标签: c# .net windows-8 usb


【解决方案1】:

您是否考虑过实施一些硬件来实现相同的目标?

由于似乎还没有人提供纯软件解决方案,这很可能被证明是让事情顺利进行的最快方法。此外,它将完全独立于操作系统,这可能有助于未来的可维护性。

一种简单的银行切换方法

作为一个非常基本的示例,您可以使用现成的串行继电器盒(例如this one)来单独控制通往所有集线器的电源。这样,您可以一次启用一个“终端集线器”来访问连接到该集线器的设备。请务必使用仅在存在外部电源时才工作的自供电集线器 - 我见过不少有源集线器在没有外部电源时仍能连接。

严重的黑客攻击:DIY USB 代理设备

既然您提到您有嵌入式软件开发经验,您还可以考虑构建一个直通设备,作为集线器(带有设备)和主机之间的“代理”。它可以将所需的 USB 命令发送到下游的集线器以禁用/启用端口。如果不需要高数据速率,则可以使用 Arduino 和 USB Host Shield 构建此类设备。

【讨论】:

  • 是的,我们肯定在研究硬件,但由于这个项目时间紧迫,硬件是我们最不喜欢的方法。
  • 为了结束这件事,我在微软的一位工程师那里工作了几个月,我确定银行切换软件不起作用。根据 USB 规范,它应该,但至少对于 Windows 7,低级 USB 驱动程序实现有时不能正确地重新启用节点,它们最终会下降。非常不幸!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 2014-01-03
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多