如何注册控件使其成为安全的?

jun 2000-05-25 09:11:00
我用vc做了一个activex控件,用ie使用该控件时说:该页存在潜在的对activex控件不
安全的信息.....,我应该如何注册该控件使其成为可以安全使用的?
...全文
399 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
codemon 2001-09-07
  • 打赏
  • 举报
回复
gz
lpt 2001-09-01
  • 打赏
  • 举报
回复
flyingknight(玫瑰骑士) 这位仁兄,请给我一个例子
MAIL:lingping@263.net
huitor 2000-05-31
  • 打赏
  • 举报
回复
hi,
Tommy Chang 2000-05-31
  • 打赏
  • 举报
回复
其实在activex sdk中包含这些东西的
http://msdn.microsoft.com/downloads/sdks/ActiveXSDK/axsdk.asp
最全的这些新工具和文档都分别包含在msdn和platform sdk里面的。
msdn最新的是4月版,platform sdk也是4月版。
makecert的用法在文档里面写的很清楚。
但有一点,如果你颁发证书的根不在客户端那里信任发布商之列的话,还是要弹出一个对话框,yes or no那种。

Good luck.
:)
royluo 2000-05-30
  • 打赏
  • 举报
回复
谢谢flyingknight
不过我想说的是
当用户从网上第一次下载了你这个控件
IE就会立即检查你的控件包的数字签名
这个时候,你的这段设置代码并没有运行
如果没有数字签名
IE一样会弹出安全警告
flyingknight 2000-05-30
  • 打赏
  • 举报
回复
给你一段代码...如果你需要,我可以给你发一个完整的sample
要注意,它还是没有数字签名,但是不会每次运行的时候都出现警告了...

BOOL CColorEditCtrl::CColorEditCtrlFactory::UpdateRegistry(BOOL bRegister)
{
// TODO: Verify that your control follows apartment-model threading rules.
// Refer to MFC TechNote 64 for more information.
// If your control does not conform to the apartment-model rules, then
// you must modify the code below, changing the 6th parameter from
// afxRegInsertable and afxRegApartmentThreading to afxRegInsertable.

if (bRegister)
{
HRESULT hr = S_OK;
// Register as safe for scripting
hr = CreateComponentCategory(CATID_SafeForScripting,
L"Controls that are safely scriptable");
if (FAILED(hr))
return FALSE;
hr = RegisterCLSIDInCategory(m_clsid, CATID_SafeForScripting);
if (FAILED(hr))
return FALSE;
// Register as safe for initializing
hr = CreateComponentCategory(CATID_SafeForInitializing,
L"Controls safely initializable from persistent data");
if (FAILED(hr))
return FALSE;
hr = RegisterCLSIDInCategory(m_clsid, CATID_SafeForInitializing);
if (FAILED(hr))
return FALSE;

return AfxOleRegisterControlClass(
AfxGetInstanceHandle(),
m_clsid,
m_lpszProgID,
IDS_COLOREDIT,
IDB_COLOREDIT,
afxRegInsertable and afxRegApartmentThreading,
_dwColorEditOleMisc,
_tlid,
_wVerMajor,
_wVerMinor);
}
else
{
HRESULT hr = S_OK;
hr= UnRegisterCLSIDInCategory(m_clsid, CATID_SafeForScripting);
if (FAILED(hr))
return FALSE;
hr = UnRegisterCLSIDInCategory(m_clsid, CATID_SafeForInitializing);
if (FAILED(hr))
return FALSE;

return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
}
}

HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
{
// Register your component categories information.
ICatRegister *pcr = NULL;
HRESULT hr = S_OK;
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (SUCCEEDED(hr))
{
// Register this category as being "implemented" by
// the class.
CATID rgcatid[1];
rgcatid[0] = catid;
hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);
}
if (pcr != NULL)
pcr->Release();
return hr;
}

HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
{
ICatRegister *pcr = NULL;
HRESULT hr = S_OK;
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (SUCCEEDED(hr))
{
// Unregister this category as being "implemented" by
// the class.
CATID rgcatid[1];
rgcatid[0] = catid;
hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid);
}
if (pcr != NULL)
pcr->Release();
return hr;
}
royluo 2000-05-30
  • 打赏
  • 举报
回复
半信半疑的看着flyingknight,“真的吗?”
如果是真的,我很想知道
不知道是在哪里?
请给个方向,好么?
flyingknight 2000-05-29
  • 打赏
  • 举报
回复
其实只要增加不多的代码就可以解决这个问题...MSDN里面说了,没去看啊?
lapple 2000-05-28
  • 打赏
  • 举报
回复
superbat 回答的有道理,在你的派生类中加入IObjectSafetyImpl<你的类>,然后重载他的Get/SetInterfaceSafetyOptions()
superbat 2000-05-28
  • 打赏
  • 举报
回复
除了交钱,还可以修改注册表,在你的类里加入IObjectSafe接口什么的,忘了,参考老潘的com原理与应用吧,还有msdn。
royluo 2000-05-28
  • 打赏
  • 举报
回复
superbat 回答的没有道理 :)
因为你的控件还没有运行,如何去设置啊
无论如何,如果可以用编程方式解决,
那么数字签名就没有什么安全性可言了。
royluo 2000-05-27
  • 打赏
  • 举报
回复
原因是你没有做数字签名
倒不是向MS买许可
MS不卖这个
你去http://www.verisign.com/
如果你细心点可以发现大多数的数字证书都是它发的
当然还有其它几加公司也做
申请一个数字ID(分个人和公司的)
而且巨烦琐,如果你公司的,还需要你公司的营业执照副本
也不知道他们看不看得懂中文的,哈哈
要交钱的,反正是比域名还贵
好象有免费的个人ID,我也记不清楚了
你自己到那个网站去看看吧
你申请到了数字ID
就可以用它为你的控件做数字签名了
其实不只是控件,所有的DLL,EXE,OCX,CAB等等都可以做数字签名
你需要到微软下载一个叫codesign的工具包
jun,没有你所说的测试注册码
是有一个测试的叫Root什么的发证机构
你可以用它来做测试,比如练习怎么使用codesign啊,呵呵
xubin_sh 2000-05-26
  • 打赏
  • 举报
回复
测试的证书,上面写,不要相信这份证书
jun 2000-05-26
  • 打赏
  • 举报
回复
也太贵了吧!听说有一个微软的测试注册码,请问谁有?怎么用?
xubin_sh 2000-05-26
  • 打赏
  • 举报
回复
花1400美元即可
lapple 2000-05-26
  • 打赏
  • 举报
回复
我作了一个客户端控件也存在这个问题,还没解决呢.
ringphone 2000-05-25
  • 打赏
  • 举报
回复
我记得VB里打包时是有个选项标记为安全的,不知道VC里有没有。如果该控件在服务器端运行,有安全标记就可以了,如果要在客户端运行,必须打包成自安装程序放在服务器供自动下载,这时即使标记为安全仍有警告,还必须有数字签名。这就要跟国际数字签名协会联系了。
kxy 2000-05-25
  • 打赏
  • 举报
回复
要向M$购买许可,费用不少,大概要一个星期的验证,
Code...忘记了也是做此事的。
目前仅此两家。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧