Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CBT_HOOK ! [D6, WinXP]


Страницы:   1 2 3

psa247 ©   (2006-02-12 17:50:00) 

Здравствуйте ! Почему CBT_HOOK не действует на окно сервиса ?


kaZaNoVa   (2006-02-13 15:21:00) [41]

psa247 ©   (13.02.06 15:17) [15]
По голове не погладят за это :)


почему? вполне документированный способ внедрения .. если нужен пример-есть ...


psa247   (2006-02-13 15:17:00) [42]


> kaZaNoVa ©   (13.02.06 15:09) [13]
> а что мешает временно отключать (программно) DEP  на время
> работы приложения?))


Нарушение безопасности системы. Лучше пусть будет.


> а так, вообще не ясно, всё должно работать, воможно DEP
>  как-то "защищает" от внедрений хуков системные сервисы
> .. (недокументированно может)


Тоже так думаю.


> а "зарядить" - можно CreateRemoteThread попробовать .. тока
> опять таки нет уверенности, что с включенной DEP будет работать
> ...


По голове не погладят за это :)


kaZaNoVa   (2006-02-13 15:10:00) [43]

psa247 ©   (13.02.06 15:05) [12]
а "зарядить" - можно CreateRemoteThreadпопробовать .. тока опять таки нет уверенности, что с включенной DEP будет работать ...


kaZaNoVa   (2006-02-13 15:09:00) [44]

psa247 ©   (13.02.06 15:05) [12]
а что мешает временно отключать (программно) DEP  на время работы приложения?))

а так, вообще не ясно, всё должно работать, воможно DEP  как-то "защищает" от внедрений хуков системные сервисы .. (недокументированно может)


psa247   (2006-02-13 15:05:00) [45]


> Digitman ©   (13.02.06 14:52) [11]

А как "зарядить" ее туда ? В чем может быть ошибка ? На машинах, где DEP не включен - все работает на "ура".


Digitman   (2006-02-13 14:52:00) [46]


> psa247 ©   (13.02.06 14:36) [8]
>
> > Digitman ©   (13.02.06 13:00) [7]
>
> Проверял, в списке используемых модулей - ее нет


Поэтому и "не действует".


psa247   (2006-02-13 14:50:00) [47]

Просьба ко всем нелюбителям, которые не любят, когда какое-то "наглое окно" выпрыгивает, когда они что-то делают.

Не надо высказываться по данному поводу. Уже не одна тема была затронута, я, практически, их все читал.



library OnTopWindow;

uses Windows;

const MMFName : PChar = 'Data_MMF';

type
 PGlobalDLLData = ^TGlobalDLLData;
 TGlobalDLLData = packed record
   SysHook : HHook;                
    OurWnd : HWND;                // дескриптор МОЕГО окна
 end;

var MMFHandle : THandle;
  GlobalData : PGlobalDLLData;

// Эта функция будет вызываться всякий раз, когда в системе появится интересующее нас
// событие, т.е. активация и передача фокуса какому-либо окну
function CBTProc(code : integer; wParam : longint; lParam : longint): longint; stdcall;
var OurWnd : HWND;
   SysHook : HHook;
begin
  SysHook:= GlobalData^.SysHook;        
  OurWnd:= GlobalData^.OurWnd;          
  if code < 0 then begin
    Result:= CallNextHookEx(SysHook,code,wParam,lParam); // Передаем далее по цепочке
    exit;
    end;
  Result:= 0;
  // Возвращаем "0" - позволяем провести событие
  // Возвращаем "1" - запрещаем событие
  if(code=HCBT_ACTIVATE)and(OurWnd<>Cardinal(wParam))then begin
    if(GetParent(wParam)=OurWnd)then begin
      BringWindowToTop(wParam);
      SetForegroundWindow(wParam);
      exit;
      end;
    BringWindowToTop(OurWND);
    SetForegroundWindow(OurWnd);
    Result:= 1;
    end;
{   // Возвращаем "0" - позволяем провести событие
  // Возвращаем "1" - запрещаем событие
  if(code=HCBT_SETFOCUS)and(OurWnd<>Cardinal(wParam))then begin
    if(GetParent(wParam)=OurWnd)then begin
      BringWindowToTop(wParam);
      SetForegroundWindow(wParam);
      SetFocus(wParam);
      exit;
      end;
    BringWindowToTop(OurWND);
    SetForegroundWindow(OurWnd);
    SetFocus(OurWnd);
    Result:= 1;
    end;}
end;

procedure Hook(switch : Boolean; OurWHandle : HWND)export; stdcall;
begin
  if switch then begin
   GlobalData^.SysHook:= SetWindowsHookEx(WH_CBT, @CBTProc, HInstance, 0);
   GlobalData^.OurWnd:= OurWHandle;    
   end
else UnHookWindowsHookEx(GlobalData^.SysHook);
end;

procedure OpenGlobalData;
begin
  MMFHandle:= CreateFileMapping(INVALID_HANDLE_VALUE,nil,PAGE_READWRITE,0,SizeOf(TGlobalDLLDat a),MMFName);
  if MMFHandle = 0 then exit;
  GlobalData:= MapViewOfFile(MMFHandle,FILE_MAP_ALL_ACCESS,0,0,SizeOf(TGlobalDLLData));
end;

procedure CloseGlobalData;
begin
  CloseHandle(MMFHandle);
end;

procedure DLLEntryPoint(dwReason: Integer);
begin
  case dwReason of
    DLL_PROCESS_ATTACH : OpenGlobalData;
    DLL_PROCESS_DETACH : CloseGlobalData;
    end;
end;

exports Hook name 'Hook';

begin
  DLLProc:= @DLLEntryPoint;
  DLLEntryPoint(DLL_PROCESS_ATTACH);
end.



С уважением.


Игорь Шевченко   (2006-02-13 14:37:00) [48]

psa247 ©   (13.02.06 14:36) [8]


> Объясните "на пальцах", пожалуйста


Марк Руссинович объясняет, на http://www.sysinternals.com

Код хука будет выложен или мы дальше будем телепаторы напрягать ?


psa247   (2006-02-13 14:36:00) [49]


> Digitman ©   (13.02.06 13:00) [7]

Проверял, в списке используемых модулей - ее нет.


> Игорь Шевченко ©   (13.02.06 12:35) [6]


> запрещает выполнение команд на странице с некорректной для
> выполнения защитой
Объясните "на пальцах", пожалуйста


Digitman   (2006-02-13 13:00:00) [50]


> не действует


Чтобы он "действовал" необходимо выполнение не менее одного (главного) условия : образ dll, в которой реализована логика этого глоб.хука, д.б. загружен в ВАП процесса (сервис-процесс - не исключение)

Ты проверил выполнение этого условия ?


Игорь Шевченко   (2006-02-13 12:35:00) [51]

psa247 ©   (13.02.06 12:19) [5]


> Чужой сервис. Взаимодействует.


Тогда ищи ошибку в хуке. DEP кроме того, что запрещает выполнение команд на странице с некорректной для выполнения защитой, еще и проверяет массу других условий, например, обработчики исключений.


psa247   (2006-02-13 12:19:00) [52]


> kaZaNoVa ©   (13.02.06 11:27) [3]

Думается, что это не выход. Метод должен быть универсальным только для WinXP.

> Игорь Шевченко ©   (13.02.06 12:04) [4]

Чужой сервис. Взаимодействует.


Игорь Шевченко   (2006-02-13 12:04:00) [53]

А сервис взаимодействует с рабочим столом ?


kaZaNoVa   (2006-02-13 11:27:00) [54]

psa247 ©   (13.02.06 11:17) [2]
при включенной опции Data Execute Protection


отключить эту бяку и всё))


psa247   (2006-02-13 11:17:00) [55]


> kaZaNoVa ©   (13.02.06 00:34) [1]

В смысле не выполняет своего предназначения. Заметил, что при включенной опции Data Execute Protection моя dll c CBT_Hook-oм не действует на окна служб. Вот и думаю, что же делать теперь ?!


kaZaNoVa   (2006-02-13 00:34:00) [56]

как понять не действует?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо