获取处理器ID或某些硬件信息的最安全方法

时间:2011-01-03 07:18:28

标签: c# .net .net-4.0

我需要获取任何信息以识别机器,到目前为止我使用的是以下内容:

    internal static string GetProcessorId()
    {
        try
        {
            StringBuilder sb = new StringBuilder();
            using (System.Management.ManagementClass theClass = new System.Management.ManagementClass("Win32_Processor"))
            {
                using (System.Management.ManagementObjectCollection theCollectionOfResults = theClass.GetInstances())
                {
                    foreach (System.Management.ManagementObject currentResult in theCollectionOfResults)
                    {
                        sb.Append(currentResult["ProcessorID"].ToString());
                    }
                }
            }
            return sb.ToString();
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception.Message);
            return "";
        }
    }

但是当我在Windows XP(从虚拟机)上运行时,我的currentResult["ProcessorID"]null。我不确定是不是因为我使用的是虚拟机,但可能是因为它是XP。无论如何,我不太相信这段代码。它足够安全吗?我应该以其他方式获得计算机ID吗?这是我正在开发的许可系统的所有部分。

2 个答案:

答案 0 :(得分:6)

对于我编写的小工具(Windows Forms .NET 2.0),我需要类似的东西。

我写了一个helper class,只是通过GetVolumeInformation函数的PInvoke使用一些常见信息,如硬盘序列号。

这绝不是真正安全或防弹,而是准确到足以满足我的需要。

(如果您有兴趣this是工具,如果我被允许链接到)

答案 1 :(得分:3)

即使它奏效了,也不会做你想要的。 ProcessorID为您提供过程产品(具有Y和Z特征的Pentium X)的标识,而不是CPU的特定实例。因此描述如下:

  

描述的处理器信息   处理器功能。对于x86   类CPU,字段格式取决于   处理器支持CPUID   指令。如果指令是   支持,属性包含2   (二)DWORD格式化的值。该   首先是08h-0Bh的偏移,其中   是CPUID的EAX值   指令返回输入EAX设置   到1.第二个是偏移量   0Ch-0Fh,这是EDX值   指令返回。只有   属性的前两个字节是   重要且包含内容   在CPU复位时的DX寄存器全部   其他设置为0(零),和   内容采用DWORD格式。

IBM PC硬件没有任何防伪标识。