Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 视频卡适配器的PNPDeviceID是否唯一?_C#_Winforms_Uniqueidentifier - Fatal编程技术网

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

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。在搜索设备的属性时(使用Windows的设备管理器),我注意到有一个名为
硬件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
我有两个问题:

  • 视频卡适配器的PNPDeviceID是否在所有机器上都是唯一的?安装新的全新Windows时是否会更改?我知道在堆栈溢出中有一些类似的问题,但它们并没有包含明确的答案,比如这个和这个

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

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

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

    不,这个字符串的基本组成是

    \\
    
    仅在当前系统的上下文中是唯一的,甚至可能对整个系统都不是唯一的

    也就是说,如果计算机中安装了两个相同的视频卡,它们将具有相同的设备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这就是你要寻找的答案。别贪心,记下答案,然后分发赏金。。。