我想制作一个c ++安装部署的Windows应用程序来检查硬件指纹(以验证用户是否只在他的计算机上使用该应用程序)。经过一些网络研究,我认为WMI是我的工具。我从一个简单的MFC应用程序开始,一开始我想打印出MotherBoard SerialNumber。就在这时,整个事情都崩溃了。我检查了XP和Win7,并且没有返回此属性。这让我思考 - 如果某些类/属性不能在某些Windows版本上运行会怎么样?还是一些硬件配置?我真诚地不喜欢那样。我对指纹的即时想法是MAC地址(我的应用程序是严格的网络驱动的,所以如果机器没有网络连接则完全没用)。但是,有些机器可以有几个MAC设备。并且一些MAC可能是虚拟的,可以在卸载后从系统中消失(即VPN客户端)。我认为MAC地址可以很容易地改变,但如果我对数字进行哈希编码,用户可能不知道使用它。所以我问你的建议 - WMI是硬件指纹的好工具吗?如果是 - 你建议使用哪些类/属性?它们应该适用于所有机器和系统,同时也是安全/不可更改的(如果用户更改整个硬件,我们无法做很多事情。)如果WMI不是一个好的解决方案,那么你会建议其他C ++框架?以下 - 然后使用哪些HD属性。
答案 0 :(得分:5)
是的,WMI是执行此任务的一个非常好的选择,关键是选择要使用的正确类和属性,甚至可以更好地访问SMBIOS表以获取有关系统的信息并生成唯一标识符。前段时间我在博客上写了两个主题,代码是在delphi中,但可以很容易地翻译成C ++
答案 1 :(得分:-1)
根据我的经验,编号WMI似乎很慢而且有时不准确。最好使用较低级别的方法并使用Win32 API直接查询硬件。