您是否知道使用Windows XP API重置USB总线的方法?换句话说,我希望操作系统能够启动当前连接的任何USB设备,然后重新自动检测所有内容.
我知道devcon,我想我可以对它进行系统调用,但我希望直接调用API.
Ily*_*lya 12
从内核模式:您可以通过IOCTL_INTERNAL_USB_CYCLE_PORT向其PDO 发送一个特定的USB设备来重新连接,就好像它已被拔掉并重新插入一样.(这只能通过内核模式完成,例如通过辅助驱动程序.)此"循环"操作将导致USB重置,之后将重新枚举设备.例如,如果设备带有不同的USB设备描述符,则可以匹配不同的驱动程序.
从用户模式:您可以通过CfgMgr API弹出设备来完成此操作.例如,要遍历所有USB集线器并弹出所有设备:
GUID_DEVINTERFACE_USB_HUB用SetupDiGetClassDevs(... DIGCF_DEVICEINTERFACE).SetupDiEnumDeviceInfo).DevInst成员:
CM_Get_Child(DevInst)然后CM_Get_Sibling重复遍历集线器的所有子节点(即USB设备).CM_Request_Device_Eject.好吧,用户可以使用Setup API(SetupDiXXX 函数)枚举系统中的USB 设备,然后对每个设备调用WinUsb_ResetPipe,但我不确定这是否是您正在寻找的。我已经有一段时间没有使用 USB 设备了,但我记得,没有标准的方法来重置设备(即模拟断电/通电循环)。如果特定设备可能,则必须向驱动程序发送适当的 IOCTL(使用 DeviceIOControl)。IOCTL 因制造商而异。
| 归档时间: |
|
| 查看次数: |
22918 次 |
| 最近记录: |