com 关于CLSID

来源:互联网 发布:v meca 编程 编辑:程序博客网 时间:2024/06/15 09:30
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>//--生成GUIDconstchar* 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;}



0 0
原创粉丝点击