activex控件在IE中弹出安全警告的解决办法(国外英文资料).doc
文本预览下载声明
activex控件在IE中弹出安全警告的解决办法(国外英文资料)
写的activex控件在IE中弹出安全警告的解决办法
# include objsafe.h
/ /在控件头文件中加入:
DECLARE_INTERFACE_MAP()
BEGIN_INTERFACE_PART(ObjectSafety IObjectSafety)
STDMETHOD(GetInterfaceSafetyOptions)(REFIID riid,DWORD __RPC_FAR * pdwSupportedOptions,DWORD __RPC_FAR * pdwEnabledOptions);
STDMETHOD(SetInterfaceSafetyOptions)(REFIID riid、DWORD dwOptionSetMask、DWORD dwEnabledOptions);
END_INTERFACE_PART(ObjectSafety)
/ /在控件的CPP文件中加入:
BEGIN_INTERFACE_MAP(CVP2PCtrl COleControl)
INTERFACE_PART(CVP2PCtrl IID_IObjectSafety ObjectSafety)
END_INTERFACE_MAP()
/ / IObjectSafety的实现
STDMETHODIMP CVP2PCtrl:XObjectSafety::GetInterfaceSafetyOptions(
REFIID riid,
DWORD __RPC_FAR * pdwSupportedOptions,
DWORD __RPC_FAR * pdwEnabledOptions)
{
METHOD_PROLOGUE_EX(CVP2PCtrl ObjectSafety)
如果(!pdwSupportedOptions | | ! pdwEnabledOptions)
{
返回E_POINTER;
}
* pdwSupportedOptions = interfacesafe_for_untrusted_@| INTERFACESAFE_FOR_UNTRUSTED_DATA;
* pdwEnabledOptions = 0;
如果(NULL = = pThis - GetInterface(riid))
{
跟踪(“请求的接口不受支持。\ n”);
返回E_NOINTERFACE;
}
/ /什么接口正在被检查?
OLECHAR szGUID[39];
我= StringFromGUID2(riid,szGUID,39);
如果(riid = = IID_IDispatch)
{
/ /客户端想知道对象是否对脚本安全
* pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;
返回S_OK;
}
else if(riid = = IID_IPersistPropertyBag)
| | riid = = IID_IPersistStreamInit
| | riid = = IID_IPersistStorage
| | riid = = IID_IPersistMemory)
{
/ /这些是COleControl派生控制支持的持久性接口
/ /如在afxctl . h中所示
/ /客户端想知道对象是否安全地从持久数据初始化
* pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;
返回S_OK;
}
其他的
{
/ /找出这是什么接口,并决定启用哪些选项
TRACE(“我们没有考虑到这个接口的安全性,它是我们支持的……”);
返回E_NOINTERFACE;
}
}
STDMETHODIMP CVP2PCtrl:XObjectSafety::SetInterfaceSafetyOptions(
REFIID riid,
DWORD dwOptionSetMask,
DWORD dwEnabledOptions)
{
METHOD_PROLOGUE_EX(CVP2PCtrl ObjectSafety)
OLECHAR szGUID[39];
/ /这个接口到底是什么?
/ /我们可以在HKEY_CLASSES_ROOT \ Interface下面的注册表中进行快速查找
我= StringFromGUID2(riid,szGUID,39);
如果(0 = dwOptionSetMask 0 = dwEnabledOptions)
{
/ /控件当然不会通过指定的接口来支持请求
/ /因此,即使不支持该接口,也可以安全地返回S_OK。
返回S_OK;
}
显示全部