您的位置:首页 > 其它

webbroswer屏蔽Windows2003下“增强安全设置”窗口的方法

2009-12-14 15:02 176 查看
在windows2003下,一般情况下当我们用IE访问一个站点的时候会弹出“增强的安全设置”的对话框,很让人讨厌,单我们自己的webbroswer访问的时候也会有这种情况,有些让我们显得很被动,有什么方法能屏蔽它呢?我给大家做个示范吧。

1 在引用webbroswer的窗口类中继承IInternetSecurityManager和IServiceProvider接口,具体代码如参考我的前一篇博文。
2 重载以下方法:SetSecuritySite,GetSecuritySite,MapUrlToZone,GetSecurityId,ProcessUrlAction,QueryCustomPolicy,SetZoneMapping,GetZoneMappings,具体代码可参考
virtual HRESULT STDMETHODCALLTYPE SetSecuritySite(
/* [unique][in] */ IInternetSecurityMgrSite *pSite) { return INET_E_DEFAULT_ACTION; }

virtual HRESULT STDMETHODCALLTYPE GetSecuritySite(
/* [out] */ IInternetSecurityMgrSite **ppSite) { return INET_E_DEFAULT_ACTION; }

virtual HRESULT STDMETHODCALLTYPE MapUrlToZone(
/* [in] */ LPCWSTR pwszUrl,
/* [out] */ DWORD *pdwZone,
/* [in] */ DWORD dwFlags) { *pdwZone = 2; return S_OK; }

virtual HRESULT STDMETHODCALLTYPE GetSecurityId(
/* [in] */ LPCWSTR pwszUrl,
/* [size_is][out] */ BYTE *pbSecurityId,
/* [out][in] */ DWORD *pcbSecurityId,
/* [in] */ DWORD_PTR dwReserved) { return INET_E_DEFAULT_ACTION; }

virtual HRESULT STDMETHODCALLTYPE ProcessUrlAction(
/* [in] */ LPCWSTR pwszUrl,
/* [in] */ DWORD dwAction,
/* [size_is][out] */ BYTE *pPolicy,
/* [in] */ DWORD cbPolicy,
/* [in] */ BYTE *pContext,
/* [in] */ DWORD cbContext,
/* [in] */ DWORD dwFlags,
/* [in] */ DWORD dwReserved) { return URLPOLICY_ALLOW; }

virtual HRESULT STDMETHODCALLTYPE QueryCustomPolicy(
/* [in] */ LPCWSTR pwszUrl,
/* [in] */ REFGUID guidKey,
/* [size_is][size_is][out] */ BYTE **ppPolicy,
/* [out] */ DWORD *pcbPolicy,
/* [in] */ BYTE *pContext,
/* [in] */ DWORD cbContext,
/* [in] */ DWORD dwReserved) { return INET_E_DEFAULT_ACTION; }

virtual HRESULT STDMETHODCALLTYPE SetZoneMapping(
/* [in] */ DWORD dwZone,
/* [in] */ LPCWSTR lpszPattern,
/* [in] */ DWORD dwFlags) { return INET_E_DEFAULT_ACTION; }

virtual HRESULT STDMETHODCALLTYPE GetZoneMappings(
/* [in] */ DWORD dwZone,
/* [out] */ IEnumString **ppenumString,
/* [in] */ DWORD dwFlags) { return INET_E_DEFAULT_ACTION; }
3 接着在QueryInterface方法中处加上如下代码:
if (IsEqualIID(riid,IID_IServiceProvider))
{
*ppv = static_cast<IServiceProvider*>(this);
return S_OK;
}
4 最后在QueryService方法中加入以下实现即可:
if (IsEqualIID(riid, IID_IInternetSecurityManager))
{
*ppvObject = static_cast<IInternetSecurityManager*>(this);
return S_OK;
}
以上四步即可完全屏蔽那可恶的窗口了,具体原理请参见MSDN,本人不多说。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: