Activex控件的IObjectSafety接口问题

http://blog.chinaunix.net/uid-192452-id-3150062.html

 

我的05年做流氓插件的时候,就注意到了这个问题,只要注册表加入
类似的就可以
 HKEY_CLASSES_ROOT\Component
   Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}
   HKEY_CLASSES_ROOT\Component
   Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}
   HKEY_CLASSES_ROOT\CLSID\{"your controls GUID"}\Implemented
   Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}
   HKEY_CLASSES_ROOT\CLSID\{"your controls GUID"}\Implemented
   Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}
  
7DD95801-9882-11CF-9FA9-00AA006C42C4为安全空间的ID。
如果是ATL的工程,很简单需要在控件中实现IObjectSafety接口,
class CLoginCtl : 
    .... , 
    public IObjectSafetyImpl<CLoginCtl, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA> 

... 
BEGIN_COM_MAP(CLoginCtl) 
COM_INTERFACE_ENTRY(IObjectSafety) 
END_COM_MAP() 
... 

或者
BEGIN_CATEGORY_MAP(CLoginCtl) 
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing) 
msdn  http://support.microsoft.com/kb/168371/en-us
07年给启明星辰做天清汉马SSLVPN客户端的时候,当时老孟强烈建议使用mfc的ocx,所以就没做atl的,当时使用还是vc6,虽然已经有了vc8。
时隔5年之后,我又开始写SSLVPN客户端,发现vc6写的ocx在IE8上经常崩溃,而且还要处理DEP的问题,只能使用atl8之后的版本。
在初始化控件之前,IE会调用IObjectSafety::SetInterfaceSafetyOptions强制ocx处理不信任的数据初始化和调用。
public IObjectSafetyImpl<CXXXAgent, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA >,
诡异的是vc8,vc9可以执行public IObjectSafetyImpl<CXXXAgent, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_DISPEX | INTERFACE_USES_SECURITY_MANAGER>,
vc10只能执行public IObjectSafetyImpl<CXXXAgent, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA >。
 

转载于:https://www.cnblogs.com/lihoo/p/7765608.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值