背景是这样的……
写了一DLL,远线程注入之后,发现HOOK RECV安装和运行都非常良好,就是封包丢了无数………………哈哈自定义RECV是这样的:int WINAPI m_ws2_recv(SOCKET s, char FAR *buf, int len, int flags)
{
    int nReturn = 0; HookOffOne(&_ws2_RecvHook);           //恢复原RECV函数的入口
        nReturn = recv(s, buf, len, flags);   //执行原RECV函数
HookOnOne(&_ws2_RecvHook);            //继续截获 if ( nReturn == -1 )                  //发生错误时返回
return -1 ; 

char *tmpbuf = new char[nReturn];     //定义一个临时缓冲区,存储BUF内容
//memset(tmpbuf,0,nReturn);
memcpy(tmpbuf,buf,nReturn);           //将BUF复制到临时缓冲区
SendMsg(tmpbuf ,nReturn,_ws2_RecvIndex);   //发送WM_COPYDATA到接收窗体

delete tmpbuf;                        //删除临时缓冲区
    return(nReturn);
}个人觉得没问题(临时缓冲区那段可以删除直接发送BUF,懒,没改),可封包丢失严重
看了一些代码,在复制缓冲区BUF时用的都是LEN为长度,可据我了解,这个数据是不可靠的,RECV函数返回值才是RECV从SOCKET那里真正复制的内容长度,可我这样写丢包啊!还请达人指教!!最好有代码,哈哈哈,虽然要代码很无耻,但我VC++不上手,VB才是本行……