com 關於CLSID

CLSID的生成

CLSID是指windows系統對於不同的應用程序,文件類型,OLE對象,特殊文件夾以及各種系統組件分配一個唯一表示它的ID代碼,用於對其身份的標示和與其他對象進行區分。
先得說下GUID,它是Globally Unique Identifier的簡稱,中文翻譯爲“全局唯一標示符”,在Windows系統中也稱之爲Class ID,縮寫爲CLSID。
CLSID像人身份證一樣,是個類的唯一標識:
ID是英文IDentity的縮寫,是身份標識號碼的意思,就是一個序列號,也叫帳號,是一個編碼,而且是唯一的。
class是對某種類型的對象定義變量和方法的原型,是ID的樣式或屬性的補充。
在註冊表中展開HKEY_CLASSES_ROOT\CLSID\,在CLSID分支下面就可以看到很多的ID,這些ID對應的都是系統裏面不同的程序,文件,系統組件等。
CLSID是一個128位的隨機數,爲了確保它的隨機性,避免重複,它的算法主要是從兩個方面入手:
1. 一部分數字來自於系統網卡的序列號,由於每一個網卡的MAC地址都不一樣,因此產生的ID也就會有差異。
2. 另外一部分數字來自於系統的當前時間。
有人計算過按照上面兩種方式得到ID的隨機性,得出的結論是:即使一臺電腦每秒產生10000000個CLSID,也可以保證3240年不會重複。

爲了避免衝突,微軟使用GUID作爲CLSID,有生成GUID的函數,主要是根據當時的時間、機器地址等信息動態產生,理論上可保證全球唯一。


生成GUID的C++代碼

//--生成GUID的代碼
//--相關程序/微軟guidgen.exe
#include <objbase.h>
#include <stdio.h>
//--生成GUID
constchar* newGUID()
{
    staticcharbuf[64] = {0};
    GUID guid;
    if(S_OK == ::CoCreateGuid(&guid))
    {
        _snprintf(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(constchar*)buf;
}
intmain(intargc,char* argv[])
{
    //--COM
    CoInitialize(NULL);
    printf(newGUID());
    printf("\r\n");
    //--COM
    CoUninitialize();
    return0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章