Atl 重载 objsafe接口

来源:互联网 发布:u盘查杀软件 编辑:程序博客网 时间:2024/06/05 07:17

参考来源:http://blog.csdn.net/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;
}

//----

}

原创粉丝点击