SPI拦截WSPRecv解决方法

SPI拦截WSPRecv
首次用C,拦截了WSPRecv函数,原以为进行如下修改后应该和没有拦截一样的效果,但是现在所有收到的包全部都是乱码,请大虾指点
int   WSPAPI   WSPRecv(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE   lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
)
{
WSABUF   lptmpBuf;
lptmpBuf.len=lpBuffers-> len;
lptmpBuf.buf=(char   *)malloc(lptmpBuf.len);
memcpy(lptmpBuf.buf,lpBuffers-> buf,lpBuffers-> len);

int   iRet   =   NextProcTable.lpWSPRecv(s,   &lptmpBuf,   dwBufferCount
,   lpNumberOfBytesRecvd,   lpFlags,   lpOverlapped
,   lpCompletionRoutine,   lpThreadId,   lpErrno);
free(lptmpBuf.buf);
return   iRet;
}

------解决方案--------------------
up
------解决方案--------------------
看了下,感觉是free(lptmpBuf.buf)处的问题,在return iRet前加上这句可能导致缓冲区内容改变。不知你是要实现什么目的,不过觉得去掉free这句收到的内容因该不会变。
------解决方案--------------------
非要追加吗?再发一个新的不行吗?