Форум: "Основная";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];
ВнизПо два раза приходят перехваченные пакеты через WM_COPYDATA. Найти похожие ветки
← →
AKomander (2010-06-22 21:07) [0]Перехватываю пакеты у приложения и отправляю его клиентской программе через Dll инжектинг.
Две проблемы:
1) Данные приходят по два раза (причем когда как, иногда один)
2) Длинна принимаемых данных больше, чем само сообщение. Т.е. в cbData при приеме сообщения WM_COPYDATA, больше, чем реальные данные и я принимаю дофига левых данных.
Помогите.
Функция передачи данных:
procedure SendData(Data:Pointer; len:integer);
var
d:TCopyDataStruct;
begin
d.lpData := data;
d.cbData := len;
d.dwData := 0;
SendMessage(FindWindow(nil,"Sniffer"), WM_COPYDATA, 0, LongInt(@d));
End;
Функция заменяющая Recv:
function NewRecv (s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
begin
Result := OldRecv (s, Buf, len, flags);
SendData(addr(string(buf)), len);
end;
Принимаю сообщения у себя в программе:
private
procedure SniffMessage(var Msg: TWMCopyData); message WM_COPYDATA;
...
procedure TMainForm.SniffMessage(var Msg: TWMCopyData);
var
ReceivedText: string;
begin
SetString(ReceivedText, PChar(Msg.CopyDataStruct.lpData),Msg.CopyDataStruct.cbData);
MessMemo.Lines.Add(ReceivedText);
MessMemo.Lines.Add("-------------");
end;
← →
KilkennyCat © (2010-06-22 21:12) [1]http://msdn.microsoft.com/en-us/library/ms649009%28v=VS.85%29.aspx
← →
KilkennyCat © (2010-06-22 21:13) [2]
> d.dwData := 0;
> SendMessage(FindWindow(nil,"Sniffer"), WM_COPYDATA, 0,
> LongInt(@d));
> End;
и как всегда никакой обработки результата...
← →
AKomander (2010-06-22 21:30) [3]И что я должен был увидеть в msdn?
>и как всегда никакой обработки результата...
А зачем? Пришло оно или нет, какая мне разница. Я не теряю сообщения, а получаю их в избытке.
← →
_Юрий © (2010-06-22 22:54) [4]Вероятно, там отсутствует терминирующий ноль.
Зачем кастить к строке при SendData, тоже не очень ясно
← →
Leonid Troyanovsky © (2010-06-23 08:08) [5]
> AKomander (22.06.10 21:30) [3]
> И что я должен был увидеть в msdn?
http://msdn.microsoft.com/en-us/library/ms740121(VS.85).aspx
со всеми остановками.
> _Юрий © (22.06.10 22:54) [4]
> Вероятно, там отсутствует терминирующий ноль.
Скорее null внутри буфера:
> 2) Длинна принимаемых данных больше, чем само сообщение.
бо, кастится к string.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c