在开发中,有时候我们需要获取唯一标识本机的序列号,你可能会想到如下几种,今天小编就来说说关于mips如何测试?下面更多详细答案一起来看看吧!
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为例。
WMIWMI(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调用,特别是初始化的时候,需要的时间比较长,这个对于性能敏感及要求快速获取相关信息的应用来说,需要慎重考虑。