ハードウェアUUIDの取得方法(windows、linux)

3763 ワード

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 0 x 80/0 x 83-s/block/sda 1は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;
の例を示します.
1つのGUIDのフォーマットがこのような6 B 29 FC 40-CA 47-1067-B 31 D-00 DD 010662 DAであると仮定する
ここで、Data 1は32ビットであり、上の6 B 29 FC 40に対応する8個の4ビット16進数とみなすことができる
このうちData 2は16ビットであり、4つの4ビット16進数とみなすことができ、上のCA 47に対応する
ここで、Data 3は16ビットであり、4つの4ビット16進数とみなすことができ、上の1067に対応する
このうちData 4は特殊で、8バイトで16個の4桁16進数とみなすことができます
そのData 4[0]、Data 4[1]を取って4つの4桁の16進数を構成し、上のB 31 Dに対応する
そのData 4[2]、Data 4[3]を取って4つの4桁の16進数を構成し、上の00 DDに対応する
そのData 4[4]、Data 4[5]を取って4つの4桁の16進数を構成し、上の0106に対応する
そのData 4[6]、Data 4[7]を取って4つの4桁16進数を構成し、上の62 DAに対応する
*注意:4桁の16進数は1つの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ではole 32を参照する必要があります.lib
linuxでコンパイルする場合はuuidライブラリ(-luuid)をリンクする必要があります.
3、参考文書
ハードディスクパーティションのUUID(この記事を先に読むことをお勧めします)http://blog.csdn.net/smstong/article/details/46417213Windows 7/2008ビューuuidhttp://blog.sina.com.cn/s/blog_483180590100zhn5.htmlデバイスのUUID詳細http://www.51testing.com/html/38/225738-241247.htmlLinux&WindowsでUUID/GUIDを生成http://blog.csdn.net/ghlfllz/article/details/17128393UUID詳細http://blog.chinaunix.net/uid-26495963-id-3150576.html