Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Вниз

CBT_HOOK !   Найти похожие ветки 

 
psa247 ©   (2006-02-12 17:50) [0]

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


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

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


 
psa247 ©   (2006-02-13 11:17) [2]


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

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


 
kaZaNoVa ©   (2006-02-13 11:27) [3]

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


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


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

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


 
psa247 ©   (2006-02-13 12:19) [5]


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

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

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

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


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

psa247 ©   (13.02.06 12:19) [5]


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


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


 
Digitman ©   (2006-02-13 13:00) [7]


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


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

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


 
psa247 ©   (2006-02-13 14:36) [8]


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

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


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


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


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

psa247 ©   (13.02.06 14:36) [8]


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


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

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


 
psa247 ©   (2006-02-13 14:50) [10]

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

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



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.



С уважением.


 
Digitman ©   (2006-02-13 14:52) [11]


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


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


 
psa247 ©   (2006-02-13 15:05) [12]


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

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


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

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

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


 
kaZaNoVa ©   (2006-02-13 15:10) [14]

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


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


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


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


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


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


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


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


 
kaZaNoVa ©   (2006-02-13 15:21) [16]

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


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


 
psa247 ©   (2006-02-13 15:28) [17]


> kaZaNoVa ©   (13.02.06 15:21) [16]


С антивирусниками и фаерволами как ?
Анти Spy-Ware ?

Пример нужен. Попробую.


 
kaZaNoVa ©   (2006-02-13 15:31) [18]

program loader;
uses
 Windows,SysUtils,Tlhelp32;

function SetDebugPriv: Boolean;
var
Token: THandle;
tkp: TTokenPrivileges;
begin
Result := false;
if OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then
begin
 if LookupPrivilegeValue(nil, PChar("SeDebugPrivilege"), tkp.Privileges[0].Luid) then
 begin
   tkp.PrivilegeCount := 1;
   tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   Result := AdjustTokenPrivileges(Token, false, tkp, 0, PTokenPrivileges(nil)^, PDWord(nil)^);
 end;
end;
end;

function Start(ProcessID: Cardinal; DllFileName: string): Boolean;
var
hProcess, hTh: THandle;
BytesWritten, ThreadID, DllNameLen: Cardinal;
LoadLibraryProc, MemPtr: Pointer;
ExitCode: DWord;
begin
Result := false;

SetDebugPriv();

hProcess := OpenProcess(PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_WRITE,true, ProcessID);

if hProcess <> 0 then
begin
 DllNameLen := Length(DllFileName) + 1;
 
 MemPtr := VirtualAllocEx(hProcess, nil, DllNameLen, MEM_COMMIT, PAGE_READWRITE);

 if MemPtr <> nil then
 begin
   if WriteProcessMemory(hProcess, MemPtr, PChar(DllFileName), DllNameLen, BytesWritten) then
   begin
     LoadLibraryProc := GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");

     hTh := CreateRemoteThread(hProcess, nil, 0, LoadLibraryProc, MemPtr, 0, ThreadID);

     if hTh <> 0 then
     begin
       if (WaitForSingleObject(hTh, INFINITE) = WAIT_OBJECT_0) and
         GetExitCodeThread(hTh, ExitCode) then
         Result := ExitCode <> 0;

       CloseHandle(hTh);
     end;
   end;

   VirtualFreeEx(hProcess, MemPtr, 0, MEM_RELEASE);
 end;

 CloseHandle(hProcess);
end;

end;

var
ProcessID: Cardinal;
DllName,ppp: string;
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
ProcessID:=0;
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);

ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop) <> 0 do
 begin
ppp:=FProcessEntry32.szExeFile;
if (pos("CSRSS",UpperCase(ppp))>0) then  ProcessID:=FProcessEntry32.th32ProcessID;
ContinueLoop := Process32Next(FSnapshotHandle,  FProcessEntry32);
 end;
CloseHandle(FSnapshotHandle);

DllName:="A:\test.dll";

if ProcessID <> 0 then Start(ProcessID, DllName);

end.


 
kaZaNoVa ©   (2006-02-13 15:32) [19]

psa247 ©   (13.02.06 15:28) [17]
С антивирусниками и фаерволами как ?
Анти Spy-Ware ?


могут быть проблемы .. но не со всеми ..)))

решение- убивать их))


 
psa247 ©   (2006-02-13 15:51) [20]


> kaZaNoVa ©   (13.02.06 15:32) [19]


Спасибо, отпишусь как попробую.


 
Игорь Шевченко ©   (2006-02-13 15:55) [21]

kaZaNoVa ©   (13.02.06 15:32) [19]


> решение- убивать их))


Ошибочное решение. Проше убить автора подобных советов. Из рогатки или плюсометом.

psa247 ©   (13.02.06 14:50) [10]

1) Неплохо бы проверять, что GlobalData имеет значение, отличное от нуля.
2) Неплохо бы проверять значение, возвращаемое функцией SetWindowsHookEx


 
kaZaNoVa ©   (2006-02-13 16:04) [22]

Игорь Шевченко ©   (13.02.06 15:55) [21]
> решение- убивать их))

Ошибочное решение.


возможно в общем случае и ошибочно, но большинство "серьёзного"  програмного обеспечения при установке требует/просит закрывать антивирусы, чтобы не было проблем.  думаю не зря ...

а еще можно попробовать составить список сервисов, в которые не грузится и какой-нить из них (если возможно) запустить попробовать от имени юзера .. может это даст ключ к разгадке ...  или хотя бы просто интересную информацию ..


 
Игорь Шевченко ©   (2006-02-13 16:10) [23]

kaZaNoVa ©   (13.02.06 16:04) [22]


> но большинство "серьёзного"  програмного обеспечения при
> установке требует/просит закрывать антивирусы


примеры большинства серьезного программного обеспечения в студию.


 
kaZaNoVa ©   (2006-02-13 16:38) [24]

Игорь Шевченко ©   (13.02.06 16:10) [23]
примеры большинства серьезного программного обеспечения в студию


например:  

Welcome to the 1st Page 2000 Setup program. This
program will install 1st Page 2000 on your computer.

It is strongly recommended that you exit all Windows programs beFore running this Setup program.


больше пока не нашел, но помню на многих инталляторах пишут такое ..


 
Игорь Шевченко ©   (2006-02-13 17:05) [25]

kaZaNoVa ©   (13.02.06 16:38) [24]

Сравни


> is strongly recommended that you exit all Windows programs


и


> большинство "серьёзного"  програмного обеспечения при
> установке требует/просит закрывать антивирусы, чтобы не
> было проблем


Подумай или поищи ответ в интернете, зачем приложения просят, чтобы при установке не работали другие программы.


 
Bobby   (2006-02-14 12:43) [26]

Microsoft Visual Studio .NET 2002 не устанавливается при активном DWeb.
Установка обламывается в самом конце. В FAQ-е , проблем, прилагаемых к инсталяции, как одна из возможных причин, определяется наличие антивируса.


 
Игорь Шевченко ©   (2006-02-14 12:59) [27]

Bobby   (14.02.06 12:43) [26]

Ну что я могу сказать ? Только то, что VS 2005 устанавливается при активном AVG ?

Детский сад, штаны на лямках.


 
Bobby   (2006-02-14 13:18) [28]

Ну и что с того? Речь идет о принципе. Бывает разное сочетание обстоятельств...


 
Игорь Шевченко ©   (2006-02-14 13:34) [29]

Bobby   (14.02.06 13:18) [28]

Так принцип или стечение обстоятельств ?

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


 
Германн ©   (2006-02-14 14:42) [30]


> Игорь Шевченко ©   (14.02.06 13:34) [29]
>
> Bobby   (14.02.06 13:18) [28]
>
> Так принцип или стечение обстоятельств ?
>
> В любом случае, совет всегда сносить антивирус на основании
> того, что какая-то программа при нем активном не устанавливается
> есть совет а) ламерский б) вредный.


Бывают и исключения. Если "какая-то программа" тоже антивирус. :)))


 
Rouse_ ©   (2006-02-14 22:54) [31]


> Игорь Шевченко ©   (14.02.06 12:59) [27]
> Bobby   (14.02.06 12:43) [26]
>
> Ну что я могу сказать ? Только то, что VS 2005 устанавливается
> при активном AVG ?
>
> Детский сад, штаны на лямках.

Это не детский сад, такая проблема может быть. Вот пример - инсталятор копирует на диск большой файл, больше 100 метров. Стоит ДрВеб. При попытке доступа к файлу через IStorage автоматом запускается сканирования данного файла (сам он при этом блокируется) и через несколько секунд, стандартная функция открытия стораджа не дождавшись окончания проверки возращает - доступ запрещен. Пришлось даже в мануалах писать, что перед инсталяцией отключите мониторинг. На Касперском не проверял, под нортоном такой проблемы нет, а вот под любимым Доктором Вебом, к сожалению есть...


 
Rouse_ ©   (2006-02-14 23:02) [32]

Впринципе у меня даже есть предположение подобного поведения Веба на этом файле. Формат его сходен с использующимся в документах Майкрософт Офиса... по всей видимости пытается найти там макровирусы :)) А так как внутренняя структура достаточно обьемна (обычное открытие занимает около 20-30 сек) и происходит конфликтс. :)


 
kaZaNoVa ©   (2006-02-14 23:13) [33]

Rouse_ ©   (14.02.06 22:54) [31]
инсталятор копирует на диск большой файл

аналогично у меня когда-то была задача скопировать большое количество EXE-файлов, при включенном мониторе Касперского работало фантастически медленно(


 
Игорь Шевченко ©   (2006-02-14 23:46) [34]

Rouse_ ©   (14.02.06 22:54) [31]

Смени антивирус. Не путай причину со следствием и не делай глобальных
выводов.


> стандартная функция открытия стораджа не дождавшись окончания
> проверки возращает - доступ запрещен


А можно ссылку на документацию, где указан таймаут ?


 
Германн ©   (2006-02-15 02:53) [35]


> Игорь Шевченко ©   (14.02.06 23:46) [34]
>
> Rouse_ ©   (14.02.06 22:54) [31]
>
> Смени антивирус. Не путай причину со следствием и не делай
> глобальных
> выводов.


Радикально! Но ничем не обоснованно глобально.
Менять антивирус под "конкретную ситуацию"???

" и не делай глобальных выводов." Это Ваши слова!


 
Bobby   (2006-02-15 09:44) [36]

> Игорь Шевченко ©   (14.02.06 13:34) [29]
>
> Bobby   (14.02.06 13:18) [28]
>
> Так принцип или стечение обстоятельств ?
>
> В любом случае, совет всегда сносить антивирус на основании
> того, что какая-то программа при нем активном не устанавливается
> есть совет а) ламерский б) вредный.


А ведь и правда : ну его нафиг этот Visual Studio! Главное что бы антивирус работал.
При этом, к тому же , не станешь :
a) ламером
б) врединой


 
Rouse_ ©   (2006-02-15 10:45) [37]


> Смени антивирус.

От те здрасте, это как?
Т.е. "Уважаемые пользователи - для использования нашго продука настоятельно рекомендуем вам сменить антивирус". Так чтоли?
Уж проще выйти на самого веба и с ними попробовать решить проблему, что собственно мы сейчас и будем делать...

> А можно ссылку на документацию, где указан таймаут ?
А нет никакого таймаута - он просто пытается открыть, чуть задумывается и вываливается с запрещением доступа...


 
Игорь Шевченко ©   (2006-02-15 11:24) [38]

Rouse_ ©   (15.02.06 10:45) [37]


> Т.е. "Уважаемые пользователи - для использования нашго продука
> настоятельно рекомендуем вам сменить антивирус". Так чтоли?
>  


Нет, почему же, можно продукт сменить. Альтернатива.


> А нет никакого таймаута - он просто пытается открыть, чуть
> задумывается и вываливается с запрещением доступа...


Первый вопрос - а что, антивирус всегда полностью сканирует файл при любом открытии ?

Второй вопрос - А зачем....?


 
Rouse_ ©   (2006-02-15 12:09) [39]


> Первый вопрос - а что, антивирус всегда полностью сканирует
> файл при любом открытии ?

Веб сканирует...

> А зачем....?

хз :) У касперского AFAIK это решено контрольной суммой в дополнительном NTFS потоке...


 
Игорь Шевченко ©   (2006-02-15 12:14) [40]

Rouse_ ©   (15.02.06 12:09) [39]

Это же какие тормоза, пардон. А если у меня файл базы данных на пару десятков гигабайт ? Может, у него из сканирования можно исключать файлы ?

Сдается мне, что-то ты не договариваешь...



Страницы: 1 2 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.058 c
15-1144447727
Mike Kouzmine
2006-04-08 02:08
2006.05.07
Все видели рекламу НЕКОЛЫ?


4-1139720990
ArchValentin
2006-02-12 08:09
2006.05.07
Проверка процессов


2-1145416828
Bublik
2006-04-19 07:20
2006.05.07
Помогите


1-1143366898
Kolan
2006-03-26 13:54
2006.05.07
Как поместить класс в Dll или пакет?


15-1144809637
Skyle
2006-04-12 06:40
2006.05.07
EPL 2, принтеры этикеток





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский