我拦截迅雷的WSARecv后,,, 迅雷就出错了,自动退出,,而且nReturn =WSARecv(返回的是-1;
怎么解决这个问题呢?
int WINAPI MyWSARecv(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
{ int nReturn;
HookOffOne(&WSARecvapi);
nReturn =WSARecv(s, lpBuffers, dwBufferCount,lpNumberOfBytesRecvd,lpFlags,lpOverlapped,lpCompletionRoutine);
//Sleep(su);
//len1=nReturn;
HookOnOne(&WSARecvapi); char *tmpbuf=new char[*lpNumberOfBytesRecvd+100];
memset(tmpbuf, 0, sizeof(tmpbuf));
sprintf(tmpbuf, "WSASend|%d|%d|%s",
GetCurrentProcessId(),
lpNumberOfBytesRecvd,
lpBuffers->buf);
sndmsg(tmpbuf);
delete tmpbuf;
return(nReturn);
}
怎么解决这个问题呢?
int WINAPI MyWSARecv(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
{ int nReturn;
HookOffOne(&WSARecvapi);
nReturn =WSARecv(s, lpBuffers, dwBufferCount,lpNumberOfBytesRecvd,lpFlags,lpOverlapped,lpCompletionRoutine);
//Sleep(su);
//len1=nReturn;
HookOnOne(&WSARecvapi); char *tmpbuf=new char[*lpNumberOfBytesRecvd+100];
memset(tmpbuf, 0, sizeof(tmpbuf));
sprintf(tmpbuf, "WSASend|%d|%d|%s",
GetCurrentProcessId(),
lpNumberOfBytesRecvd,
lpBuffers->buf);
sndmsg(tmpbuf);
delete tmpbuf;
return(nReturn);
}
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
{
int nReturn;
HookOffOne(&WSARecvapi); //Sleep(su);
nReturn =WSARecv(s, lpBuffers, dwBufferCount,
lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine);
if(nReturn == SOCKET_ERROR)
{
if(WSAGetLastError() != WSA_IO_PENDING)
return nReturn; if(!WSAGetOverlappedResult(s, lpOverlapped, lpNumberOfBytesRecvd, TRUE, lpFlags))
return SOCKET_ERROR;
}
len1=nReturn;
HookOnOne(&WSARecvapi);
/* char *tmpbuf=new char[*lpNumberOfBytesRecvd+100];
memset(tmpbuf, 0, sizeof(tmpbuf));
sprintf(tmpbuf, "WSASend|%d|%d|%s",
GetCurrentProcessId(),
lpNumberOfBytesRecvd,
lpBuffers->buf);
sndmsg(tmpbuf);
delete tmpbuf;*/
return(nReturn);
}