一定要是inline挂钩,导入表的挂钩未必管用试试GetOverlappedResult有没有调用实在不行也还有办法,hevent为null的话自行填充,然后自行等待。如果在不行,轮询检测overlapped中的值,那四个值是有固定含义的,可以判断io成功的字节数

解决方案 »

  1.   

    楼主找到解决方案了吗?我在IE11里hook WSARecv也碰到同样的问题。 
      

  2.   

    目前没有找到解决方案哦。
    用的detours 3.0库,按理说应该不存在 漏hook的问题,但是确实GetQueuedCompletionStatus没有反应。
    在chrome里 都可以。
    不是知道是不是 win7 64位的问题。 目前手里没有win7 32位的机器 ,还调试不了。我有个折中的方案,就是强行将lpOverlapped设为null,让他变成阻塞式,就可以了。
      

  3.   

    可能是调用了64位的方法了吧,detours 对于64位的hook应该跟32位的不完全一样吧,网上还说得收费的
      

  4.   

    http://www.codeproject.com/Articles/44326/MinHook-The-Minimalistic-x-x-API-Hooking-Libra
      

  5.   


    我在IE11里的问题已经解决了。 IE11使用了ThreadpoolIO. 对于每个socket,都会注册相应的callback, 异步socket操作完成以后,这个callback会被调用。我把IE11注册的callback替换成我自己的callback就能拦截到数据了, 下面是几个需要hook的关键API
       CreateThreadpoolIo
       CloseThreadpoolIo
       WSASend
       WSARecv
       connectex
    希望对你的问题也有帮助。
      

  6.   

    楼主解决了吗?能否把你的hooked_WSARecv_ws232完整代码贴出来共享下?
      

  7.   


    我在IE11里的问题已经解决了。 IE11使用了ThreadpoolIO. 对于每个socket,都会注册相应的callback, 异步socket操作完成以后,这个callback会被调用。我把IE11注册的callback替换成我自己的callback就能拦截到数据了, 下面是几个需要hook的关键API
       CreateThreadpoolIo
       CloseThreadpoolIo
       WSASend
       WSARecv
       connectex
    希望对你的问题也有帮助。

    缓存WSARecv中的buf overlapped
    CreateThreadpoolIo回调函数中 overlapped找到buf