Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 查找我的Windows PC上可用的USB端口列表_C++_Windows_Visual C++_Usb_Winusb - Fatal编程技术网

C++ 查找我的Windows PC上可用的USB端口列表

C++ 查找我的Windows PC上可用的USB端口列表,c++,windows,visual-c++,usb,winusb,C++,Windows,Visual C++,Usb,Winusb,我搜索了很多,但找不到问题的答案。 我想知道PC中有多少个USB端口可用,例如,对于串行端口,我们有“COM1”和“COM2”。我的电脑(windows7)包含8个USB端口,我需要查找端口列表以及它们是否已使用 我尝试过使用WMI查询,但没有结果,因为它只提供连接设备和USB集线器的详细信息 使用Win DDK,它将显示每个集线器的所有可用端口,但有趣的是,这与我从外部看到的不同。Win DDK将给出每个集线器可寻址的端口数,而不是从外部可见的端口数。任何C或C++代码都会有很大帮助。 理想的

我搜索了很多,但找不到问题的答案。 我想知道PC中有多少个USB端口可用,例如,对于串行端口,我们有“COM1”和“COM2”。我的电脑(windows7)包含8个USB端口,我需要查找端口列表以及它们是否已使用

我尝试过使用WMI查询,但没有结果,因为它只提供连接设备和USB集线器的详细信息

使用Win DDK,它将显示每个集线器的所有可用端口,但有趣的是,这与我从外部看到的不同。Win DDK将给出每个集线器可寻址的端口数,而不是从外部可见的端口数。任何C或C++代码都会有很大帮助。 理想的结果是这样的:

USB 1  USED
USB 2  Not USed 
USB 3  USED 
USB 4  Not Used 
.....

您无法确定这一点。原因很简单,您希望区分计算机内部的集线器和外部的集线器。很可能你电脑上的8个USB端口中至少有一些连接到主板上焊接的集线器上


此外,USB用作仅限内部连接的情况并不少见。例如,许多SD卡读卡器连接到内部USB集线器。对于软件来说,这看起来像一个USB端口,但它在电脑外部当然不可见。

也许可以试试libusb?我不确定这完全是真的。我认为集线器和设备有标志,让系统知道它们是不可移动的。这些标志可用于确定集线器或设备是板载还是外部。@ajs410:我怀疑灰色区域太多。笔记本电脑扩展底座?从技术上讲,USB集线器允许在任何东西上设置可移动位;唯一的保证是,如果未设置可移动位,您将永远不会看到设备被移除。尽管如此,还是值得一试:该标志位于bug类描述符的偏移量7处,是一个每端口位掩码。根集线器通常是不可移动的,但这对于USB3 PC Express卡也是错误的。(它们的父总线是PCI-e)