SPI拦截修改发送数据包

我在做一个拦截数据包,并修改再次发送的程序,目前的问题是可以在WSPSEND函数中获取发送缓冲区的数据,但是修改数据后会导致网络程序崩溃,请问下,这个函数体里面如何修改转发,有没有什么特定的格式?
源码如下:
int WSPAPI WSPSend(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
)
{
char newstring[10] = "123123123";
PrintSocket(s, *lpNumberOfBytesSent, "WSPSend");
FILE *fp;
fp = fopen("C:/packet.txt", "a+" );
memcpy(lpBuffers[0].buf, newstring, 10);
fwrite(lpBuffers->buf,sizeof(char), lpBuffers->len, fp);
fclose(fp);
return NextProcTable.lpWSPSend(s, lpBuffers, dwBufferCount
, lpNumberOfBytesSent, dwFlags, lpOverlapped
, lpCompletionRoutine, lpThreadId, lpErrno);
目前是会在文件中保存到包的数据的,但是程序也会崩溃,我替换的字符只是简单的测试能否修改,请大神指教这个函数体中如何修改缓冲区数据,这个缓冲区中包含数据包头部么,还是只是有数据部分?