CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  ATL/ActiveX/COM

ATL web component 安全设置

楼主mershaywu(沧海一生笑)2004-08-03 11:50:38 在 VC/MFC / ATL/ActiveX/COM 提问

我用ATl生成了一个binary   behavior   ,但是在IE中对安全的要求很高,我如何才能使我的构件能够在缺省的IE安全设置下能够使用(否则就是被禁用或者提示) 问题点数:0、回复次数:8Top

1 楼gjd111686(数字金刚)回复于 2004-08-03 13:14:02 得分 0

http://www.vckbase.com/document/viewdoc.asp?id=728Top

2 楼gjd111686(数字金刚)回复于 2004-08-03 13:14:42 得分 0

我们在编写ActiveX控件时,如果用在浏览器中,经常都会弹出现在运行的脚本不安全的提示,   如果给客户使用,将会带来极大不便。按照MSDN的介绍通常有两种一种是实现IObjectSafe接口,一种是通过修改注册表的方法。一般如果用ATL开发ActiveX控件,就用实现ObjectSafe接口的方法。如果用MFC开发,我觉得还是用修改注册表的方法比较方便。下面我们将第二种方法:  
   
  要包括两个文件  
   
  #include   "comcat.h"  
  #include   "Objsafe.h"  
  //   本控件的CLSID,注册表用   const   GUID   CDECL   CLSID_SafeItem   =  
  {   0x7AE7497B,   0xCAD8,   0x4E66,   {   0xA5,0x8B,0xDD,0xE9,0xBC,0xAF,0x6B,0x61   }   };  
  //   创建组件种类   HRESULT   CreateComponentCategory(CATID   catid,   WCHAR*   catDescription)  
  {  
          ICatRegister*   pcr   =   NULL   ;  
          HRESULT   hr   =   S_OK   ;  
   
          hr   =   CoCreateInstance(CLSID_StdComponentCategoriesMgr,    
                          NULL,   CLSCTX_INPROC_SERVER,   IID_ICatRegister,   (void**)&pcr);  
          if   (FAILED(hr))  
                  return   hr;  
   
          //   Make   sure   the   HKCR\Component   Categories\{..catid...}  
          //   key   is   registered.  
          CATEGORYINFO   catinfo;  
          catinfo.catid   =   catid;  
          catinfo.lcid   =   0x0409   ;   //   english  
   
          //   Make   sure   the   provided   description   is   not   too   long.  
          //   Only   copy   the   first   127   characters   if   it   is.  
          int   len   =   wcslen(catDescription);  
          if   (len>127)  
                  len   =   127;  
          wcsncpy(catinfo.szDescription,   catDescription,   len);  
          //   Make   sure   the   description   is   null   terminated.  
          catinfo.szDescription[len]   =   ''\0'';  
   
          hr   =   pcr->RegisterCategories(1,   &catinfo);  
                  pcr->Release();  
   
          return   hr;  
  }  
  //   注册组件种类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;  
  }  
  //   DllRegisterServer   -   Adds   entries   to   the   system   registry   STDAPI   DllRegisterServer(void)  
  {  
  HRESULT   hr;  
   
  AFX_MANAGE_STATE(_afxModuleAddrThis);  
   
  if   (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(),   _tlid))  
  return   ResultFromScode(SELFREG_E_TYPELIB);  
   
  if   (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))  
  return   ResultFromScode(SELFREG_E_CLASS);  
   
          //   标记控件初始化安全.  
          //   创建初始化安全组件种类  
          hr   =   CreateComponentCategory(CATID_SafeForInitializing,   L"Controls   safely   initializable   from   persistent   data!");  
          if   (FAILED(hr))  
                  return   hr;  
          //   注册初始化安全  
          hr   =   RegisterCLSIDInCategory(CLSID_SafeItem,   CATID_SafeForInitializing);  
          if   (FAILED(hr))  
                  return   hr;  
   
          //   标记控件脚本安全  
          //   创建脚本安全组件种类    
          hr   =   CreateComponentCategory(CATID_SafeForScripting,   L"Controls   safely   scriptable!");  
          if   (FAILED(hr))  
                  return   hr;  
          //   注册脚本安全组件种类  
          hr   =   RegisterCLSIDInCategory(CLSID_SafeItem,   CATID_SafeForScripting);  
          if   (FAILED(hr))  
                  return   hr;  
   
  return   NOERROR;  
  }  
  //   DllUnregisterServer   -   Removes   entries   from   the   system   registrySTDAPI   DllUnregisterServer(void)  
  {  
  HRESULT   hr;  
   
  AFX_MANAGE_STATE(_afxModuleAddrThis);  
   
  if   (!AfxOleUnregisterTypeLib(_tlid,   _wVerMajor,   _wVerMinor))  
  return   ResultFromScode(SELFREG_E_TYPELIB);  
   
  if   (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))  
  return   ResultFromScode(SELFREG_E_CLASS);  
   
          //   删除控件初始化安全入口.  
          hr=UnRegisterCLSIDInCategory(CLSID_SafeItem,   CATID_SafeForInitializing);  
          if   (FAILED(hr))  
                  return   hr;  
          //   删除控件脚本安全入口  
          hr=UnRegisterCLSIDInCategory(CLSID_SafeItem,   CATID_SafeForScripting);  
          if   (FAILED(hr))  
                  return   hr;  
   
  //////////////////////////  
  return   NOERROR;  
  }  
  Top

3 楼mershaywu(沧海一生笑)回复于 2004-08-03 17:44:56 得分 0

如果我在编写ATL的过程中使用了MFC,那应该则么处理Top

4 楼youou(红麦子&猪格格)回复于 2004-08-03 17:56:33 得分 0

==Top

5 楼youou(红麦子&猪格格)回复于 2004-08-03 18:05:26 得分 0

好人呐.这正是我要找的东西~~  
  估计可以用上了.  
  Top

6 楼youou(红麦子&猪格格)回复于 2004-08-03 18:11:10 得分 0

http://community.csdn.net/Expert/topic/3226/3226984.xml?temp=9.823245E-02  
  数字金刚兄弟,看看这个问题能否帮我说说~~Top

7 楼gjd111686(数字金刚)回复于 2004-08-04 16:30:56 得分 0

设置静态编译或者打包时添加MfcXX.dll和Msvcrt.dll等.Top

8 楼newkey007(无限天空 www.xDrv.com)回复于 2004-08-10 13:17:24 得分 0

http://blog.csdn.net/newkey007/archive/2004/08/10/70162.aspx  
   
  public   IObjectSafetyImpl<CXXXX,    
  INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>  
   
  BEGIN_COM_MAP(CXXX)  
                    ........  
  COM_INTERFACE_ENTRY(IObjectSafety)  
  END_COM_MAP()Top

相关问题

  • 【HELP】SQL SERVER 安全设置
  • 设置文件夹安全
  • IE5的安全设置:可信站点设置无效
  • 怎么设置ie的选项里面的安全设置
  • 如何设置域安全策略???急~~~~~~~
  • 怎样获取ie安全设置项
  • [讨论] win2003+IIS6.0的安全设置?
  • XP的三个安全设置问题
  • 设置文件夹安全?急急急!!
  • 2003安全设置如何改

关键词

  • .net
  • atl
  • 安全
  • 控件
  • hr
  • null
  • catid
  • catinfo
  • catdescription
  • 注册表

得分解答快速导航

  • 帖主:mershaywu

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo