关于许可证的问题,请教高手(十分迷惑)?
许可证可以控制ActiveX的使用
1,许可证是一段文本信息,可以放在单独的文件中,也可以放在组件程序的二进制代码中
或者应用程序中。
问题:许可证的这段文本信息,被谁使用,使用时如何检查是否是正确的?
2,带许可证的ActiveX控件,其类厂需要有IClassFactory2接口,IClassFactory2接口需要实现三个
函数,分别为:
HRESULT GetLicInfo(LICINFO *pLicInfo);//取得一个LICINFO结构,其定义如下
typedef struct tagLICINFO
{
LONG cbLicInfo;//
BOOL fRuntimeKeyAvail;//指明运行时刻是否可用
BOOL fLicVerified;//指明类厂是否已经检查过许可证
}LICINFO;
问题:如何实现这个函数,是不是根据许可证的文本信息,把文本信息解密,来得到LICINFO结构?
LICINFO.cbLicInfo 的含义是什么?
HRESULT RequestLicKey(DWORD dwReserved,BSTR *pBstrKey);//创建许可证
问题:如何实现这个功能,根据什么创建许可证,此处创建的许可证是什么意思?许可证应该
是和组件程序分开的,比如一个.lic文件。然后组件可以判断这个.lic文件是否正确。
HRESULT CreateInstanceLic(punkouter,punkreserved,REFIID riid,BSTR bstrKey,(void**)
ppvObj)//创建组件的实例,需要指定一个许可证
问题:此函数创建创建组件的实例时,需要指定一个正确的bstrKey(许可证),如果许可证不正确
应该是创建不成功? 但是,把参数bstrKey指定为NULL时,是什么含义?
关于这三个函数的问题:
IClassFactory2接口声明了这三个函数,但是这三个函数的实现是不是要自己实现?例如,
ATL的CComClassFactory2就是一个具体实现(本人对ATL并不太了解,只有一个大概的概念)。
3,ActiveX控件的许可证检查,支持设计时和运行时许可证检查
a,设计时的许可证检查,是由包容器程序执行,检查过程是:
包容器程序调用IClassFactory2::CreateInstanceLic(),把bstrKey参数设为NULL,这时
ActiveX控件的类厂对象检查许可证,通常它会找到对应的.lic文件,提取许可证内容,
然后判断是否合法,如果许可证合法,那么创建ActiveX控件,否则返回。
问题:上面这些过程是不是由IClassFactory2::CreateInstanceLic()完成。
如何判断是否合法?我想应该有多种方法,一种是:有一个正确许可证信息,放在组件中,
还有一个.lic文件,读取.lic文件中的信息,比较组件中的许可证信息是否相同,这种
方法可以判断是否合法?不知我的想法是不是正确的?具体的方法有哪些?
b,运行时刻的许可证检查,不同的包容器检查方法不同,例如VB有两个时间点涉及到许可证
的操作,或者在创建应用程序(build)时刻,或者在运行应用程序时刻。
VB的创建时刻的过程是:包容器调用IClassFactory2::GetLicInfo和RequestLicKey函数获取
许可证,把许可证信息嵌入到应用程序的二进制代码中(.exe,.dll)。
问题:GetLicInfo和RequestLicKey函数得到许可证信息的具体过程应该是什么样的?
VB的运行时刻的过程是:包容器程序在创建ActiveX控制时,调用
IClassFactory2::CreateInstanceLic()函数,其bstrKey参数指定为嵌入到应用程序的二进制代
码中的许可证信息,所以这样的应用程序可以在任何一台机器运行,不用担心许可证问题,因为
.exe文件中已经有许可证信息。
问题:vc中的许可证检查过程是什么样的?
4,如果实现了IClassFactory2::CreateInstance()函数,并实现CreateInstanceLic()函数,
是不是可以调用CreateInstance()创建对象,而避开许可证检查?(有没有这种情况?)