在开发中,有时候我们需要获取唯一标识本机的序列号,你可能会想到如下几种,今天小编就来说说关于mips如何测试?下面更多详细答案一起来看看吧!

mips如何测试(通过WMI获取硬件序列号)

mips如何测试

如何标识一台机器

在开发中,有时候我们需要获取唯一标识本机的序列号,你可能会想到如下几种

1) MAC地址

2) CPU ID

3) 硬盘ID

MAC地址

因为MAC地址可能会被修改,而且本机可能会有多张网卡,同时网卡的数量会随着网卡被启用或禁用而发生变化,所以暂时就不考虑使用MAC地址作为本机硬件标识了。

CPU ID

这个看起来不错,但是有个问题:CPU厂商有时候为了规避隐私问题,会对同一批次的CPU打上同一个ID,这样就不能通过CPU ID唯一的标识机器了。

硬盘ID

每一块硬盘在出厂的时候,厂商会烧录一个唯一的ID到硬盘中,这个标识通常可以获取到,并且可以作为机器ID,但是在比较老的硬盘上可能没有这个ID,另外在虚拟机中,也可能是获取不到硬盘ID的。哎,这种方法也是个问题。

综合以上的描述,我建议使用多种方法联合起来对机器进行标识,防止其中一个标识因无法获取而无法最终实现硬件唯一性标识。

下面我们通过WMI的方法来获取硬件序列号,这里以CPU ID为例。

WMI

WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机。

WMI初始化

在使用WMI进行WQL语句查询之前,我们需要对WMI基础设施进行初始化。一般包含如下几个步骤:

1) COM库初始化(CoInitializeEx)

2) COM库安全机制初始化(CoInitializeSecurity)

3) 创建IWbemLocator接口实例(CoCreateInstance)

4) 连接至WMI服务(ConnectServer)

5) 设定请求代理的安全级别(CoSetProxyBlanket)

以下是具体代码片段

使用WQL进行查询

WMI支持WQL语句查询,这个WQL非常类似SQL,例如,查询CPU信息的语句如下:

SELECT * FROM win32_Processor

读取CPU ID的步骤如下

1) 执行WQL查询语句(ExecQuery)

此调用会创建一个IEnumWbemClassObject接口的枚举器实例,后面会用到这个枚举器

2) 枚举CPU个数(Next),返回一个IWbemClassObject对象代表当前CPU

3) 调用IWbemClassObject对象的Get方法获取具体的属性,例如CPU ID。

4) 释放IWbemClassObject对象

5) 当枚举完毕,释放IEnumWbemClassObject对象

具体代码片段如下:

WMI释放

当不再使用WMI组件的时候,一定要记得释放相关的接口实例,以及COM库,避免资源泄漏。

总结

1) WMI的好处在于统一的接口和调用方式,操作系统直接在底层提供了支持,不需要我们深入到硬件层面去了解各种不同的硬件信息。

2) 不好的地方:WMI调用,特别是初始化的时候,需要的时间比较长,这个对于性能敏感及要求快速获取相关信息的应用来说,需要慎重考虑。