Главная страница
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.009 c
2-1314023423
alexdn
2011-08-22 18:30
2011.12.11
Обьявление переменной в var


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


2-1314252863
санек
2011-08-25 10:14
2011.12.11
Выполнение команды в cmd


1-1276512538
Дмитрий Белькевич
2010-06-14 14:48
2011.12.11
Ищу реализацию таймера в треде.


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