Главная страница
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
4-24748
Coban
2003-07-06 12:30
2003.09.08
w9x аналог GetUserProfileDirectory


14-24652
Некрофил - затейник__
2003-08-20 07:25
2003.09.08
Админы у меня идея! А не создать ли новый раздел?


1-24440
KSergey
2003-08-26 08:48
2003.09.08
Вопрос про DLL и свойство Application.Handle


1-24456
Yanis
2003-08-24 02:03
2003.09.08
Выбор цвета.


6-24583
Diamond Dog
2003-06-21 19:35
2003.09.08
Ограничение трафика