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

Вниз

Хуки   Найти похожие ветки 

 
Spawn ©   (2003-07-05 18:40) [0]

Пытаюсь перехватывать вызовы АПИ в процессе, но почему то определенная мною функция не вызывается. Делаю подцепление своей ДЛЛ через Хук на WH_CBT (на WH_GETMESSAGE пробовал тоже ни чего не вышло, хотя класс подмены функции, который я юзал выдавал, что подмена прошла успешно).

Вот установка хука


function NewFindWindowA(lpClassName, lpWindowName: PAnsiChar): HWND; stdcall;
begin
ShowMessage("Message From FindWindowA - "+lpWindowName);
Result:=OldFindWindowA(lpClassName,lpWindowName);
end;

function CBTProc(code:integer;wParam:word;lParam:longint):longint;stdcall;
var
hDC:THandle;
wndClass:array[0..127] of Char;

begin
if Code<0 then
Result:=CallNextHookEx(HookHandle,Code,wParam,lParam);
if (code=HCBT_CREATEWND) then
begin
GetClassName(wParam,wndClass,128);
if wndClass=ProgrammClass then
begin
try
PeImportHooks:=TJclPeMapImgHooks.Create;
if PeImportHooks.HookImport(Pointer(HInstance), user32, "FindWindowA",
@NewFindWindowA, @OldFindWindowA) then
begin
Result:=True;
ShowMessage("FindWindowA hooked ...");
end
else
( Format("FindWindowA hooking error - %s", [SysErrorMessage(GetLastError)
Пытаюсь перехватывать вызовы АПИ в процессе, но почему то определенная мною функция не вызывается. Делаю подцепление своей ДЛЛ через Хук на WH_CBT (на WH_GETMESSAGE пробовал тоже ни чего не вышло, хотя класс подмены функции, который я юзал выдавал, что подмена прошла успешно).

Вот установка хука


function NewFindWindowA(lpClassName, lpWindowName: PAnsiChar): HWND; stdcall;
begin
ShowMessage("Message From FindWindowA - "+lpWindowName);
Result:=OldFindWindowA(lpClassName,lpWindowName);
end;

function CBTProc(code:integer;wParam:word;lParam:longint):longint;stdcall;
var
hDC:THandle;
wndClass:array[0..127] of Char;

begin
if Code<0 then
Result:=CallNextHookEx(HookHandle,Code,wParam,lParam);
if (code=HCBT_CREATEWND) then
begin
GetClassName(wParam,wndClass,128);
if wndClass=ProgrammClass then
begin
try
PeImportHooks:=TJclPeMapImgHooks.Create;
if PeImportHooks.HookImport(Pointer(HInstance), user32, "FindWindowA",
@NewFindWindowA, @OldFindWindowA) then
begin
Result:=True;
ShowMessage("FindWindowA hooked ...");
end
else
ShowMessage(Format("FindWindowA hooking error - %s", [SysErrorMessage(GetLastError)]));
finally
FreeAndNil(PeImportHooks);
end;
end;
Result:=0;
end
else
Result:=CallNextHookEx(HookHandle,code,wParam,lParam);
end;

procedure SetHook; export; stdcall;
begin
if HookHandle=0 then
HookHandle := SetWindowsHookEx(WH_CBT, @CBTProc, HInstance, 0);
end;


В чем может быть дело? А используемый мною хук не мог сразу выгрузить себя из процесса после перехода к следующему вызову? Заранее спасибо. Заранее спасибо.


 
Cobalt ©   (2003-07-07 14:49) [1]

Видимо, вы не прочитали статью про хуки (см. http://www.delphimaster.ru/articles.html)
Подсказка - обратите внимание на глобальные (межпроцессные) переменные, хранящиеся в MAP-файле.



Страницы: 1 вся ветка

Текущий архив: 2003.09.08;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
1-24465
Andrey V.
2003-08-27 20:55
2003.09.08
Разница в создании формы или почему я получаю AV


14-24671
gn
2003-08-20 08:00
2003.09.08
С#


6-24598
ASTARD
2003-07-02 21:51
2003.09.08
У меня еще вопрос по поводу ПОП3?


8-24561
LK
2003-05-12 16:26
2003.09.08
Midi API


1-24418
Zlobniy Virus.exe
2003-08-27 19:29
2003.09.08
Изменение битов в файлах