显卡适配器的 PNPDeviceID 是否唯一?

Is PNPDeviceID of video card adapter unique?

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

我试图在我的 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&F7451F8&0&0008

我有两个问题:

  1. 显卡适配器的 PNPDeviceID 在所有机器上是否唯一?安装新的 Windows 后它会改变吗?我知道堆栈溢出中有一些类似的问题,但它们不包含明确的答案,例如 question and this question.

  2. 为什么c#函数(&F7451F8&0&0008)的输出中有额外的字符?

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

Is PNPDeviceID of video card adapter unique across all machines?

没有。基本上这个字符串的组成是

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

Instance ID is only unique within the context of the current system, and it may not even be unique for the whole system, only for the device's bus.

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

显卡驱动程序可能在实例 ID 中使用自己的序列号。所以有可能Instance ID是全局唯一的,但是WMI不能保证所有PNP设备。

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