Главная страница
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.022 c
4-24756
miguel1
2003-07-09 13:24
2003.09.08
Ошибка при вызове функции WriteFile?!


8-24568
Stexen
2003-04-29 23:58
2003.09.08
Что-то вроде паинт!!


3-24344
Alex9
2003-08-18 07:57
2003.09.08
Запись данных на диск


1-24410
Dm1625
2003-08-25 13:18
2003.09.08
Класс-оболочка в каждой форме, исходный - один в главной


1-24420
Pindos
2003-08-25 20:55
2003.09.08
Proxies - нет у меня такого!!!