将dsoframer修改为能通过IE的可安全执行脚本

来源:互联网 发布:数据挖掘异常检测方法 编辑:程序博客网 时间:2024/06/07 01:04

微软的dsoframer.ocx V1.3.1323.0版本,需要在IE上设置“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本“,

通过其源码下面2个函数的修改,可以解决该问题,

需要注意带来的新问题:微软的ocx带数字签名,自己编写的不带有签名,而申请数字签名动辄上千元


修改位置:

1. 文件:dsofcontrol.cpp

函数:STDMETHODIMP CDsoFramerControl::XObjectSafety::GetInterfaceSafetyOptions

内容:

//*pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;//return S_OK;if (riid == IID_IDispatch){*pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;return S_OK;}else if (riid == IID_IPersistPropertyBag ||riid == IID_IPersistStreamInit ||riid == IID_IPersistStorage ||riid == IID_IPersistMemory){*pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;return S_OK;}return E_NOINTERFACE;

2. 文件:dsofcontrol.cpp

函数:STDMETHODIMP CDsoFramerControl::XObjectSafety::SetInterfaceSafetyOptions

内容:

//return ((((riid == IID_IPersist) || (riid == IID_IPersistPropertyBag)) &&//(dwEnabledOptions == INTERFACESAFE_FOR_UNTRUSTED_DATA)) ? S_OK : E_FAIL);if (riid == IID_IDispatch){BOOL bFalg = INTERFACESAFE_FOR_UNTRUSTED_CALLER == dwOptionSetMask &&INTERFACESAFE_FOR_UNTRUSTED_CALLER == dwEnabledOptions;return bFalg ? S_OK : E_FAIL;}else if (riid == IID_IPersistPropertyBag|| riid == IID_IPersistStreamInit|| riid == IID_IPersistStorage|| riid == IID_IPersistMemory){BOOL bFalg = INTERFACESAFE_FOR_UNTRUSTED_DATA == dwOptionSetMask &&INTERFACESAFE_FOR_UNTRUSTED_DATA == dwEnabledOptions;return bFalg ? NOERROR : E_FAIL;}return E_NOINTERFACE;


原创粉丝点击