转自 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. PHP中字符串的连接和换行

    PHP中字符串的连接使用点,不是加号.换行\n需要用双引号括起来,不能用单引号. eg. <?php print_r("hello"."\n"); pri ...

  2. CodeForces 360E Levko and Game(Codeforces Round #210 (Div. 1))

    题意:有一些无向边m条权值是给定的k条权值在[l,r]区间可以由你来定,一个点s1 出发一个从s2出发  问s1 出发的能不能先打到f 思路:最短路. 首先检测能不能赢 在更新的时候  如果对于一条边 ...

  3. ionic 安装遇到的问题以及解决方案

    公司里要用到 Ionic 做移动App 混合开发 一个环境搭建折腾了好几天.一是公司权限问题,二是网络问题,你懂得. Ionic 环境搭建官网有教程.本来几行命令就能搞定的事,一旦遇到网络问题,就蛋疼 ...

  4. 将excel2003文档文件转换为excel2007格式

    在sharepoint 2010 中,excel2007或excel 2010文档格式,支持web app 应用,能够在浏览器在线打开,查看,但excel 2003格式的文档只能用office客户端打 ...

  5. centos lamp

    一.安装 MySQL 首先来进行 MySQL 的安装.打开超级终端,输入: [root@localhost ~]# yum install mysql mysql-server 安装完毕,让 MySQ ...

  6. ffmepg-nginx-nginx-rtmp-module配置脚本

    把上个月写的的配置脚本贴一下: #!/bin/bash #version:-- #create by itn #dis: this is used to auto install ffmpeg+ngi ...

  7. reverse-daily(1)-audio_visual_receiver_code

    本人第一篇随笔,就以一篇CTF逆向分析的文章开始吧! 链接:http://pan.baidu.com/s/1eS6xFIa 密码:u14d 因为re的分析比较琐碎,所以主要就挑一些重点东西来说. 据说 ...

  8. Python 字符串关键字过滤

    问题:把给定字符串中的关键字用与关键字等长的“*”串代替. Solution: 方法1: string 中的 replace 函数 方法2: def censor(text, word): words ...

  9. 腾讯优测| 让Android屏幕适配开发更简单-Google百分比布

    文/腾讯优测工程师 吴宇焕 腾讯优测优社区干货精选~ 相信开发同学都被安卓设备碎片化的问题折磨过,市面上安卓手机的主流屏幕尺寸种类繁多,给适配造成很大的困难.就算搞定了屏幕尺寸问题,各种分辨率又让人眼 ...

  10. Equal

    package com; public class StringEquals { public static void main(String[] args) { String s1=new Stri ...