转自 http://www.cnblogs.com/zdxster/archive/2011/01/27/1945868.html

在EOS6的项目中,如果采用VC++开发的ActiveX,那么第一次运行的时候,IE中就会提示,“在此页上的ActiveX控件和本页上的其他部分的交互可能不安全,你想允许这种交互吗?”在网上找了很多资料,原理介绍的多,但是真正如何做,介绍的比较少,因此这里把实际的步骤一步一步的记录下来了,供大家参考。

1.1 去除ActiveX访问时的安全提示

当ActiveX第一次被访问时,会出现如下提示框:

这是IE浏览器的安全机制造成的,我们可以采用下面的步骤来去除这个提示信息:

1.1.1 在CDemoCtl的头文件.h中增加对objsave的引用

#include <objsafe.h>

1.1.2 在其protected声明区增加如下内容:

//去掉安全警告 BEGIN

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)

//去掉安全警告 END

1.1.3 在CDemoCtl的实现类.cpp的IMPLEMENT_DYNCREATE(CActivexFirstCtrl, COleControl)这一行后增加如下内容:

//去掉安全警告 BEGIN

BEGIN_INTERFACE_MAP(CDemoCtl, COleControl)

INTERFACE_PART(CDemoCtl, IID_IObjectSafety, ObjectSafety)

END_INTERFACE_MAP()

// Implementation of IObjectSafety

STDMETHODIMP CDemoCtl::XObjectSafety::GetInterfaceSafetyOptions(

REFIID riid,

DWORD __RPC_FAR *pdwSupportedOptions,

DWORD __RPC_FAR *pdwEnabledOptions)

{

METHOD_PROLOGUE_EX(CDemoCtl, ObjectSafety)

if (!pdwSupportedOptions || !pdwEnabledOptions)

{

return E_POINTER;

}

*pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER

| INTERFACESAFE_FOR_UNTRUSTED_DATA;

*pdwEnabledOptions = 0;

if (NULL == pThis->GetInterface(&riid))

{

TRACE("Requested interface is not supported.\n");

return E_NOINTERFACE;

}

// What interface is being checked out anyhow?

OLECHAR szGUID[39];

int i = StringFromGUID2(riid, szGUID, 39);

if (riid == IID_IDispatch)

{

// Client wants to know if object is safe for scripting

*pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;

return S_OK;

}

else if (riid == IID_IPersistPropertyBag

|| riid == IID_IPersistStreamInit

|| riid == IID_IPersistStorage

|| riid == IID_IPersistMemory)

{

// Those are the persistence interfaces COleControl derived controls support

// as indicated in AFXCTL.H

// Client wants to know if object is safe for initializing from persistent data

*pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;

return S_OK;

}

else

{

// Find out what interface this is, and decide what options to enable

TRACE("We didn"t account for the safety of this interface, and it"s one we support...\n");

return E_NOINTERFACE;

}

}

STDMETHODIMP CDemoCtl::XObjectSafety::SetInterfaceSafetyOptions(

REFIID riid,

DWORD dwOptionSetMask,

DWORD dwEnabledOptions)

{

METHOD_PROLOGUE_EX(CDemoCtl, ObjectSafety)

OLECHAR szGUID[39];

// What is this interface anyway?

// We can do a quick lookup in the registry under HKEY_CLASSES_ROOT\Interface

int i = StringFromGUID2(riid, szGUID, 39);

if (0 == dwOptionSetMask && 0 == dwEnabledOptions)

{

// the control certainly supports NO requests through the specified interface

// so it"s safe to return S_OK even if the interface isn"t supported.

return S_OK;

}

// Do we support the specified interface?

if (NULL == pThis->GetInterface(&riid))

{

TRACE1("%s is not support.\n", szGUID);

return E_FAIL;

}

if (riid == IID_IDispatch)

{

TRACE("Client asking if it"s safe to call through IDispatch.\n");

TRACE("In other words, is the control safe for scripting?\n");

if (INTERFACESAFE_FOR_UNTRUSTED_CALLER == dwOptionSetMask

&& INTERFACESAFE_FOR_UNTRUSTED_CALLER == dwEnabledOptions)

{

return S_OK;

}

else

{

return E_FAIL;

}

}

else if (riid == IID_IPersistPropertyBag

|| riid == IID_IPersistStreamInit

|| riid == IID_IPersistStorage

|| riid == IID_IPersistMemory)

{

TRACE("Client asking if it"s safe to call through IPersist*.\n");

TRACE("In other words, is the control safe for initializing from persistent data?\n");

if (INTERFACESAFE_FOR_UNTRUSTED_DATA == dwOptionSetMask

&& INTERFACESAFE_FOR_UNTRUSTED_DATA == dwEnabledOptions)

{

return NOERROR;

}

else

{

return E_FAIL;

}

}

else

{

TRACE1("We didn"t account for the safety of %s, and it"s one we support...\n", szGUID);

return E_FAIL;

}

}

STDMETHODIMP_(ULONG) CDemoCtl::XObjectSafety::AddRef()

{

METHOD_PROLOGUE_EX_(CDemoCtl, ObjectSafety)

return (ULONG)pThis->ExternalAddRef();

}

STDMETHODIMP_(ULONG) CDemoCtl::XObjectSafety::Release()

{

METHOD_PROLOGUE_EX_(CDemoCtl, ObjectSafety)

return (ULONG)pThis->ExternalRelease();

}

STDMETHODIMP CDemoCtl::XObjectSafety::QueryInterface(

REFIID iid, LPVOID* ppvObj)

{

METHOD_PROLOGUE_EX_(CDemoCtl, ObjectSafety)

return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);

}

//去掉安全警告 END

在此页上的ActiveX控件和本页上的其他部分的交互可能不安全,你想允许这种交互吗的更多相关文章

  1. 在此页上的 ActiveX 控件和本页上的其它部份的交互可能不安全

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息http://xqy266.blogbus.com/logs/66258230.html 在EOS6的项目中,如果采用VC++开发的Active ...

  2. ATL控件签名之后页面还提示“在此页面上的Activex控件和本页上的其他部分及交互可能不安全”

    ATL控件正常签名打包,然后安装之后还是会提示: 没理由啊,签名是花钱搞得正当的签名.后来查了资料才知道这还不够,需要在创建ATL控件的时候继承一个IObjectSafetyImpl 类 知道了原因, ...

  3. 去掉IE提示:在此页上的ActiveX控件和本页上的其他部分的交互可能不安全。你想允许这种交互吗?

    由于项目需求,需要用到OCX控件.而在IE浏览器中加载OCX控件会有如下提示: 这是因为OCX控件有一个ID,而这个ID注册后IE不认为该OCX控件是安全的.所以,必须把这个控件注册为安全控件. 假设 ...

  4. C# 在 vs2010 上开发 ActiveX 控件 【千辛万苦啊~】

    由于B/S项目中需要使用到读卡器的功能,但是由于厂家只有提供一个 读卡的dll,那么怎样能在客户端使用读卡器呢,那么进过一番查找,最总决定使用ActiveX 控件来做.由于是第一次接触到 Active ...

  5. 问题解决:在此页上的ActiveX控件

    打开什么美图秀秀就会弹出windows安全警告?网易闪电邮每打开一封邮件就会出现安全警告?这个对话框无论你点是否,都会再次出现!! 网上的方法教你改ie设置 教你改UAC 通通不好用!!!重装系统也不 ...

  6. [转]C#开发ActiveX控件,.NET开发OCX控件案例

    引自:百度   http://hi.baidu.com/yanzuoguang/blog/item/fe11974edf52873aaec3ab42.html 讲下什么是ActiveX控件,到底有什么 ...

  7. ActiveX控件(MFC篇)

    目录 第1章 VC++6.0创建控件    1 1.1 目标    1 1.1.1 方法    1 1.1.2 属性    1 1.1.3 事件    1 1.2 创建项目    2 1.3 项目结构 ...

  8. ActiveX控件资料

    Visual Studio 2008(c#)开发ActiveX控件及制作CAB包总结(1) 分类: C#2011-05-27 15:50 403人阅读 评论(0) 收藏 举报 c#stringhook ...

  9. 用ATL和MFC来创建ActiveX控件

    摘要:目前MFC和ATL代表了两种框架,分别面向不同类型的基于Windows的开发.MFC代表了创建独立的Windows应用的一种简单.一致的方法:ATL提供了一种框架来实现创建COM客户机和服务器所 ...

随机推荐

  1. PDF 补丁丁 0.4.2.950 测试版发布:按文件夹合并生成单独的PDF文件

    新的测试版实现了将文件夹的内容合并为单独的PDF文件的功能.以下图为例讲解操作步骤. 点击工具栏的“合并文件”按钮,打开合并功能. 设M盘下有“test”和“test2”文件夹,里面包含了需要合并的文 ...

  2. 爱默生UPS并机系统:进入与退出操作方法

    UPS并机系统的进入与退出: 进入:.合UPS的出线及进线开关:开启第一台UPS,等待整流指示灯常亮.然后Invert On,正常开机,此时UPS进入逆变状态 .合另外一台UPS的出线及进线开关,等待 ...

  3. web前端基础篇②

    1.要默认选择在radio或checkbox后加checked 2.想实现单选在radio后加上name 两个命名一样即可出现排斥 3.自动聚焦 autofocus readonly只读 4.plac ...

  4. android studio 开启genymotion 出现"failed to create framebuffer image"

    出现错误 Unable to start the virtul device To start virtual devices, make sure that your video card supp ...

  5. ios开发之数据存储

    iOS应用数据存储的常用方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core Data 应用沙盒 ...

  6. WCF开发指南之构建服务

    一. 引言 Windows通讯基础(简称为WCF)是一种SDK,用于让你使用典型的CLR编程结构(例如用于发布和消费服务的类和接口等)来构建Windows面向服务的应用程序.WCF的编程模型是声明性的 ...

  7. (转)jQuery Mobile 移动开发中的日期插件Mobiscroll 2.3 使用说明

    (原)http://www.cnblogs.com/hxling/archive/2012/12/12/2814207.html jQuery Mobile 移动开发中的日期插件Mobiscroll ...

  8. Python学习路程day13

    JavaScript JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. ...

  9. Mousejack Hacking : 如何利用MouseJack进行物理攻击

    0×00 前言 近期安全公司Bastille Networks(巴士底狱)安全研究员发现大多数无线鼠标和接收器之间的通信信号是不加密的.黑客可对一百米范围内存在漏洞的蓝牙无线键鼠进行嗅探甚至劫持,从而 ...

  10. 从零开始学习Node.js例子一 http get和post

    httpserverrequestget.js /* 获取GET请求内容 由于GET请求直接被嵌入在路径中,URL是完整的请求路径,包括了?后面的部分,因此你可以手动解析后面的内容作为GET请求的参数 ...