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

Moh*_*san 15 c# wmi winapi

我想使用一些独特的许可系统.我决定使用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;
}
Run Code Online (Sandbox Code Playgroud)

cas*_*One 17

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

此外,您忽略了一台机器可能有多个处理器,因此获取单个处理器的ID无济于事.


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

哈希(不只是有,但一个有少数碰撞)硬件的各种值的可能就足够了.您可能希望使用系统中相当嵌入的东西,例如处理器,主板信息,但不能轻易分离/更改的东西,例如USB驱动器/集线器/等.

  • 所以我该怎么做??我可以从系统获得哪些独特的东西? (7认同)

Pau*_*der 10

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

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

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

另请注意,WMI类通常需要管理员权限才能读取您正在寻找的信息类型,这对Vista和Windows 7用户来说是一个真正的麻烦.

做硬件锁定很难做到.所以我建议1.不要这样做或2.购买已经这样做的商业图书馆.

  • @Paul Alexander:我也知道MAC地址是独一无二的,因为我在我的网络课程中学习过.但是你知道在Windows中,MAC地址可以改变.只需要对它进行一点搜索.你会得到很多资源改变MAC.搜索后请告诉我它是否独一无二. (4认同)
  • 您是否可以配置MAC地址 - 您的代码可以检测到该地址.如果您允许欺骗性MAC地址进入许可指纹 - 这是代码中的错误. (2认同)

Tri*_*ped 6

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

Pentium III支持处理器序列号(PSN). 除了仅支持Pentium III(以及Transmeta的Efficeon和Crusoe处理器)之外,还必须在BIOS中启用功能并引发隐私问题.

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