📜  获取 hwid c# (1)

📅  最后修改于: 2023-12-03 15:41:26.678000             🧑  作者: Mango

获取 HWID (Hardware Identification) 一般指获取计算机硬件的唯一识别码,用于软件注册、防止软件盗版等场景。下面介绍如何使用 C# 获取计算机的 HWID。

一、使用 WMI 获取 HWID
1.1 示例代码
using System.Management;

public static string GetHWID()
{
    ManagementClass mc = new ManagementClass("Win32_ComputerSystemProduct");
    ManagementObjectCollection moc = mc.GetInstances();
    string hwid = string.Empty;
    foreach (ManagementObject mo in moc)
    {
        hwid = mo.Properties["UUID"].Value.ToString();
        break;
    }
    return hwid;
}
1.2 说明

上述代码中使用了 WMI (Windows Management Instrumentation) 具体模块 Win32_ComputerSystemProduct,该模块可以获取计算机的 UUID (Universally Unique Identifier),也就是 HWID。使用 ManagementClass 创建 WMI 对象,然后调用 GetInstances() 获取计算机的信息,最后通过遍历列表的第一个元素获取到 HWID。

1.3 注意点
  • 需要引用 System.Management 命名空间。
  • 不同操作系统中的实现可能存在差异,需要适当调整代码。
二、使用特定的 API 获取 HWID
2.1 示例代码
using System.Runtime.InteropServices;

public static string GetHWID()
{
    StringBuilder sb = new StringBuilder();
    Guid guid = Guid.Empty;
    GetComputerId(ref guid);
    sb.Append(guid.ToString());
    return sb.ToString();
}

[DllImport("Rpcrt4.dll", SetLastError = true)]
private static extern int UuidCreateSequential(ref Guid guid);

private static void GetComputerId(ref Guid guid)
{
    UuidCreateSequential(ref guid);
}
2.2 说明

上述代码中使用了 Rpcrt4.dll 中的 UuidCreateSequential 函数,该函数可以生成符合 UUID 格式的 GUID (Globally Unique Identifier),也就是 HWID。使用 DllImport 将该函数导入到 C# 中并调用,最后返回 GUID 的字符串形式。

2.3 注意点
  • 不同操作系统中的实现可能存在差异,需要适当调整代码。

以上两种方法都可以用于获取计算机的 HWID,可以根据实际情况选择适合的方法。需要注意的是,HWID 不是绝对的,可以通过一些手段进行修改。因此,可以结合其他方法进行验证,如绑定 IP 地址、MAC 地址等。