WIN32_Processor ::是ProcessorId对所有计算机都是唯一的

时间:2009-07-09 03:56:14

标签: c# winapi wmi

我想使用一些独特的许可系统。我决定使用Win32_Processor管理类的ProcessorID。

我尝试了两种具有相同处理器类型的不同系统。

它显示了两个系统的相同processorID。我正在使用此代码

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;
}

4 个答案:

答案 0 :(得分:17)

不,不能保证它是唯一的,因为处理器甚至可能不支持CPUID指令,在这种情况下,无法保证呼叫成功。

此外,您忽略了计算机中可能包含多个处理器,因此获取单个处理器的ID无济于事。


正如其他人所指出的那样,如果你想获得系统的唯一ID,最好的办法是创建一个id,它是系统中各种组件id的混合物。

硬件的各种值的哈希(并且不仅仅是任何,但是具有非常少量冲突的哈希)就足够了。您可能希望使用系统中相当嵌入的东西,例如处理器,主板信息,但不能轻易分离/更改,例如USB驱动器/集线器/等。

答案 1 :(得分:10)

大多数许可系统依靠多个硬件组件来创建指纹。没有单个组件用作唯一的唯一键。因此,您可以考虑以下因素:

  • 所有网络适配器的MAC地址(如果有扩展坞或在笔记本电脑上启用/禁用无线网络,可能会变得棘手)
  • CPUID
  • 主板组件部件号(如IDE或SCSI控制器)
  • 系统驱动器的序列号(非容易更改的卷ID)

当作为一个整体组合时,您将获得机器的独特表示。当用户在他们的机器上改变某些东西时,当然会有危险。他们失去执照吗?他们有联系你吗?

另请注意,WMI课程通常需要管理员权限才能阅读您正在寻找的信息类型,这对于Vista& amp; Windows 7用户。

进行硬件锁定非常困难。所以我建议1.不要这样做或2.购买已经这样做的商业图书馆。

答案 2 :(得分:6)

ProcessorID或CPUID用于标识处理器的模型和功能集(ARMx86/x64)。

Pentium III支持处理器序列号(PSN)。 In addition to only being supported on the Pentium III (and Transmeta's Efficeon and Crusoe processors)feature had to be enabled in BIOS and raised privacy concerns

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

答案 3 :(得分:1)

对于您正在寻找的唯一字符串,我们使用MAC地址。如果用户没有MAC address,我们只允许多次安装。它涵盖了大多数我们想要完成的案例。