Главная страница
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.019 c
6-24592
Rol
2003-07-03 11:55
2003.09.08
Доступ по FTP в локальной сети.


14-24658
McLoop
2003-08-20 18:05
2003.09.08
Мою тему удалили три раза.


14-24686
Anon0mous
2003-08-19 13:50
2003.09.08
Black Cat


14-24693
Alexander Vasjuk
2003-08-19 16:36
2003.09.08
100%-й оффтопик. Управление файлами в Web.


6-24582
StanSSmit
2003-07-07 03:56
2003.09.08
Подсчет трафика c конкретным IP