Atl 重载 objsafe接口

ActiveX控件安全初始化之一:实现ISafeObject接口 ActiveX控件打包成cab后,在脚本中调用中时,要保证控件的安全性才能在你的网页上安全运行,有两种方法来实现这一保证:实现一个名称为IObjectSafe的接口到你的控件。如果IE发现你的控件支持IObjectSafety,它调用 IObjectSafety::SetInterfaceSafetyOptions 方法然后才载入你的控件。另外一种方法需要修改注册表,我将会在另外一篇文章中详细介绍 阅读详情

参考来源:http://blog.youkuaiyun.com/sstower/article/details/6586687

                   http://www.cnblogs.com/fujinliang/archive/2012/11/27/2791695.html


为了使的IE使用ocx时跳过第一个弹框通过注册表“SOFTWARE\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_LOCALMACHINE_LOCKDOWN"修改实现

            

                //修改注册表  //处理为了有利于保护安全性
HKEY hKey = NULL;
char str[MAX_PATH];
DWORD num = sizeof(str), index = 0, rc;
DWORD dwValue = 0;  

#define  MAINKEY HKEY_LOCAL_MACHINE    
#define SUBKE "SOFTWARE\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_LOCALMACHINE_LOCKDOWN"
REGSAM samDesiredOpen = KEY_ALL_ACCESS;
if (Is64BitSystem())
{
samDesiredOpen |= KEY_WOW64_64KEY; 
printf("x64\n");
}
else
{
samDesiredOpen |= KEY_WOW64_32KEY;
printf("x32\n");
}
rc = ::RegOpenKeyEx(MAINKEY, SUBKE, 0, samDesiredOpen, &hKey);
if (rc == ERROR_SUCCESS)
{
RegSetValueEx(hKey, "iexplore.exe", 0, REG_DWORD, (CONST BYTE*)&dwValue, sizeof(DWORD));
RegCloseKey(hKey);
}
else
{
printf("Can't Open The Key!\n");
}



bool Is64BitSystem()
{
SYSTEM_INFO lpSystemInfo; 
typedef VOID(WINAPI *LPFN_GetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo);
LPFN_GetNativeSystemInfo fnGetNativeSystemInfo = (LPFN_GetNativeSystemInfo)GetProcAddress(GetModuleHandle(_T("kernel32")), "GetNativeSystemInfo");;
if (NULL != fnGetNativeSystemInfo)
{
fnGetNativeSystemInfo(&lpSystemInfo);
}
else
{
GetSystemInfo(&lpSystemInfo);
} ;


if (lpSystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
lpSystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64)
{
return TRUE;
}
return FALSE;
} 


为了使的IE使用ocx时跳过第二个弹框因此要在atl实现类里添加objsafe接口

只要3步骤即可:

class ATL_NO_VTABLE CFirst :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CFirst, &CLSID_First>,
public IDispatchImpl<IFirst, &IID_IFirst, &LIBID_ATLProject4Lib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
//add--1
public IObjectSafetyImpl<CFirst, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>
//--
{

 

BEGIN_COM_MAP(CFirst)
COM_INTERFACE_ENTRY(IFirst)
COM_INTERFACE_ENTRY(IDispatch)
//add--2
COM_INTERFACE_ENTRY(IObjectSafety) 

//--
END_COM_MAP()

 

DECLARE_PROTECT_FINAL_CONSTRUCT()
//add--3
STDMETHODIMP GetInterfaceSafetyOptions(REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions){
ATLTRACE(_T("Cwebpy::GetInterfaceSafetyOptions()\n"));
*pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;
*pdwEnabledOptions = *pdwSupportedOptions;
return S_OK;
}
STDMETHODIMP GetInterfaceSafetyOptions(REFIID riid, DWORD *dwOptionSetMask, DWORD dwEnabledOptions){
ATLTRACE(_T("Cwebpy::GetInterfaceSafetyOptions()\n"));
return S_OK;
}

//----

}

innovus中path group 的策略和应用(上) 在所有的后端工具里边,有三个重要的引擎:auto-place,CTS,auto-route三个。这里边的auto-place是决断了整个设计时序的基点。。当然,就算是到了CTS/route阶段后,也可以继续利用auto-place数据优化的功能,在数据库上做数据路径增量优化(optDesign -increment)。可以说,数据路径的优化手段,实际上是贯穿在整个后端流程上的。。看看这其中的奥妙和有趣的事情。ICer GO! 阅读详情

相关推荐

告别GIS软件!用R语言ggplot2+ggmapcn绘制出版级世界地图(附5种投影对比图)

本文提供了一份完整的实践指南,教你如何利用R语言及其强大的ggplot2生态系统,结合ggmapcn包,绘制出出版级的世界地图。文章详细对比了五种经典地图投影(如摩尔维德、罗宾森投影)的代码实现与视觉差异,并讲解了如何添加比例尺、指北针等专业元素,最终导出高清PDF,实现从数据分析到专业可视化的全流程代码化操作,彻底告别传统GIS软件。

p5l2m9n4o6q的博客 407

ACTIVEX控件无法显示的问题

最近开发ACTIVEX 用于上传文件但是遇到一个最严重的问题,在客户机上无法显示经过大量的资料查阅,终于发现了问题根源!首先,ACTIVEX要在用户机上正确的安装和注册肯定是需要一个数字签名的,当然,如果手动安装和注册,可以忽略这个,不过要用于INTERNET上使用,最好还是使用数字签名,否则很不方便。其次,在IE6或更高版本上使用,ACTIVEX控件还需要申明安全接口(Iobje

ZetaChow 4914

Codesys电子凸轮从入门到应用:手把手教你用MC_CamIn/MC_CamOut实现主从轴同步

本文详细介绍了如何在Codesys平台上使用MC_CamIn和MC_CamOut功能块实现电子凸轮的主从轴同步控制。从环境配置、轴使能到凸轮表创建与动态切换,提供了完整的程序编写指南和调试技巧,帮助工程师快速掌握工业自动化中的高精度运动控制技术。

weixin_26878995的博客 277

MFC ActiveX OCX控件添加安全接口

XXXXCtrl.h头文件中加入 #include DECLARE_INTERFACE_MAP()     BEGIN_INTERFACE_PART(ObjSafe, IObjectSafety);     STDMETHOD_(HRESULT, GetInterfaceSafetyOptions) (         REFIID riid,         DWORD _

bukater的专栏 3160

Oracle集群管理-19.3升级19.18 opatchauto总结(java报错,resume oneoffs缺失目录)

t. (那个认为补丁已经打上了,但是oneoffs目录里面没有。将安装包文件的权限全部改成777.就继续执行了上述命令 ,此时使用opatch lsinv也是报错 ,在正常执行opatchauto apply。1 创建目录,存放补丁包,并赋予权限。于是使用如下命令对补丁进行回滚。

oradbm的博客 1415

AD9361快速锁定实战:Profile寄存器配置与频率调谐算法解析

本文深入解析了AD9361射频收发器的快速锁定(Fast Lock)功能,重点阐述了其核心机制——Profile寄存器配置。通过剖析16字节Profile结构,详细讲解了频率调谐算法,包括LO_DIV、LO_INT、LO_FRAC等关键参数的计算,以及如何通过查表获取优化的环路滤波器参数。文章提供了完整的Python算法示例和FPGA实现要点,旨在帮助工程师实现毫秒级甚至微秒级的频率切换,满足跳频通信等高性能应用需求。

weixin_29196315的博客 229

VB中实现IObjectSafety接口以声明控件安全的方法

VB编写的ActiveX控件,在被Javascript脚本调用时会弹出讨厌的对话框,警告用户即将运行不安全的ActiveX脚本,因此必须要实现IObjectSafety接口以声明控件是脚本安全的,下面是具体方法: 1. 新建一个目录作为你的工程目录; 2. 插入VB的安装盘,进入%安装盘根目录%\COMMON\TOOLS\VB\UNSUPPRT\TYP...

weixin_30517001的博客 185

YOLO26-Quantized:面向国产AI芯片的全栈量化方案,适配昇腾310P与寒武纪MLU270

在算力国产化替代的行业趋势下,昇腾310P、寒武纪MLU270已成为工业边缘视觉、智能检测场景的主流国产AI芯片选型。针对原生YOLO26模型在国产芯片上推理效率低、算子兼容性差、量化精度塌陷三大核心痛点,本文提出YOLO26-Quantized全栈量化方案,覆盖训练感知量化(QAT)、离线静态量化(PTQ)、模型编译优化、芯片专属部署全流程。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 762

VB控件实现IObjectSafety安全接口

<br />VB控件实现IObjectSafety安全接口(zt) 本文叙述了如何在VB中实现控件的IobjectSafety接口,<br /><br />以标志该控件是脚本安全和初始化安全的。<br />VB控件默认的处理方式是在注册表中注册组件类来标识其安全性,<br />但实现IobjectSafety接口是更好的方法。<br />本文包括了实现过程中所需的所有代码。<br />1、将以下文本复制到记事本, 并作为 objsafe.odl 项目文件夹以保存文件:<br />             

pyluyuan的专栏 624

linux系统下XDMA驱动的安装与测试问题总结

先看两个常见的问题。一个是驱动安装问题,一个是驱动测试错误;error 512 能识别PCIE的设备,但是The kernel modle installed correctly, but no devices were recognized.

whm128的博客 3800

基于Simulink和Control System Toolbox的线控转向(Steer-by-Wire)系统设计

通过上述步骤,我们成功设计并实现了基于 Simulink 和 Control System Toolbox 的线控转向(Steer-by-Wire)系统。该系统能够接收来自方向盘的角度指令,经过控制器处理后,驱动转向执行器(如电动机),实现对车辆前轮转向角度的精确控制。通过虚拟场景仿真、硬件在环测试和实车测试,验证了系统的响应速度、控制精度、车辆稳定性和实时性能,并通过参数优化进一步提升了系统的性能。

MHD0815的博客 549

vb写的activex控件不再弹出警告提示

自己写的activex控件总是提示"在此页上的activex控件和本页上其他部分的交互可能不安全,你想允许这种交互吗?" . 比较烦人,而且提示完之后ie就死了. 在网上搜了好久终于找到了解决办法,就是网上说的比较多的那种方法,实现IObjectSafety接口 其实网上的那种方式是可用的,在此再记录一下,也希望对没有解决此问题的朋友有帮助. 1.创建一个文件夹,复制下述代码 [c...

jackeysion 395

CPD (Coherent Point Drift) 算法实现点云配准 C++版

作为和icp并列的点集配准算法cpd为什么没有icp火,等我把整个方案跑完才明白。 首先下载cpd https://github.com/gadomski/cpd 包含的fgt https://github.com/gadomski/fgt 下载到win10的解压后 运行cmake来进行编译 这个时候会提醒缺少eigen3 fgt python 这几个都安装排除后 在build文件夹下会生成vs2017的源码,右键全部生成后在 .\cpd-master\build\Debug 下会生成一个cpd.li

uranus1992的博客 3510

初学驱动开发-windows驱动-helloWorld

1.准备工作-安装vm虚拟机+虚拟机下安装xp 2.下载DriverMonitor+DebugView 3.编写代码 #ifdef __cplusplus extern "C" { #endif #include #ifdef __cplusplus } #endif #define PAGEDCODE code_seg("PAGE") #define LOCK

Fly_Sky 5350

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

socket tcp 发送大数据或文件注意事项

使用TCP发送大数据或文件:

Fly_Sky 5091

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

海康PlayM4 播放视频流

1.playM4 下载地址 2.里面有文档说明,可以参考细节 3.实际应用实例 unsigned int CALLBACK thread(LPVOID lpVoid) { auto dlg = (CmfcDlg*)lpVoid; auto pic = dlg->GetDlgItem(IDC_STATIC); PlayFile(pic->GetSafeHwnd()); return 1; } _beginthreadex(NULL, 0, thread, (LPVOID)thi

Fly_Sky 4476

vs qt 无法打开包括文件: “QtCore/qconfig.h”

编译环境的不同导致的问题,定位到 #ifdef QT_BOOTSTRAPPED #include <QtCore/qconfig-bootstrapped.h> #else #include <QtCore/qconfig.h> #include <QtCore/qtcore-config.h> #endif 那么可以尝试定义宏QT_BOOTSTRAPPED 方法1.在pch.h 或 stdafx.h #ifndef PCH_H #define PCH_...

Fly_Sky 4386

初学驱动开发-windows驱动-命令行编译环境

1.下载并安装WDK7600 2.打开开始菜单Windows Driver Kits\WDK 7600.16385.1\... 3.(配置临时环境路径)新建setIncludeXP.bat编辑内容  其中paths值为wdk安装文件对应的一个是头文件,一个是库文件位置 set paths=D:\WinDDK\7600.16385.1\inc rem set include=%inclu

Fly_Sky 4241

c++ CopyData 使用结构体 - 跨进程

绪:跨进程数据交互方式可以使用多种方式,比如socket,本地文件,windows环境下自带的sendmessage之CopyData消息 这里只设计CopyData数据的封装处理 首先是简单的int数据 发送: int i_value = 1; COPYDATASTRUCT data; data.dwData = 1000; data.cbData = sizeof(i_value); data.lpData = &i_value; ::Send.

Fly_Sky 3017

c++ 调用lua 错误 显示堆栈信息

    本篇实现c++调用lua出错时win32如何显示堆栈信息     test.lua 文件function __G__TRACKBACK__(msg) print("----------------------------------------") print("LUA ERROR: " .. tostring(msg) .. "\n") print(debug.tr...

Fly_Sky 2033

c++ 正则 中文路径、文件名

始:数据录入需要进行数据个数进行校验,可以根据业务写校验规则,更机智的选择是应用正则表达式。这边的需求是校验文件路径和文件名称 坑:如下代码在用正则表达式校验英文的文件路径和文件名时无问题 bool leachDir(std::string linuxDirPath) { std::string dir= linuxDirPath; try { std::regex r("^/([\\w\\s]+/?)+$"); bool bValid = std::regex_match(dir,

Fly_Sky 1779

初学c++注入

1.准备dll---&gt;生成dll    *.h 文件 extern "C" _declspec(dllexport) int Add(int plus1, int plus2); extern "C" _declspec(dllexport) void Msg();    .cpp文件     #include "*.h"  #include "stdio.h"  #include &l...

Fly_Sky 1766

获取 文件 后缀 c++

正常情况下可以通过SHGetFileInfoA 或 PathFindExtension 获取文件的类型,当文件无后缀时就需要想别的方法了。         以下以DOC和DOCX文件类型为例子:         正常情况生成的doc文件其二进制数据如下:        正常情况docx文件其二进制数据如下:    通过对比可以看到doc和docx的二进制数据开头都不

Fly_Sky 1758

服务程序调用 CreateProcessAsUser 0xC0000005访问冲突问题

在使用CreateProcessAsUser时出现了 0xC0000005访问冲突问题,百思不得其解。终于在子航的博客http://www.cnblogs.com/hezihang/p/3387283.html找到问题根源   错误代码: #include #pragma comment(lib, "WtsApi32.lib") bool MyImpersonateLoggedOnUse

Fly_Sky 1475
上一篇: atl接口
下一篇: win32 3步打包和释放资源
宇文仲竹
博客等级 码龄16年 360粉丝 236原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值