InternetSetStatusCallback的奇怪问题

LGYAN 2015-07-09 05:24:05
近日在开发IE插件时,遇到一个奇怪的问题,怎么调试都没有想到问题原因,问题现象:
通过hooking wininet.dll 在插件中使用InternetSetStatusCallback替换IE原来的回调函数,
//替换原来的函数
originalCallBack = InternetSetStatusCallbackW(hInternet, newCallBack)
//再还原回原来的函数
tt = InternetSetStatusCallbackW(hInternet, originalCallBack)


这时直接访问百度的https://www.baidu.com,IE可以正常使用
但访问http://www.baidu.com时,IE就频繁在刷新,页面始终打不开,请问各位是什么原因?
...全文
585 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
图灵转世 2015-08-31
  • 打赏
  • 举报
回复
估计和多线程有关。
LGYAN 2015-08-29
  • 打赏
  • 举报
回复
没有人知道如果做吗
LGYAN 2015-08-09
  • 打赏
  • 举报
回复
相关测试代码我发布在网盘上 http://pan.baidu.com/s/1dDGZSEd 密码:qujr
lgyan001 2015-08-08
  • 打赏
  • 举报
回复
相关测试代码我发布在网盘上 http://pan.baidu.com/s/1dDGZSEd 密码:qujr
LGYAN 2015-08-03
  • 打赏
  • 举报
回复
相关测试代码我发布在网盘上 http://pan.baidu.com/s/1dDGZSEd 密码:qujr
LGYAN 2015-08-03
  • 打赏
  • 举报
回复
没有人知道这个问题怎么解决吗?
LGYAN 2015-07-20
  • 打赏
  • 举报
回复
hook不到 InternetSetStatusCallbackW,因为hook的过程可能在网页打开中间,也就是在internetopen以后
silencenet 2015-07-18
  • 打赏
  • 举报
回复
感觉复杂了,他内部实现有问题吗,只能调用一次InternetSetStatusCallbackW吗 试试直接hook InternetSetStatusCallbackW进行替换,不恢复,自己调用原回调
LGYAN 2015-07-16
  • 打赏
  • 举报
回复
我唯一所做的处理就是 在hook的InterConect函数, IntPtr InternetConnectW(IntPtr hInternet, string strServer, uint ulPort, string strUser, string strPassword, uint ulService, uint ulFlags, uint ulContext) 中里使用 InternetSetStatusCallbackW修改hInternet的回调函数,并且每一个hInternet只设置一次, 但我在下一行代码里又设回去了,就是相当于我什么都没做,还是不行,如果不用注释掉这两行代码,网页可以正常访问
LGYAN 2015-07-16
  • 打赏
  • 举报
回复
static INTERNET_STATUS_CALLBACK cb;
LGYAN 2015-07-16
  • 打赏
  • 举报
回复
代码如下 INTERNET_STATUS_CALLBACK CWininetHook::cb=NULL; HINTERNET WINAPI CWininetHook::_InternetConnectW(__in HINTERNET hInternet,__in LPCWSTR lpszServerName,__in INTERNET_PORT nServerPort,__in_opt LPCWSTR lpszUserName,__in_opt LPCWSTR lpszPassword,__in DWORD dwService,__in DWORD dwFlags,__in_opt DWORD_PTR dwContext) { if(!cb){ cb = InternetSetStatusCallbackW(hInternet,CWininetHook::_InternetStatusCallback); InternetSetStatusCallbackW(hInternet,cb); } HINTERNET hConnect = s_pfnInternetConnectW( hInternet, lpszServerName, nServerPort, lpszUserName, lpszPassword, dwService, dwFlags, dwContext); return hConnect; } void WINAPI CWininetHook::_InternetStatusCallback(_In_ HINTERNET hInternet, _In_ DWORD_PTR dwContext, _In_ DWORD dwInternetStatus, _In_ LPVOID lpvStatusInformation, _In_ DWORD dwStatusInformationLength) { if(cb){ cb(hInternet,dwContext,dwInternetStatus,lpvStatusInformation,dwStatusInformationLength); } }
oyljerry 2015-07-15
  • 打赏
  • 举报
回复
http跟https你处理是不是有不同。页面返回等可能有区别
LGYAN 2015-07-14
  • 打赏
  • 举报
回复
upupup下,坐等高人
赵4老师 2015-07-14
  • 打赏
  • 举报
回复
silencenet 2015-07-12
  • 打赏
  • 举报
回复
看是不是多线程问题造成的 既然hook了就不用恢复了啊? 在自己的的回调函数中 处理过后,最后调用IE的原回调函数,不恢复试试
LGYAN 2015-07-12
  • 打赏
  • 举报
回复
1、确定不是多线程的问题,否则解释不了访问http://www.baidu.com和htts//:www.baidu.com有不同的结果。 2、在InternetSetStatusCallbackW设置为自己的回调函数后,再设回IE的原回调函数,就是担心自己的回调函数写的有问题,但这样依然是同一个结果
LGYAN 2015-07-11
  • 打赏
  • 举报
回复
不是,我先替换了IE的回调函数,紧跟着又将回调函数替换为原来的IE函数,也就是相当于我什么操作都没有动 为什么对于http://www.baidu.com和htts//:www.baidu.com有不同的结果,直接访问htts//:www.baidu.com没有任何问题 ,而直接访问http://www.baidu.com时,ie就不停在刷新,并且是不断在重定向到htts//:www.baidu.com,正常的情况下是重定向一次
redui 2015-07-10
  • 打赏
  • 举报
回复
通常情况下你对函数的处理不完整,或者返回值不正确,或者某些参数或者标志位的处理有遗漏
zgl7903 2015-07-09
  • 打赏
  • 举报
回复
LGYAN 2015-07-09
  • 打赏
  • 举报
回复
up up up
加载更多回复(1)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧