7

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:由于没有出现这方面的信息,我们现在正在研究一种基于软件的银行切换算法,该算法可以直接禁用和重新启用设备。我们希望能够以任意大小构建它,但当然该技术目前尚未得到证实。我会保持这个线程的最新进展。

4

1 回答 1

1

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

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

一种简单的银行转换方法

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

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

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

于 2013-05-27T09:32:41.853 回答