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

微软的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;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值