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

    在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,本人不多说。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值