![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CBT_HOOK ! [D6, WinXP]
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]как понять не действует?