USB 2.0标准支持禁用各个集线器端口。我正在寻找一个API来从Windows 8下的用户代码调用,特别是使用现有的Windows用户模式驱动程序在C#或C ++中禁用集线器端口。
在WDF中已经弃用了禁用集线器端口的IOCTL。
我已经构建并使用了DevCon - 它将通过DDK禁用设备,但不会禁用集线器端口。
WinUSB是一个功能强大的界面,需要将WinUSB.sys指定为驱动程序堆栈。但是,我不认为它的库,setupapi.lib和winusb.lib提供这种级别的集线器控制。
我真的很感激指向Windows 8中正确的用户模式API,特别是C#接口。如果不存在这样的API,那么知道它也会非常有用。
- 新增6/3: 由于没有关于此的信息,我们现在正在研究一种基于软件的银行切换算法,该算法可以直接禁用和重新启用设备。我们希望能够以任意大小构建它,但当然这项技术尚未得到证实。我会让这个帖子保持最新状态。
答案 0 :(得分:1)
您是否考虑过实施一些硬件来实现同样的目标?
由于似乎没有人拥有纯软件解决方案,这可能是最快捷的方式。此外,它将完全独立于操作系统,这可能有助于未来的可维护性。
作为一个非常基本的示例,您可以使用现成的串行中继盒(例如this one)来控制分别到达所有集线器的电源。这样,您可以一次启用一个“终端集线器”来访问连接到该集线器的设备。一定要使用仅在外部电源供电时才能工作的自供电集线器 - 我看到很多电源集线器在没有外部电源时仍能连接。
由于您提到您具有嵌入式软件开发经验,因此您还可以考虑构建一个直通设备,充当集线器(带设备)和主机之间的“代理”。它可以将所需的USB命令发送到下游的集线器以禁用/启用端口。如果不要求高数据速率,可以使用Arduino和USB Host Shield构建这样的设备。