AX控件IE相关注册表修改封装
2012-05-14 11:27
330 查看
/********************************************************************
created: 2012:5:10 13:04:48
author: Insert
purpose: IE各种注册表更改
*********************************************************************/
#ifndef __IEREGISTER__H__EC92A9C2_3010_43D0_9E8D_946F9BA37839__
#define __IEREGISTER__H__EC92A9C2_3010_43D0_9E8D_946F9BA37839__
#include <Windows.h>
#include <assert.h>
#include <tchar.h>
#include "shlwapi.h"
#pragma comment(lib, "shlwapi.lib")
#include <intrin.h>
#pragma intrinsic(_ReturnAddress)
#pragma warning(push)
#pragma warning(disable : 4996)
class CIERegister
{
public:
typedef enum ERegisterType
{
RElevationPolicy,//阻止ie保护模式对话框
RIE7Stats,//阻止ie7安全提示
RIE8Stats,//阻止ie8安全提示
RActiveXCompatibility,//解除ie对控件的屏蔽(不出现在加载项)
RSettings, //解除IE对控件的禁用(加载项中为禁用)
RMax,
RAll,//更改全部相关注册表
}ERT;
public:
static HRESULT Register(HMODULE module = NULL, ERT ert = RAll)
{
assert((ert >= RElevationPolicy && ert < RMax) || ert == RAll);
HMODULE hm = module;
if (NULL == hm)
{
void *callerAddress = _ReturnAddress();
if(FALSE == ::GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)callerAddress, &hm))
{
assert(FALSE && "Get module failed!");
return E_FAIL;
}
}
RegisterFunctionPtr RegisterFunction[RMax] = {
RegisterElevationPolicy,
RegisterIE7Stats,
RegisterIE8Stats,
RegisterActiveXCompatibility,
RegisterSettings
};
if (RAll != ert)
{
return RegisterFunction[ert](hm);
}
HRESULT hr[RMax] = {S_OK};
for (int i = 0; i < RMax; ++i)
{
hr[i] = RegisterFunction[i](hm);
}
for (int i = 0; i < RMax; ++i)
{
if (FAILED(hr[i]))
{
return E_FAIL;
}
}
for (int i = 0; i < RMax; ++i)
{
if (S_FALSE == hr[i])
{
return S_FALSE;
}
}
return S_OK;
}
private:
//阻止ie保护模式对话框
static HRESULT RegisterElevationPolicy(HMODULE module)
{
_SEP sep[] = {
{TEXT("GUID"), TEXT("ToExecuteModule.exe"), (BYTE)_SEP::POLICYVALUE},
};
int iSepNum = sizeof(sep) / sizeof(_SEP);
CONST TCHAR* cszRegisterPath = TEXT("Software\\Microsoft\\Internet Explorer\\Low Rights\\ElevationPolicy\\");
TCHAR szModulePath[MAX_PATH] = {0};
if (0 == ::GetModuleFileName(module, szModulePath, MAX_PATH))
{
assert(FALSE && "Get the module full path failed!");
return E_FAIL;
}
if (FALSE == ::PathAppend(szModulePath, TEXT("..")))
{
assert(FALSE && "Get the module path failed!");
return E_FAIL;
}
::PathRemoveBackslash(szModulePath);
HRESULT hr = S_OK;
HKEY hk;
for (int i = 0; i < iSepNum; ++i)
{
TCHAR szRegisterFullPath[MAX_PATH] = {0};
_tcscpy(szRegisterFullPath, cszRegisterPath);
_tcscat(szRegisterFullPath, sep[i].guid);
if (ERROR_SUCCESS == ::RegCreateKey(HKEY_CURRENT_USER, szRegisterFullPath, &hk))
{
::RegSetValueEx(hk, TEXT("AppName"), 0, REG_SZ, (unsigned char*)sep[i].name, (ULONG)sizeof(TCHAR) * _tcslen(sep[i].name));
::RegSetValueEx(hk, TEXT("AppPath"), 0, REG_SZ, (unsigned char*)szModulePath, (ULONG)sizeof(TCHAR) * _tcslen(szModulePath));
::RegSetValueEx(hk, TEXT("Policy"), 0, REG_DWORD, (LPBYTE)&sep[i].Policy, sizeof(sep[i].Policy));
::RegCloseKey(hk);
hk = NULL;
}
else
{
hr = S_FALSE;
}
}
return hr;
}
//阻止ie7安全提示
static HRESULT RegisterIE7Stats(HMODULE /*module*/)
{
_SIS7 sis[] =
{
{TEXT("CLSID"), (BYTE)_SIS7::FLAGSVALUE}
};
int iSisNum = sizeof(sis) / sizeof(_SIS7);
CONST TCHAR* cszRegisterPathForward = TEXT("SoftWare\\Microsoft\\Windows\\CurrentVersion\\Ext\\Stats\\");
CONST TCHAR* cszRegisterPathBack = TEXT("\\iexplore");
HRESULT hr = S_OK;
HKEY hk;
for (int i = 0; i < iSisNum; ++i)
{
TCHAR szRegisterFullPath[MAX_PATH] = {0};
_tcscpy(szRegisterFullPath, cszRegisterPathForward);
_tcscat(szRegisterFullPath, sis[i].classid);
_tcscat(szRegisterFullPath, cszRegisterPathBack);
if(ERROR_SUCCESS == ::RegOpenKey(HKEY_CURRENT_USER, szRegisterFullPath, &hk))
{
::RegSetValueEx(hk, _T("Flags"), 0, REG_DWORD, (LPBYTE)&sis[i].flags, sizeof(sis[i].flags));
::RegCloseKey(hk);
hk = NULL;
}
else
{
if(ERROR_SUCCESS == ::RegCreateKey(HKEY_CURRENT_USER, szRegisterFullPath, &hk))
{
::RegSetValueEx(hk, _T("Flags"), 0, REG_DWORD, (LPBYTE)&sis[i].flags, sizeof(sis[i].flags));
::RegCloseKey(hk);
hk = NULL;
}
else
{
hr = S_FALSE;
}
}
}
return hr;
}
//阻止ie8安全提示
static HRESULT RegisterIE8Stats(HMODULE /*module*/)
{
_SIS8 sis[] =
{
{TEXT("CLSID")}
};
int iSisNum = sizeof(sis) / sizeof(_SIS8);
CONST TCHAR* cszRegisterPathForward = TEXT("SoftWare\\Microsoft\\Windows\\CurrentVersion\\Ext\\Stats\\");
CONST TCHAR* cszRegisterPathBack = TEXT("\\iexplore\\AllowedDomains");
CONST TCHAR* cszRegisterPathBackBack = TEXT("\\*");
HRESULT hr = S_OK;
HKEY hk;
for (int i = 0; i < iSisNum; ++i)
{
TCHAR szRegisterFullPath[MAX_PATH] = {0};
_tcscpy(szRegisterFullPath, cszRegisterPathForward);
_tcscat(szRegisterFullPath, sis[i].classid);
_tcscat(szRegisterFullPath, cszRegisterPathBack);
if(ERROR_SUCCESS == ::RegCreateKey(HKEY_CURRENT_USER, szRegisterFullPath, &hk))
{
::RegCloseKey(hk);
hk = NULL;
}
else
{
hr = S_FALSE;
}
_tcscat(szRegisterFullPath, cszRegisterPathBackBack);
if(ERROR_SUCCESS == ::RegCreateKey(HKEY_CURRENT_USER, szRegisterFullPath, &hk))
{
::RegCloseKey(hk);
hk = NULL;
}
else
{
hr = S_FALSE;
}
}
return S_OK;
}
//解除ie对控件的屏蔽(不出现在加载项)
static HRESULT RegisterActiveXCompatibility(HMODULE /*module*/)
{
_SAXC saxc[] =
{
{TEXT("CLSID")}
};
int iSacxNum = sizeof(saxc) / sizeof(_SAXC);
CONST TCHAR* cszRegisterPath = TEXT("Software\\Microsoft\\Internet Explorer\\ActiveX Compatibility\\");
HRESULT hr = S_OK;
for (int i = 0; i < iSacxNum; ++i)
{
TCHAR szRegisterFullPath[MAX_PATH] = {0};
_tcscpy(szRegisterFullPath, cszRegisterPath);
_tcscat(szRegisterFullPath, saxc[i].classid);
if (ERROR_SUCCESS != ::RegDeleteKey(HKEY_LOCAL_MACHINE, szRegisterFullPath))
{
hr = S_FALSE;
}
}
return S_OK;
}
//解除IE对控件的禁用(加载项中为禁用)
static HRESULT RegisterSettings(HMODULE /*module*/)
{
_SS ss[] =
{
{TEXT("CLSID")}
};
int iSsNum = sizeof(ss) / sizeof(_SS);
CONST TCHAR* cszRegisterPath = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Ext\\Settings\\");
HRESULT hr = S_OK;
for (int i = 0; i < iSsNum; ++i)
{
TCHAR szRegisterFullPath[MAX_PATH] = {0};
_tcscpy(szRegisterFullPath, cszRegisterPath);
_tcscat(szRegisterFullPath, ss[i].classid);
if (ERROR_SUCCESS != ::RegDeleteKey(HKEY_LOCAL_MACHINE, szRegisterFullPath))
{
hr = S_FALSE;
}
}
return S_OK;
}
private:
typedef HRESULT (*RegisterFunctionPtr) (HMODULE);
typedef struct SElevationPolicy
{
TCHAR guid[MAX_PATH];
TCHAR name[MAX_PATH];
BYTE Policy;
static const int POLICYVALUE = 3;
}_SEP;
typedef struct SIE7Stats
{
TCHAR classid[MAX_PATH];
BYTE flags;
static const int FLAGSVALUE = 4;
}_SIS7;
typedef struct SIE8Stats
{
TCHAR classid[MAX_PATH];
}_SIS8;
typedef struct SActiveXCompatibility
{
TCHAR classid[MAX_PATH];
}_SAXC;
typedef struct SSettings
{
TCHAR classid[MAX_PATH];
}_SS;
private:
CIERegister(){}
~CIERegister(){}
};
#pragma warning(pop)
#endif
created: 2012:5:10 13:04:48
author: Insert
purpose: IE各种注册表更改
*********************************************************************/
#ifndef __IEREGISTER__H__EC92A9C2_3010_43D0_9E8D_946F9BA37839__
#define __IEREGISTER__H__EC92A9C2_3010_43D0_9E8D_946F9BA37839__
#include <Windows.h>
#include <assert.h>
#include <tchar.h>
#include "shlwapi.h"
#pragma comment(lib, "shlwapi.lib")
#include <intrin.h>
#pragma intrinsic(_ReturnAddress)
#pragma warning(push)
#pragma warning(disable : 4996)
class CIERegister
{
public:
typedef enum ERegisterType
{
RElevationPolicy,//阻止ie保护模式对话框
RIE7Stats,//阻止ie7安全提示
RIE8Stats,//阻止ie8安全提示
RActiveXCompatibility,//解除ie对控件的屏蔽(不出现在加载项)
RSettings, //解除IE对控件的禁用(加载项中为禁用)
RMax,
RAll,//更改全部相关注册表
}ERT;
public:
static HRESULT Register(HMODULE module = NULL, ERT ert = RAll)
{
assert((ert >= RElevationPolicy && ert < RMax) || ert == RAll);
HMODULE hm = module;
if (NULL == hm)
{
void *callerAddress = _ReturnAddress();
if(FALSE == ::GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)callerAddress, &hm))
{
assert(FALSE && "Get module failed!");
return E_FAIL;
}
}
RegisterFunctionPtr RegisterFunction[RMax] = {
RegisterElevationPolicy,
RegisterIE7Stats,
RegisterIE8Stats,
RegisterActiveXCompatibility,
RegisterSettings
};
if (RAll != ert)
{
return RegisterFunction[ert](hm);
}
HRESULT hr[RMax] = {S_OK};
for (int i = 0; i < RMax; ++i)
{
hr[i] = RegisterFunction[i](hm);
}
for (int i = 0; i < RMax; ++i)
{
if (FAILED(hr[i]))
{
return E_FAIL;
}
}
for (int i = 0; i < RMax; ++i)
{
if (S_FALSE == hr[i])
{
return S_FALSE;
}
}
return S_OK;
}
private:
//阻止ie保护模式对话框
static HRESULT RegisterElevationPolicy(HMODULE module)
{
_SEP sep[] = {
{TEXT("GUID"), TEXT("ToExecuteModule.exe"), (BYTE)_SEP::POLICYVALUE},
};
int iSepNum = sizeof(sep) / sizeof(_SEP);
CONST TCHAR* cszRegisterPath = TEXT("Software\\Microsoft\\Internet Explorer\\Low Rights\\ElevationPolicy\\");
TCHAR szModulePath[MAX_PATH] = {0};
if (0 == ::GetModuleFileName(module, szModulePath, MAX_PATH))
{
assert(FALSE && "Get the module full path failed!");
return E_FAIL;
}
if (FALSE == ::PathAppend(szModulePath, TEXT("..")))
{
assert(FALSE && "Get the module path failed!");
return E_FAIL;
}
::PathRemoveBackslash(szModulePath);
HRESULT hr = S_OK;
HKEY hk;
for (int i = 0; i < iSepNum; ++i)
{
TCHAR szRegisterFullPath[MAX_PATH] = {0};
_tcscpy(szRegisterFullPath, cszRegisterPath);
_tcscat(szRegisterFullPath, sep[i].guid);
if (ERROR_SUCCESS == ::RegCreateKey(HKEY_CURRENT_USER, szRegisterFullPath, &hk))
{
::RegSetValueEx(hk, TEXT("AppName"), 0, REG_SZ, (unsigned char*)sep[i].name, (ULONG)sizeof(TCHAR) * _tcslen(sep[i].name));
::RegSetValueEx(hk, TEXT("AppPath"), 0, REG_SZ, (unsigned char*)szModulePath, (ULONG)sizeof(TCHAR) * _tcslen(szModulePath));
::RegSetValueEx(hk, TEXT("Policy"), 0, REG_DWORD, (LPBYTE)&sep[i].Policy, sizeof(sep[i].Policy));
::RegCloseKey(hk);
hk = NULL;
}
else
{
hr = S_FALSE;
}
}
return hr;
}
//阻止ie7安全提示
static HRESULT RegisterIE7Stats(HMODULE /*module*/)
{
_SIS7 sis[] =
{
{TEXT("CLSID"), (BYTE)_SIS7::FLAGSVALUE}
};
int iSisNum = sizeof(sis) / sizeof(_SIS7);
CONST TCHAR* cszRegisterPathForward = TEXT("SoftWare\\Microsoft\\Windows\\CurrentVersion\\Ext\\Stats\\");
CONST TCHAR* cszRegisterPathBack = TEXT("\\iexplore");
HRESULT hr = S_OK;
HKEY hk;
for (int i = 0; i < iSisNum; ++i)
{
TCHAR szRegisterFullPath[MAX_PATH] = {0};
_tcscpy(szRegisterFullPath, cszRegisterPathForward);
_tcscat(szRegisterFullPath, sis[i].classid);
_tcscat(szRegisterFullPath, cszRegisterPathBack);
if(ERROR_SUCCESS == ::RegOpenKey(HKEY_CURRENT_USER, szRegisterFullPath, &hk))
{
::RegSetValueEx(hk, _T("Flags"), 0, REG_DWORD, (LPBYTE)&sis[i].flags, sizeof(sis[i].flags));
::RegCloseKey(hk);
hk = NULL;
}
else
{
if(ERROR_SUCCESS == ::RegCreateKey(HKEY_CURRENT_USER, szRegisterFullPath, &hk))
{
::RegSetValueEx(hk, _T("Flags"), 0, REG_DWORD, (LPBYTE)&sis[i].flags, sizeof(sis[i].flags));
::RegCloseKey(hk);
hk = NULL;
}
else
{
hr = S_FALSE;
}
}
}
return hr;
}
//阻止ie8安全提示
static HRESULT RegisterIE8Stats(HMODULE /*module*/)
{
_SIS8 sis[] =
{
{TEXT("CLSID")}
};
int iSisNum = sizeof(sis) / sizeof(_SIS8);
CONST TCHAR* cszRegisterPathForward = TEXT("SoftWare\\Microsoft\\Windows\\CurrentVersion\\Ext\\Stats\\");
CONST TCHAR* cszRegisterPathBack = TEXT("\\iexplore\\AllowedDomains");
CONST TCHAR* cszRegisterPathBackBack = TEXT("\\*");
HRESULT hr = S_OK;
HKEY hk;
for (int i = 0; i < iSisNum; ++i)
{
TCHAR szRegisterFullPath[MAX_PATH] = {0};
_tcscpy(szRegisterFullPath, cszRegisterPathForward);
_tcscat(szRegisterFullPath, sis[i].classid);
_tcscat(szRegisterFullPath, cszRegisterPathBack);
if(ERROR_SUCCESS == ::RegCreateKey(HKEY_CURRENT_USER, szRegisterFullPath, &hk))
{
::RegCloseKey(hk);
hk = NULL;
}
else
{
hr = S_FALSE;
}
_tcscat(szRegisterFullPath, cszRegisterPathBackBack);
if(ERROR_SUCCESS == ::RegCreateKey(HKEY_CURRENT_USER, szRegisterFullPath, &hk))
{
::RegCloseKey(hk);
hk = NULL;
}
else
{
hr = S_FALSE;
}
}
return S_OK;
}
//解除ie对控件的屏蔽(不出现在加载项)
static HRESULT RegisterActiveXCompatibility(HMODULE /*module*/)
{
_SAXC saxc[] =
{
{TEXT("CLSID")}
};
int iSacxNum = sizeof(saxc) / sizeof(_SAXC);
CONST TCHAR* cszRegisterPath = TEXT("Software\\Microsoft\\Internet Explorer\\ActiveX Compatibility\\");
HRESULT hr = S_OK;
for (int i = 0; i < iSacxNum; ++i)
{
TCHAR szRegisterFullPath[MAX_PATH] = {0};
_tcscpy(szRegisterFullPath, cszRegisterPath);
_tcscat(szRegisterFullPath, saxc[i].classid);
if (ERROR_SUCCESS != ::RegDeleteKey(HKEY_LOCAL_MACHINE, szRegisterFullPath))
{
hr = S_FALSE;
}
}
return S_OK;
}
//解除IE对控件的禁用(加载项中为禁用)
static HRESULT RegisterSettings(HMODULE /*module*/)
{
_SS ss[] =
{
{TEXT("CLSID")}
};
int iSsNum = sizeof(ss) / sizeof(_SS);
CONST TCHAR* cszRegisterPath = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Ext\\Settings\\");
HRESULT hr = S_OK;
for (int i = 0; i < iSsNum; ++i)
{
TCHAR szRegisterFullPath[MAX_PATH] = {0};
_tcscpy(szRegisterFullPath, cszRegisterPath);
_tcscat(szRegisterFullPath, ss[i].classid);
if (ERROR_SUCCESS != ::RegDeleteKey(HKEY_LOCAL_MACHINE, szRegisterFullPath))
{
hr = S_FALSE;
}
}
return S_OK;
}
private:
typedef HRESULT (*RegisterFunctionPtr) (HMODULE);
typedef struct SElevationPolicy
{
TCHAR guid[MAX_PATH];
TCHAR name[MAX_PATH];
BYTE Policy;
static const int POLICYVALUE = 3;
}_SEP;
typedef struct SIE7Stats
{
TCHAR classid[MAX_PATH];
BYTE flags;
static const int FLAGSVALUE = 4;
}_SIS7;
typedef struct SIE8Stats
{
TCHAR classid[MAX_PATH];
}_SIS8;
typedef struct SActiveXCompatibility
{
TCHAR classid[MAX_PATH];
}_SAXC;
typedef struct SSettings
{
TCHAR classid[MAX_PATH];
}_SS;
private:
CIERegister(){}
~CIERegister(){}
};
#pragma warning(pop)
#endif
相关文章推荐
- 使用Js脚本 修改控制IE的注册表相关设置(activex等)
- 使用Js脚本 修改控制IE的注册表相关设置(activex等)
- 使用Js脚本 修改控制IE的注册表相关设置(activex等)
- 使用Js脚本 修改控制IE的注册表相关设置(activex等)
- 使用Js脚本 修改控制IE的注册表相关设置(activex等)
- C#调用注册表,修改IE相关配置
- VBS 通过注册表修改ie的安全级别,允许本地文件的脚本运行
- 修改注册表来修改IE的设置---资料汇总
- 能过修改注册表来修改IE的设置
- C#修改注册表 以修改IE代理服务器
- XP系统优化和安全限制 IE相关修改方法与注册表文件第1/2页
- 通过修改注册表添加IE右键菜单
- 通过注册表修改IE的Internet选项
- 注册表修改相关设置
- 修改注册表添加IE信任站点及启用Activex控件
- C#通过修改注册表改变IE默认选项
- 修改注册表来修改IE的设置---资料汇总
- 使用MFC开发ActiveX控件时修改注册表来标记控件为安全
- 『原创』在部署项目时通过脚本、注册表修改SQL Server 2005的相关属性