为什么拦截不到封包??

summerlove 2004-10-17 04:47:54
dll工程文件中
HookAPI('ws2_32.dll','WSASend',@WSASendHook,@WSASendOrigin);

hook文件中
function WSASendHook(s:TSocket;lpBuffers:LPWSABUF;
dwBufferCount:dword;lpNumberOfBytesSent:LPDWORD;
dwFlags:DWORD;lpOverlapped:LPWSAOVERLAPPED;
lpCompletionROUTINE:LPWSAOVERLAPPED_COMPLETION_ROUTINE):integer;stdcall;
var
myBuf:PChar;
myLen:Integer;
begin
PopUnit.FrmPop.ListBox1.Items.Add('拦截到发送的封包');
strcopy(myBuf,lpBuffers.buf);
PopUnit.FrmPop.ListBox1.Items.Add(myBuf);
WSASendHook:=WSASendOrigin(s,lpBuffers,dwBufferCount,
lpNumberOfBytesSent,dwFlags,lpOverlapped,lpCompletionROUTINE);
end;
这样为什么不行,出错在哪里了?
...全文
193 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
andcom 2004-10-18
  • 打赏
  • 举报
回复
改成这样:
const
MAX_BUFFER_SIZE=2048;

function WSASendHook(s:TSocket;lpBuffers:LPWSABUF;
dwBufferCount:dword;lpNumberOfBytesSent:LPDWORD;
dwFlags:DWORD;lpOverlapped:LPWSAOVERLAPPED;
lpCompletionROUTINE:LPWSAOVERLAPPED_COMPLETION_ROUTINE):integer;stdcall;
var
myBuf:array[0..MAX_BUFFER_SIZE-1];
myLen:Integer;
begin
PopUnit.FrmPop.ListBox1.Items.Add('拦截到发送的封包');
if lpNumberOfBytesSent>MAX_BUFFER_SIZE then
myLen:=MAX_BUFFER_SIZE
else
myLen:=lpNumberOfBytesSent;
copymemory(@myBuf[0], lpBuffers.buf, myLen);
PopUnit.FrmPop.ListBox1.Items.Add(myBuf);
WSASendHook:=WSASendOrigin(s,lpBuffers,dwBufferCount,
lpNumberOfBytesSent,dwFlags,lpOverlapped,lpCompletionROUTINE);
end;

ps: delphi程序员应该重点看看指针的本质和应用
helodd 2004-10-18
  • 打赏
  • 举报
回复
顶+学习
zwb666 2004-10-17
  • 打赏
  • 举报
回复
学习+顶

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧