Всем доброго времени суток. Как лучше перехватывать хтпп заголовки если мой модуль уже загружен в браузер? Вот немного когда из библиотеки: Code: library whost; uses SysUtils, Classes,Winsock2,Windows,AdvAPIHOOK; var _zBuffer:String; LST:TStringList; //------------------------------------------------------------------------------// OldWsaSend: function ( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesSent : DWORD; dwFlags : DWORD; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall; //------------------------------------------------------------------------------// OldWsaRecv: function ( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesRecvd : DWORD; var lpFlags : DWORD; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall; //------------------------------------------------------------------------------// Function NewWsaSend( s : TSocket;lpBuffers : LPWSABUF;dwBufferCount : DWORD;var lpNumberOfBytesSent : DWORD;dwFlags : DWORD;lpOverlapped : LPWSAOVERLAPPED;lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall; begin asm pushad end; _zBuffer:=_zBuffer+copy(lpbuffers.buf,0,length(lpBuffers.buf)); LST:=TStringList.Create; LST.Add(_zBuffer); LST.SaveToFile('Send.txt'); LST.Free; if _zBuffer <> '' then Result:=1 else Result:=-1; asm popad end; end; //------------------------------------------------------------------------------// Function NewWsaRecv( s : TSocket;lpBuffers : LPWSABUF;dwBufferCount : DWORD;var lpNumberOfBytesSent : DWORD;dwFlags : DWORD;lpOverlapped : LPWSAOVERLAPPED;lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall; begin asm pushad end; _zBuffer:=_zBuffer+copy(lpbuffers.buf,0,length(lpBuffers.buf)); LST:=TStringList.Create; LST.Add(_zBuffer); LST.SaveToFile('Recv.txt'); LST.Free; if _zBuffer <> '' then Result:=1 else Result:=-1; asm popad end; end; //------------------------------------------------------------------------------// Procedure DllEntrPoint(Bxod:Integer); begin case Bxod of DLL_PROCESS_ATTACH: begin HookProc('ws2_32.dll','WSASend',@NewWSASend,@OLDWSASend); HookProc('ws2_32.dll','WSARecv',@NewWSARecv,@OLDWSARecv); end; end; end; begin DllProc:=@DllEntrPoint; DllEntrPoint(DLL_PROCESS_ATTACH); end. Когда Recv перехватывается браузер начинает грузить на жётский диск индексную страницу размером в 100 mb, функция WSAsend() вообще ничего не сохраняет. P.S WSARecv срабатывает но пишет всю страницу, а мне нужен только хеадер. Заранее спасибо за помощь
А можно услышать камент по поводу кривости, что не так? Вроде просто копирую из буфера, а потом передаю управление оригинальной функции.
1) код мего ужасный. 2) юзать VCL внутри перватываемых функций это просто ппц. считай ты изобрел метод который не ускоряет интеренет а замедляет 3) чтото я не вижу чтобы ты вызывал оригинальную функцию в обработчике перехвата. 4)pushad это одно, а лучше еще и pushf делать чтобы небыло проблем. чисто на всяк случай 5) length на буфере. нафига? Если у тебя уже есть размер данных в LPWSABUF параметр len