我有一些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
...
}
答案 0 :(得分:1)
那是因为ClassGuid不是对象标识符,而是类标识符。
如果签出PnPClass属性,您会注意到,当ClassGuid相同时,它也是相同的。
答案 1 :(得分:1)
选中此link。它列出了所有ClassGuid类型。
ClassGuid不是紧跟一种硬件,而是硬件所引用的类的类型。
例如,两个USB类型不同的硬件都将具有相同的ClassGuid {36FC9E60-C465-11CF-8056-444553540000}。