近日在开发IE插件时,遇到一个奇怪的问题,怎么调试都没有想到问题原因,问题现象:
通过hooking wininet.dll 在插件中使用InternetSetStatusCallback替换IE原来的回调函数,
//替换原来的函数
originalCallBack = InternetSetStatusCallbackW(hInternet, newCallBack)
//再还原回原来的函数
tt = InternetSetStatusCallbackW(hInternet, originalCallBack)
这时直接访问百度的https://www.baidu.com,IE可以正常使用
但访问http://www.baidu.com时,IE就频繁在刷新,页面始终打不开,请问各位是什么原因?
------解决思路----------------------
参考下 wininet 异步+多线程
------解决思路----------------------
通常情况下你对函数的处理不完整,或者返回值不正确,或者某些参数或者标志位的处理有遗漏
------解决思路----------------------
看是不是多线程问题造成的
既然hook了就不用恢复了啊?
在自己的的回调函数中 处理过后,最后调用IE的原回调函数,不恢复试试
------解决思路----------------------
WinAPIOverridehttp://jacquelin.potier.free.fr/winapioverride32/
------解决思路----------------------
http跟https你处理是不是有不同。页面返回等可能有区别
------解决思路----------------------
感觉复杂了,他内部实现有问题吗,只能调用一次InternetSetStatusCallbackW吗
试试直接hook InternetSetStatusCallbackW进行替换,不恢复,自己调用原回调
------解决思路----------------------
相关测试代码我发布在网盘上
http://pan.baidu.com/s/1dDGZSEd 密码:qujr
------解决思路----------------------
估计和多线程有关。