preloader image
获取硬件UUID方法(windows、linux)

获取硬件UUID方法(windows、linux)

1、命令获取uuid

1.1、windows系统中获取设备的UUID的方法:

在命令提示符下输入wmic 再输入csproduct 或 csproduct list full

wmic:rootcli>csproduct list full

Description=计算机系统产品

IdentifyingNumber=*****

Name=*****

SKUNumber=

UUID=81AC7607-1E47-CB11-BC6A-8C7EF84170A7

Vendor=IBM

Version=ThinkPad T42

1.2、Linux系统中获取设备的UUID的方法:

1)# blkid /dev/sda1

/dev/sda1: LABEL="/axs3" UUID="298d198d-aa60-48af-a9f4-638f8f274afa" SEC_TYPE="ext2" TYPE="ext3"

2) # tune2fs -l /dev/sda1 |grep 'UUID'

298d198d-aa60-48af-a9f4-638f8f274afa

3)# ls -l /dev/disk/by-uuid/ |grep sda1 |awk '{print $8}'

298d198d-aa60-48af-a9f4-638f8f274afa

4)#scsi_id -p 0x80/0x83 -s /block/sda1 应该只对SCSI设备有效。

5)# dumpe2fs /dev/sda1 |grep 'UUID'

dumpe2fs 1.39 (29-May-2006)

Filesystem UUID: 298d198d-aa60-48af-a9f4-638f8f274afa

这个命令不建议使用,要是分区比较大,耗时还是比较长的

6)# vol_id /dev/sda1 |grep 'UUID'

ID_FS_UUID=298d198d-aa60-48af-a9f4-638f8f274afa

ID_FS_UUID_ENC=298d198d-aa60-48af-a9f4-638f8f274afa

2、代码生成UUID/GUID(inux & Windows)

请见如下相关文章:

boost uuid: http://blog.csdn.net/ghlfllz/article/details/16881179

uuid in linux vs uuid in window[Parser]: http://http//blog.csdn.net/ghlfllz/article/details/6876181

各种OS中生成UUID的方法: http://linfan.info/blog/2012/04/20/uuid/

GUID是微软对Distributed coumputing environment (DCE) universally unique identifier 的实现,而在Linux下则称作UUID。

通用的GUID的结构如下

typedef struct _GUID {

DWORD Data1;

WORD Data2;

WORD Data3;

BYTE Data4[8];

} GUID;举一个例子:

假设一个GUID的格式是这样的 6B29FC40-CA47-1067-B31D-00DD010662DA

其中Data1 是32位,可以看做8个四位十六进制数,对应于上面的6B29FC40

其中Data2 是16位,可以看做4个四位十六进制数,对应于上面的CA47

其中Data3 是16位,可以看做4个四位十六进制数,对应于上面的1067

其中Data4 比较特殊,是8个字节也就可以看做16个四位十六进制数

取其Data4[0],Data4[1]来组成4个四位十六进制数,对应于上面的B31D

取其Data4[2],Data4[3]来组成4个四位十六进制数,对应于上面的00DD

取其Data4[4],Data4[5]来组成4个四位十六进制数,对应于上面的0106

取其Data4[6],Data4[7]来组成4个四位十六进制数,对应于上面的62DA

*注意:四位十六进制数对应一个GUID字符。

具体代码:

#include

#include

#include

using namespace std;

#ifdef WIN32

#include

#else

#include

#endif

GUID CreateGuid()

{

GUID guid;

#ifdef WIN32

CoCreateGuid(&guid);

#else

uuid_generate(reinterpret_cast(&guid));

#endif

return guid;

}

std::string GuidToString(const GUID &guid)

{

char buf[64] = {0};

#ifdef __GNUC__

snprintf(

#else // MSVC

_snprintf_s(

#endif

buf,

sizeof(buf),

"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",

guid.Data1, guid.Data2, guid.Data3,

guid.Data4[0], guid.Data4[1],

guid.Data4[2], guid.Data4[3],

guid.Data4[4], guid.Data4[5],

guid.Data4[6], guid.Data4[7]);

return std::string(buf);

}请注意:

windows下需要引用 ole32.lib

在linux下编译时需要链接uuid库(-luuid)

3、参考文章

硬盘分区的UUID(推荐先看该文章)

http://blog.csdn.net/smstong/article/details/46417213

windows 7/2008 查看uuid

http://blog.sina.com.cn/s/blog_483180590100zhn5.html

设备的UUID详解

http://www.51testing.com/html/38/225738-241247.html

Linux & Windows上生成UUID/GUID

http://blog.csdn.net/ghlfllz/article/details/17128393

UUID详解

http://blog.chinaunix.net/uid-26495963-id-3150576.html

Copyright © 2088 暴雪游戏怀旧特刊 All Rights Reserved.
友情链接