视频卡适配器的PNPDeviceID是否唯一?

时间:2018-08-18 11:52:08

标签: c# winforms uniqueidentifier

我需要获取视频卡适配器的唯一ID。在使用Windows的设备管理器搜索设备的属性时,我注意到有一个名为Hardware Ids的属性,如下图所示。

Hardware Ids of video card adapter

我试图在我的winform应用程序中获取这些ID。我找到了这种方法:

string VideoCardInfoID()
{
  ManagementObjectSearcher objvide = new ManagementObjectSearcher("select * from Win32_VideoController");
  string output = string.Empty;
  foreach (ManagementObject obj in objvide.Get())
  {
    output += (obj["PNPDeviceID"] + "\n");             
  }
  return output;
}

此代码的输出是:

PCI\VEN_10DE&DEV_1055&SUBSYS_908A104D&REV_A1\4&F7451F8&0&0008

我有两个问题:

  1. 视频卡适配器的PNPDeviceID在所有计算机上是否都是唯一的?安装新的新Windows时会发生变化吗?我知道堆栈溢出中也存在一些类似的问题,但是它们没有明确的答案,例如,这个question和这个question

  2. 为什么c#函数(\4&F7451F8&0&0008)的输出中还有其他字符?

更新:我尝试安装新的Windows,并且硬件ID和PNPDeviceID仍然相同,但是我仍然不知道PNPDeviceID在所有计算机上是否唯一(我的意思是与MAC地址相同)

1 个答案:

答案 0 :(得分:3)

  

视频卡适配器的PNPDeviceID在所有计算机上是否都是唯一的?

不。该字符串的本质是

<Bus>\<Device ID>\<Instance ID>

Instance ID仅在当前系统的上下文中是唯一的,并且 甚至对于整个系统来说都不是唯一的,only for the device's bus

也就是说,如果您在计算机中安装了两个相同的视频卡,则它们将具有相同的设备ID,但实例ID不同。

图形卡驱动程序可能在实例ID中使用其自己的序列号。因此,实例ID可能是全局唯一的,但WMI无法为所有PNP设备做出保证。

这时,如果可能的话,您可能必须使用按供应商记录的方式确定设备的序列号。