您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: