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

标签 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 地址相同) .

最佳答案

Is PNPDeviceID of video card adapter unique across all machines?

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

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

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

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

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

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

关于c# - 显卡适配器的 PNPDeviceID 是否唯一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51908349/

相关文章:

C# - Try-Catch-Finally 返回

c# - Math.Floor vs 在 C# 中转换为整数类型

C# 从不同线程调用控制

php - 如何生成与数据库记录匹配的唯一 URL 变量?

iphone - 检索 iOS 设备标识符

c# - 引用 .Net Core 3.1 NuGet 包的 .Net 5 Visual Studio 项目/解决方案如何成功编译?

javascript - jquery 中的 "closest()"方法不起作用

c# - 如果包含句点(.),如何拆分字符串?

c# - Windows 条形码阅读器服务

java - 创建唯一的消息 ID,例如 Whatsapp