您的位置:首页 > 其它

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

2011-11-20 15:29 363 查看
微软的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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐