Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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# Win32_p为不同硬件返回相同的ClassGuid_C#_Usb_Guid_Detect - Fatal编程技术网

C# Win32_p为不同硬件返回相同的ClassGuid

C# Win32_p为不同硬件返回相同的ClassGuid,c#,usb,guid,detect,C#,Usb,Guid,Detect,我对即插即用设备进行了一些C#代码扫描,然后通过匹配VID和PID筛选出2个USB设备(称为dev1和dev2)。 现在,dev1直接连接到我笔记本电脑的USB端口,而dev2连接到USB集线器,该集线器连接到我的扩展底座,该集线器连接到与dev1不同的笔记本电脑USB端口。 Dev1和Dev2是不同的硬件,因此两者的VID+PID不同。我的脚本使用正确的(和不同的)VID+PID检测2个不同的硬件。 但是,两个硬件的GUID相同。这怎么可能呢?它们不应该总是不同的吗 以下是我如何提取GUID和

我对即插即用设备进行了一些C#代码扫描,然后通过匹配VID和PID筛选出2个USB设备(称为dev1和dev2)。
现在,dev1直接连接到我笔记本电脑的USB端口,而dev2连接到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
    ...
   }

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

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

请选中此项。它列出了所有的ClassGuid类型。
ClassGuid不是一个硬件,而是硬件所指的类的类型。

例如,根据参考,两个不同类型的USB硬件都将具有相同的类GUID{36FC9E60-C465-11CF-8056-4453540000}

那么,您将如何分离两个不同的设备?DeviceId是唯一的。它继承自CIM_LogicalDevice,是唯一标识符: