获取主板的序列号
Getting the motherboard's serial number
我想将程序绑定到特定的计算机,为此我要使用主板的序列号为唯一标识符。
尽管我可以找到一些C#和Java的示例,但我找不到C 可靠的东西(我读到WMI可能会根据硬件而失败(,但是肯定有一种方法可以在C 中执行此操作?
编辑:换句话说,我想要的是一个简单而基本的许可系统。为了更清楚,以下是:
#define USER_SERIAL 123456789
double GetMotherBoardSerialNumber();
// ...
double currentSerial = GetMotherBoardSerialNumber();
if(currentSerial != USER_SERIAL) {
exit 1;
}
显然不是完美的,但是我没有任何服务器ATM来设置帐户系统,因此这可能是一个临时解决方案。
如果您想要真实的序列号,我建议解析SMBIOS表。
我第一次跳入可靠的真实硬件ID时,我最终直接从映射的物理内存(Windows XP(读取了SMBIO。我曾尝试过许多人在此之前推荐的其他方法,但有些方法非常不可靠,在部署中,人们注意到,客户遍布其他一些方法。20多个人如何具有相同的系列?这是没有意义的,似乎OEM的固定字段。
从Windows Vista开始,可以通过GetSystemFirmwaretable检索表的正确方法。这是因为不再可以从用户模式上映射Windows Vista上的物理内存(XP64& Server 2003也一样(
(getSystemFirmWaretable可用于获取SMBIO数据,然后您可以根据SMBIOS规格解析这些数据。表中有大量数据,因此生成唯一标识符的数据不应该太困难。iirc通常您甚至会得到DRAM等的序列...
我还建议彻底测试此通话,并制定备份计划。在某些情况下,它只是失败了,并且对导致失败的环境有一个很好的了解将为您节省很多时间。如果我的记忆在Vista时代就为我服务,我对UAC和特权提高有问题,但是MS可能已经改变了!
您可以查看此注册表密钥:[HKEY_LOCAL_MACHINEHARDWAREDESCRIPTIONSystemBIOS]
。您会看到以下:
"BiosMajorRelease"
"BiosMinorRelease"
"ECFirmwareMajorRelease"
"ECFirmwareMinorRelease"
"BaseBoardManufacturer"
"BaseBoardProduct"
"BaseBoardVersion"
"BIOSReleaseDate"
"BIOSVendor"
"BIOSVersion"
"SystemFamily"
"SystemManufacturer"
"SystemProductName"
"SystemSKU"
"SystemVersion"
如果这不满意,您仍然可以使用GetSystemInfo函数。我认为主板信息的这种使用将无助于您作为唯一的ID。如果您想获得唯一的计算机标识符,请使用GUID或其他内容。要创建GUID,您需要仅:
GUID gidReference;
HRESULT hCreateGuid = CoCreateGuid( &gidReference );
- 输入扑克牌的序列号(从0到35),并确定扑克牌的花色和尊严
- 如何在C++中动态生成带有序列号的文件名
- 需要忽略日期/序列号,但匹配字符串其余部分的正则表达式
- 来自本机的安卓 O 设备序列号
- USB序列号显示特殊字符
- 如何使用 /dev/xxx 路径中的C++获取 Ubuntu 中设备的 USB VID、PID 和序列号
- 如何在 Windows 上从 C++11 统计信息对象的文件序列号中查找文件名
- 获取主板的序列号
- 获取X509代码签名证书的序列号,以不受管理的C/C 签名
- 我正在尝试检索硬盘驱动器的序列号或电池标签
- C++ - 视窗 - BIOS 序列号 - 如何获取
- 如何在C或C 中获取主板地址或处理器ID /序列号
- c程序的Linux程序,以获取非根源用户的设备序列号
- 使用 WinRT 检索设备的序列号
- rand() 即使在我的 Mac 上播种时也会给出序列号
- 获取tcp数据包的序列号
- 处理器序列号
- 在一系列char*缓冲区中查找序列号
- 获取HD/分区序列号
- 我怎么能得到CPU和主板序列号与Qt/ c++