我需要获取视频卡适配器的唯一 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\4&F7451F8&0&0008
我有两个问题:
显卡适配器的 PNPDeviceID 在所有机器上是否唯一?安装新的新 Windows 时它会改变吗?我知道堆栈溢出中有一些类似的问题,但它们不包含明确的答案,例如 question还有这个question .
为什么
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/