Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.11;
Скачать: CL | DM;

Вниз

По два раза приходят перехваченные пакеты через 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
15-1313841147
Leon-Z
2011-08-20 15:52
2011.12.11
Каретка Windows.


15-1314028401
Медвежонок Пятачок
2011-08-22 19:53
2011.12.11
Райт-ту-Лефт письменность


15-1313838266
SQLEXPRESS
2011-08-20 15:04
2011.12.11
а можно такой вопрос про КВН


15-1313675656
Andy BitOff
2011-08-18 17:54
2011.12.11
Протокол обмена с весами CAS AD-25


2-1314256395
Gevs
2011-08-25 11:13
2011.12.11
DBGrid