WIN32_Processor::Is ProcessorId Unique for all computers WIN32_Processor::处理器ID是否对所有计算机唯一

17

我希望使用某种独特的东西作为许可证系统。我决定使用来自Win32_Processor管理类的ProcessorID。

我在两个不同的具有相同处理器类型的系统上尝试过。

它向我显示了相同的处理器ID。我正在使用此代码。

public static String GetCPUId()
{
    String processorID = "";

    ManagementObjectSearcher searcher = new ManagementObjectSearcher(
        "Select * FROM WIN32_Processor");

    ManagementObjectCollection mObject = searcher.Get();

    foreach (ManagementObject obj in mObject)
    {
        processorID = obj["ProcessorId"].ToString();
    }

    return processorID;
}

1
我也有同样的问题,但似乎没有答案。这么多年过去了,你找到答案了吗? - qakmak
4个回答

19

不能保证它是唯一的,因为处理器可能根本不支持CPUID指令,在这种情况下,调用就不能保证成功。

此外,您忽略了一台计算机可能有多个处理器,因此获取单个处理器的ID并没有帮助。


正如其他人所指出的那样,如果要为系统获取唯一标识符,最好的方法是创建一个由系统上各组件ID组合而成的ID。

硬件值的哈希(不是任何一个,而是具有非常少的冲突)可能足够。 您可能需要使用在系统中相当嵌入的东西,例如处理器、主板信息,但不是易于分离/更改的东西,例如USB驱动器/集线器等。


10
那我应该怎么做?系统能给我什么独特的东西? - Mohsan

10
大多数许可系统依赖于多个硬件组件创建指纹。没有单个组件被用作唯一的密钥。因此,您可能需要考虑以下内容:
  • 所有网络适配器的MAC地址(如果他们在笔记本电脑上有一个扩展坞或启用/禁用无线网络,则可能会变得棘手)
  • CPUID
  • 主板组件部件号(如IDE或SCSI控制器)
  • 系统驱动器的序列号(不是易于更改的卷标识别码)
  • 等等。
当这些组件整体结合起来时,您将得到机器的唯一表示。当然,危险在于用户更改了他们的计算机上的某些内容。他们将失去许可证吗?他们需要联系您吗?
此外,请注意WMI类通常需要管理员权限才能读取您要查找的信息,这对Vista和Windows 7用户来说将是真正的麻烦。
进行硬件锁定非常难以正确实现。因此,我建议要么1.不要这样做,要么2.购买已经执行此操作的商业库。

我们曾经使用CPUID和MAC地址的组合来生成唯一的ID,但不幸的是后来我们发现我们办公室有三台电脑生成了相同的ID :( - Sajib Mahmood
1
呀,在我亲眼目睹这件事情发生之前,我也认为这是不可能的,但它真的发生了。 - Sajib Mahmood
更有可能是生成代码的软件中存在错误,而不仅仅是同一办公室内三张卡具有相同的MAC地址。如果是这种情况,那么这些机器的网络问题将会很常见。 - Paul Alexander
4
@Paul Alexander:我也知道MAC地址在我的网络课程中是唯一的。但你知道吗,在Windows系统中,MAC地址可以被更改。只需要简单搜索一下,就可以找到很多资源来修改MAC地址。搜索后请告诉我它是否仍然是唯一的。 - Abdur Rahman
2
是的,您可以配置MAC地址 - 您的代码可以检测到。如果您允许欺骗性MAC地址进入许可指纹 - 那就是代码中的漏洞。 - Paul Alexander
1
@PaulAlexander 当虚拟机进入方程式时,重复的MAC地址变得更加普遍,因为它们没有唯一分配的MAC地址。 - reirab

8

ProcessorID或CPUID用于识别处理器的型号和功能集(ARM, x86/x64)。

Pentium III支持处理器序列号(PSN)。除了仅在Pentium III上受支持(以及Transmeta的Efficeon和Crusoe处理器)之外},{{link4:此功能必须在BIOS中启用,并引起了隐私问题

所以,不,ProcessorID并非所有计算机都是唯一的。此外,在您公司的多台计算机中,它很可能在不同计算机之间也不是唯一的(因为许多组织购买相同型号的多台计算机)。

注意:ATPO对每个CPU都是唯一的,但它是在芯片上物理打印的。

1

对于您要查找的唯一字符串,我们使用MAC地址。如果用户没有 MAC地址,我们只允许多个安装。这涵盖了大多数情况,这也是我们想要实现的目标。


@jyz 这取决于您希望ID有多独特。如果这可以避免付费用户遭受服务中断,那么对您的软件进行少量盗版可能是可以接受的。 - wooobie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接