Win32_PnPEntity为不同的硬件返回相同的ClassGuid

时间:2019-07-18 08:18:57

标签: c# usb guid detect

我有一些C#代码扫描即插即用设备,然后通过匹配VID和PID过滤掉2个USB设备(分别称为dev1和dev2)。
现在,dev1直接连接到笔记本电脑的USB端口,而dev2连接到USB集线器,该USB集线器连接到我的扩展坞,该集线器连接到与dev1不同的笔记本电脑USB端口。
Dev1和Dev2是不同的硬件,因此VID + PID两者都不同。我的脚本确实检测到具有正确(和不同)VID + PID的2种不同硬件。
但是,两个硬件的GUID相同。这怎么可能?他们不应该总是不同吗?

有关信息,这是我提取GUID和VID + PID的方式:

 ManagementObjectCollection collection;
 using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_PnPEntity"))
      collection = searcher.Get();

  foreach (var device in collection)
  {
    string deviceIdValue = (string)device.GetPropertyValue("DeviceID");  // Provides VID and PID
    string guidValue = (string)device.GetPropertyValue("ClassGuid");     // Provide the GUID
    ...
   }

2 个答案:

答案 0 :(得分:1)

那是因为ClassGuid不是对象标识符,而是类标识符。

如果签出PnPClass属性,您会注意到,当ClassGuid相同时,它也是相同的。

答案 1 :(得分:1)

选中此link。它列出了所有ClassGuid类型。
ClassGuid不是紧跟一种硬件,而是硬件所引用的类的类型。
例如,两个USB类型不同的硬件都将具有相同的ClassGuid {36FC9E60-C465-11CF-8056-444553540000}。