/********************************************************************
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]