[ATL/IE]DISPID_FILEDOWNLOAD,下载管理器

[ATL/IE高手进]DISPID_FILEDOWNLOAD,下载管理器?
写了一个BHO截获点击IE超链接下载的消息,
同时屏蔽IE默认的下载管理器,弹出定制的下载管理器,
类似flashget,迅雷.
这里有三个问题相问:

1.sink   DISPID_FILEDOWNLOAD,在定制的下载管理器cancel的时候,允许弹出IE下载管理器,用下面语句,
*pDispParams-> rgvarg[0].pboolVal   =   VARIANT_FALSE;  
问题出来了,会弹出IE默认的下载管理器,但是不去sink   DISPID_ONQUIT,直接退出,在debug的时候,引起IE   break,这是为什么呢?

2.通过IE收藏菜单点击的链接也sink   DISPID_FILEDOWNLOAD,有时候是起定制的下载管理器,有什么办法能屏蔽这种操作也能起下载管理器吗?

3.在频繁点击链接的时候,偶尔会引起IE崩溃,review了好多次代码,不知道究竟什么地方引起IE   break,通常引起IE   break的原因有哪些呢?

case   DISPID_FILEDOWNLOAD:
{
if(   pDispParams-> cArgs   >   0   )
{
BSTR   bstrURL   =   NULL;
HRESULT   hr   =   m_pWebBrowser-> get_LocationURL(   &bstrURL   );
if(   S_OK   ==   hr   )
{
*pDispParams-> rgvarg[0].pboolVal   =   VARIANT_TRUE;
if(TRUE   ==   RunAppToDownload())   //   to   start   my   download   manager
{
if(m_bDownload   ==   TRUE)   //a   flag   if   my   download   manager   is   run
*pDispParams-> rgvarg[0].pboolVal   =   VARIANT_TRUE;//disable   ie   download   manager
else
*pDispParams-> rgvarg[0].pboolVal   =   VARIANT_FALSE;//enable   ie   download   manager
}
else
*pDispParams-> rgvarg[0].pboolVal   =   VARIANT_FALSE;
}
}
}
break;

------解决方案--------------------
这样不好定位问题,建议使用插入法调试(可以使用messagebox),跟一下你的BHO执行到哪里?
------解决方案--------------------
同步这段代码