65.9K
CodeProject 正在变化。 阅读更多。
Home

搜索可靠的硬件 ID

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (98投票s)

2012年1月24日

CPOL

3分钟阅读

viewsIcon

313542

downloadIcon

17839

计算机如何被识别以生成唯一 ID

引言

许多桌面应用程序开发者需要唯一识别运行他们软件的计算机。 这种识别必须产生一个唯一的数据元素,该元素对于每台计算机都不同,并且在任何给定的计算机上都会再现相同的 ID。 注意:还有一篇优秀的文章,重点介绍 BIOS UUID。 该文章由撰写。

WMI 类集

Windows 提供了一组类,可用于大多数硬件枚举和识别任务,这些类名为 WMI 或 Windows Management Instrumentation。 这些是 Windows 驱动程序模型 (WDM) 的扩展。

WMI 提供每个检测组件的静态信息和有关任何更改的动态通知。 大多数编程语言都可以用于本地和远程管理计算机和服务器,枚举其检测组件并针对发生的更改发出警报。

在我的研究过程中,我得出的结论是,如果速度和可靠性很重要,最好通过 Win32 API 访问硬件,而不要使用 WMI。 我经历过很多延迟,有时 WMI 无法检测到 CPU ID 等元素。

本文重点介绍直接方法,用于获取此数据而不使用 WMI。

获取唯一的 CPU ID

似乎最好的解决方案是对 CPU 唯一标识号(或 CPU ID)进行采样。 但是,存在几个问题使得无法依赖读取 CPU ID。

首先,除了旧的 Pentium III 之外,大多数 CPU 都没有唯一的 CPU 序列号。 英特尔出于隐私原因删除了此功能。

仍然可以从整个主板生成唯一的 ID。 这当然有效,但是不同类型的主板和制造商数量巨大,使得几乎不可能生成涵盖所有主板的唯一 ID。

事实上,一家名为 CPU ID 的法国公司专注于该领域,并花费大量资源来学习每种类型的主板和 CPU,以便涵盖所有主板和 CPU。

以下屏幕截图显示了可以为每台机器收集的详细信息。

他们的 SDK 可以从此处下载,并且可以作为静态库(根据特殊请求)或带有任何已开发应用程序的 DLL 使用。 坏消息是,即使是 CPUID 的人也说,不可能基于给定机器的 CPU 或主板生成唯一的硬件 ID。

基于 MAC 地址的硬件 ID

获取这种唯一 ID 的下一个选择是对 MAC 地址进行采样。 首先,什么是“MAC 地址”? 它代表媒体访问控制。 MAC 地址长 48 位(6 字节)。 GetMACAddress 代码示例说明了如何获取 MAC 地址。

但是,这种方法存在一个问题:MAC 地址可以很容易地更改为新的地址...

硬盘序列号

似乎获得机器 ID 的唯一可靠解决方案是使用主硬盘的序列号。 第二个示例 GetHDSerialNumber 展示了如何获取此 ID。 根据我的经验,这种方法是最好的,也是生成基于唯一机器的硬件 ID 最可靠的方法。

我想补充一点,要使用的序列号必须是由制造商设置的序列号,而不是由操作系统设置(且可以更改)的序列号。

历史

  • 2015 年 1 月 28 日:初始版本
© . All rights reserved.