![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
Вообщем проблема в следующем.
Создаю программу на отлов открытия окон сторонними программами. Прога состоит из двух модулей, сама программа и dll. Отлавливаемых программ может быть несколько. Так вот в своем приложении беру id процесса сторонней программы которую хочу контролировать на открытие окон, передаю этот id себе в dll и все работает как часы. Но вот вопрос если отлавливаемых программ несколько 2 и более т.е будет несколько id процессов как осуществить передачу их в dll и следовательно отлов их окон. |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
так же, как и при передаче одного id.
в чем собстно проблема то? как передать данные? -------------------- There are always someone smarter than you... |
|||
|
||||
tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
Да проблема при передаче 2 или более id.
У меня в приложении процедура которая стартует хук равна procedure StartHook(id:THandle) которая выполняется при нажатии на кнопку. А если процессов много как она будет выглядеть? |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
тут два варианта: либо просто вызываешь эту же процедуру для новых id, либо делаешь по-настоящему глобальный хук - т.е. не указываешь tid, а разбор полетов делаешь в функции хука.
|
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
tigger, как-как) а пофантазировать?! я же написал, пользуй array [0..0] of....
RangeChecking обязательно должен быть отключен!!!
как "принять", разберешься? учти, тебе еще в ловушку в других процессах нужно эти данные передать, через MMF например. -------------------- There are always someone smarter than you... |
|||
|
||||
tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
MetalFan, очень ценную информацию дал.
А как потом раскидать их по MMF по отдельным файлам. В один lPIDs а в другой размер массива, я что-то делал ошибка вылетает на функции фильтре. ![]() Это сообщение отредактировал(а) tigger - 8.2.2007, 19:14 |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
создается именованный MMF в приложении установившем хук, а остальные только читают. ты представляешь себе, как глобальные хуки вообще "фунцыклируют"? когда устанавливаешь глобальную ловушку, библиотека, содержащая функцию-фильтр проецируется во все процессы в системе... таким образом все специфические для процесса данные такие, как всяческие хэндлы (MMF, окон и проч.объектов системы) становятся непоределенными. Глобальные переменные содержат мусор и проч... значит в момент "присоединения" библиотеки к процессу тебе нужно получить все необходимые данные из созданного ранее при инициализации ловушки MMF. показывай, что делал ;) з.ы. могу конечно пример дать, хотя в принципе в сети они есть. остается только найти и адаптировать под свои нужды ;) да и хотелось бы чтоб сам разобрался большей частью... а я только направление могу дать и ошибки помочь подправить. Это сообщение отредактировал(а) MetalFan - 8.2.2007, 20:03 -------------------- There are always someone smarter than you... |
|||
|
||||
tigger |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
Вообщем что я написал
В приложении.
теперь что имеем в dll
так вот в функции фильтре hook нет hMemFile1, length, hMemFile, Hide_id равны нулю что не так делаю ли как можно это победить? |
||||
|
|||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
да, ошибочки есть...да и некоторые места я бы по-другому написал.
явные ошибки (если я сам не ошибаюсь ;) ): 1)
ну это ты так думаешь ;) давай код 2) После MapViewOfFile и "отправки" данных надо вызывать UnMapViewOfFile... замечания: 1) зачем создавать 2!!! MMF? не проще ли отдать все за один раз в одной структуре? 2) зачем каждый раз в функции-ловушке открывать/считывать данные? достаточно один раз считать, имхо. либо при "подгрузке" длл (см DLLProc), либо при первом вызове ф-ции-ловушки. 3) для "копирования" кусков памяти лучче имхо юзать Move или давай так) приложи аттачем файлы этого проекта. я поправлю. и тоже приаттачу. а то влом Ctrl+C/Ctrl+V жать много раз) Это сообщение отредактировал(а) MetalFan - 9.2.2007, 15:15 -------------------- There are always someone smarter than you... |
|||
|
||||
tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
Знаешь явную ошибку здесь нашел это length := count; надо было так length^ := count^; а насчет всех твоих советов я попробую если не пойдет приложу, а то так обучения нет забудется скоро.
|
|||
|
||||
tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
MetalFan, посмотри код там приложение с dll и тестовое приложение которое нужно словить, но что-то не идет. В чем проблема.
Присоединённый файл ( Кол-во скачиваний: 23 ) ![]() |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
а вот здесь пжалуста по подробнее ;) з.ы. + посмотрю попозже аттач -------------------- There are always someone smarter than you... |
|||
|
||||
dumb |
|
||||||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
ух. сильно все перепутано...
примерная схема: хост-приложение:
dll:
ps.
![]() |
||||||
|
|||||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
dumb, опередил) да уж, код не блещет наглядностью
з.ы. ошибка как минимум в том, что не сделано UnmapViewOfFile Это сообщение отредактировал(а) MetalFan - 19.2.2007, 17:18 -------------------- There are always someone smarter than you... |
|||
|
||||
tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
dumb, по подробнее можно.
|
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
||||
|
||||
tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
Так то все стало понятно отлов появления на панели задач сделал, а как теперь в тестовом приложении словить появление окна формы.
Код прилагаю. Да еще без ide среды запускаешь проект ошибка обращения к памяти dll вылетает. Это сообщение отредактировал(а) tigger - 20.2.2007, 17:52 Присоединённый файл ( Кол-во скачиваний: 15 ) ![]() |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
tigger, основное твое непонимание:
CreateFileMapping создает область памяти. MapViewOfFile - отображает эту область в адресное пространство твоего процесса. т.е. ты не должен выделять память для ArrHide, и работать с этим массивом нужно после CreateFileMapping/MapViewOfFile. причем в схеме, которую я приводил, это вроде как достаточно очевидно. вобщем, в dll у тебя правильно сделано, если убрать GetMem. относительно массива pid'ов: делай его размер на один элемент больше и последний эл-т делай = 0. в dll отловишь конец массива именно по этому нулевому эл-ту. StopHookProc вызываешь неинициализированный - это остался "хвост" от прошлой версии dll. сделай обычную процедуру с таким же именем:
|
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
+ ПОКА не будет сделано UnmapViewOfFile, данные, что ты поместил в отораженную область памяти у себя в процессе, будут недоступны другим процессам(читай-хукам в других процессах), AFAIK.
p.s. хотя кажется я гоню) но главное не забыть про синхронизацию Это сообщение отредактировал(а) MetalFan - 20.2.2007, 22:16 -------------------- There are always someone smarter than you... |
|||
|
||||
tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
Я не понял почему этот код не отлавливает появление главного окна в моем тестовом приложении.
|
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
потому, что он с кучей ошибок(часть которых тебе указали) и, как следствие, не является рабочим. ты определись, что ты хочешь: сам что-то понять и сделать или чтобы за тебя все сделали, а ты бы только вставил "if count > 2 then ShowMessage('это demo-версия')"? - если последнее, то я - пас. |
|||
|
||||
tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
Спасибо за ответ.
Это сообщение отредактировал(а) tigger - 22.2.2007, 12:32 |
|||
|
||||
MetalFan |
|
||||||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
причеши код, а?
честно говоря, с кодом, написаным ТАКИМ стилем ковыряться нет никакого удовольствия и/или желания( если приведешь в читаемый вид, то посмотрю ;)
трудно чтоли отформатировать так: ??
хотя зачем столько exit'ов и проверок?
з.ы. добавлю - ошибок просто масса... причем порой из-за ужасного кода -------------------- There are always someone smarter than you... |
||||||
|
|||||||
tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
MetalFan посмотри причесал вроде бы. Какие там ошибки там кода то мало я ничего не вижу?
Присоединённый файл ( Кол-во скачиваний: 13 ) ![]() |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
tigger, ММ.. что причесал? не вижу никакого причесывания.
ладно, в кратце по ошибкам. в dll: 1) где выделяется/освобождается память под PHookRec? 2) почитай( в мсдн например) как правильно работать с хуком WH_CBT. у тебя бред написан, imho 3) в DllEntryPoint что-то тоже както неочень хорошо написано. проведи рефаторинг кода или забрось программирование... код написан просто УЖАСНО. 1) код отформатирован абсолюьно нечитаемо и не наглядно 2) названия локальных/глобальных переменных/полей классов ничем не отличаются 3) весь код в классах форм "свален" в обработчики событий... 4) и т.д. и т.п. з.ы. былоб время, причесал бы немного твой код. но время=деньги... если хошь, могу баксов за 10-20 довести до рабочего состояния твой проектик ;) Это сообщение отредактировал(а) MetalFan - 21.2.2007, 18:34 -------------------- There are always someone smarter than you... |
|||
|
||||
tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
MetalFan, сомневаюсь что от форматирования кода зависит его работа, то что код в обработчиках это не смертельно.
PHookRec я уже не использую после подсказок "мозголома". И все таки ошибка в чем то глобальном. Всем спасибо, побольше бы таких учителей. |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
зависит. еще как. ошибки гораздо проще находить. это как минимум. вот именно. на некоторые места, что содержат ошибки, я тебе уже указал. в таким образом оформленном коде их править мягкоговоря не удобно. а рефакторингом за тебя заниматься никто не будет) повторюсь: к этому еще добавлю абсолютно не оправданное использование глобальных переменных. -------------------- There are always someone smarter than you... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |