C# 视频卡适配器的PNPDeviceID是否唯一?
我需要获得视频卡适配器的唯一id。在搜索设备的属性时(使用Windows的设备管理器),我注意到有一个名为C# 视频卡适配器的PNPDeviceID是否唯一?,c#,winforms,uniqueidentifier,C#,Winforms,Uniqueidentifier,我需要获得视频卡适配器的唯一id。在搜索设备的属性时(使用Windows的设备管理器),我注意到有一个名为硬件ID的属性,如下图所示 我试图在我的winform应用程序中获取这些ID。我发现这个方法: string VideoCardInfoID() { ManagementObjectSearcher objvide = new ManagementObjectSearcher("select * from Win32_VideoController"); string output
硬件ID
的属性,如下图所示
我试图在我的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
我有两个问题:
c#
函数(\4&F7451F8&0&0008
)的输出中有其他字符\\
仅在当前系统的上下文中是唯一的,甚至可能对整个系统都不是唯一的
也就是说,如果计算机中安装了两个相同的视频卡,它们将具有相同的设备ID,但实例ID不同
图形卡驱动程序可能在实例ID中使用自己的序列号。因此,实例ID可能是全局唯一的,但WMI无法保证所有PNP设备都是唯一的
此时,如果可能的话,您可能必须使用每个供应商记录的方法来确定设备的序列号。如果您在机器上安装了两次完全相同的适配器品牌和型号,则它们将具有完全相同的硬件id。操作系统使用来激活正确的驱动程序。硬件id后的额外内容使其唯一,这是。整个字符串hardware+instance id是“设备实例id”。@HansPassant从您的评论中我了解到,
硬件id
不是唯一的id,两个视频适配器可能具有相同的硬件id
。Windows向硬件ID添加附加字符串以使其唯一。如果我错了,请更正我。您可以使用首选引用(名称可以是一个)在Win32_PnPEntity中执行交叉检查,并提取“硬件ID”,它是供应商ID、硬件版本、,以逗号分隔的引用列表中的序列号等。实例ID应附加到PNPDeviceID或DeviceID。(现在无法验证,请看一下)。@Jimi感谢您的回答,但重要的问题(视频卡适配器的PNPDeviceID是否唯一?)仍然没有回答。我想我从未听说过PNPDeviceID的“跨所有机器”要求。ID+实例ID(也适用于Rev\u N
,修订号)的组合用于唯一标识单机上的硬件。Wmi类始终将HardwareId与SystemName关联,SystemName是查询所引用的计算机的名称。这些ID来自制造商。它们是独一无二的吗?不适用。询问Hans Passant;如果他不知道,你的下一站就是英伟达总部。如果他们知道并且对此有独特的答案。@Ahmed Shamel这就是你要寻找的答案。别贪心,记下答案,然后分发赏金。。。