一般来说,您需要识别组件的组合,并了解组件可以并且将会随着时间的推移而变化。您需要容差算法来做出明智的猜测,以了解更改何时代表您之前识别的机器的更新或您以前未见过的新机器。
一种简单的方法是,当您需要确定正在处理的机器并与您之前见过的机器的快照进行比较时,枚举您列出的所有组件。如果任何序列号匹配,您可以非常安全地假设您正在处理同一台机器(尽管当然有可能有人将硬盘驱动器转移到新机器......但是,这就是simple方法。商业级启发法要复杂得多。)。
使用这种专门用于软件激活的方法受到积极执行的专利的保护,因此请小心您所做的事情。如果您确实想这样做来保护您的软件,那么最好使用商业解决方案。有些是相当实惠的。谷歌“软件激活”选项。
这里有一些获取特定系统信息的参考(并非所有都是特定的 C 食谱,但每种情况都可以使用 C)。
硬盘窗口http://www.codeproject.com/KB/cs/hard_disk_serialno.aspx http://www.codeproject.com/KB/cs/hard_disk_serialno.aspx
硬盘Linuxhttp://www.webmasterworld.com/forum40/957.htm http://www.webmasterworld.com/forum40/957.htm
BIOS 窗口http://msdn.microsoft.com/en-us/library/aa394077(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/aa394077(v=vs.85).aspx
BIOS Linuxhttp://www.dufault.info/blog/a-better-way-to-find-your-bios-version-in-linux/ http://www.dufault.info/blog/a-better-way-to-find-your-bios-version-in-linux/
MAC 地址窗口C++:获取 Vista 上网络适配器的 MAC 地址? https://stackoverflow.com/questions/221894/c-get-mac-address-of-network-adapters-on-vista
MAC地址Linuxhttp://www.linuxquestions.org/questions/programming-9/linux-确定-mac-address-from-c-38217/ http://www.linuxquestions.org/questions/programming-9/linux-determining-mac-address-from-c-38217/