Есть ли решение у данной задачи...

denkon 15.03.2004 - 17:13 | Нужно создать приложение, которое будет внедрять dll с помощью Hook во все процессы нужного типа. Если процесс один, то все просто: создаем зашаренную область для всех инстансов этой длл, ставим hook процедурой этой же dll и запоминаем в эту зашаренную область HHOOK. Проблема возникает при 2 и более процессах: допустим я смогу сохранить HHOOK'и всех установленных hook'ов. Но как узнать из загруженной в процесс dll КАКОЙ ИМЕННО ХУК ПРИНАДЛЕЖИТ ЕЙ?. Теоретически это решилось бы если б можно было установить соответствие АКТИВНОЕ ОКНО <-> ПРОЦЕСС. Ваши мнения, господа.
UE 1 - 15.03.2004 - 17:18 | > Если процесс один, то все просто: создаем зашаренную область Зачем что-то зашаривать, если процесс один?... > Но как узнать из загруженной в процесс dll КАКОЙ ИМЕННО ХУК ПРИНАДЛЕЖИТ ЕЙ?. Ей - это dll-льке? Ну так ведь по идее на один хук - одна dll-лька? А если нет, то непонятно, в чем траблы-то - ты же все равно отдельные dll-льки создаешь для каждого вида хука... Короче, вопрос не ясен совершенно.
Nex 2 - 15.03.2004 - 17:27 | разберись сначала, как dll'ки работают
UE 3 - 15.03.2004 - 17:29 | 2Nex, хм... я-то? :)
denkon 4 - 15.03.2004 - 17:35 | (1) Извините КАКОЙ ИМЕННО ХУК ПРИНАДЛЕЖИТ ЕЙ = КАКОЙ ИМЕННО ХУК ПРИНАДЛЕЖИТ ЕМУ (процессу типа) зашаривать область надо потому что хук ставишь из dll загруженной в ПРИЛОЖЕНИЕ_1 а хуковая процедура вызывается из ПРИЛОЖЕНИЯ_2. И dll из ПРИЛОЖЕНИЯ_2 дожна знать HHOOK установленного на нее хука, чтобы вызвать CallNextHookEx. На один хук одна DLL - не понял, почему?
denkon 5 - 15.03.2004 - 17:36 | хуковая процедура вызывается из ПРИЛОЖЕНИЯ_2 = хуковая процедура вызывается из dll загруженной в ПРИЛОЖЕНИЕ_2
denkon 6 - 15.03.2004 - 17:41 | Вопрос еще такой: когда мы создаем зашаренную область в библиотеке можем ли мы туда поместить массив заранее не известного размера?
UE 7 - 15.03.2004 - 18:04 | 2denkon: дескриптор (HHOOK) глобального хука - есть значение глобальное, а не разное для каждого приложения... Кроме того, обычно ты в том приложении, в котором вызываешь SetWindowsHookEx, ты позже вызываешь и UnhookWindowsHookEx, т.е. хранить HHOOK в расшаренной области памяти нету никакого смысла, а может быть даже и вредно.
UE 8 - 15.03.2004 - 18:07 | > Вопрос еще такой: когда мы создаем зашаренную область в библиотеке можем ли мы туда поместить массив заранее не известного размера? Произволбного размера? Прямо туда, очевидно, нет - расшаренная секция после загрузки dll-ки будет иметь совершенно определенный конечный размер, который задан в свойствах этой секции.
Delphist 9 - 15.03.2004 - 21:56 | Для общей области используй File Mapping.
denkon 10 - 16.03.2004 - 09:19 | (7) хук НЕ глобалный. А устанавливается один хук на один процесс процесс. и еще HHOOK надо знать не только для вызова UnhookWindowsHookEx, но и для UnhookWindowsHookEx, которое будет вызываться из второго экземпляра dll, загруженного в ЧУЖОЕ приложение_2 (см 4). (8) да спасибо, я уже поэксперементировал, нифига не вышло. (9) File Mapping это объект ядра, или где копать?
denkon 11 - 16.03.2004 - 09:21 | Че то я совсем видно перегрузился : "вызова UnhookWindowsHookEx, но и для UnhookWindowsHookEx," = вызова UnhookWindowsHookEx, но и для CallNextHookEx", :))))))))) Че-то ctrl+с ctrl+v плохо работает :)))
UE 12 - 16.03.2004 - 11:03 | Как стыкуются эти две вещи: > Проблема возникает при 2 и более процессах и > хук НЕ глобалный. ? Неглобальный - это значит, что процесс один. Или... или ты хочешь для нескольких процессов грузить одну и ту же dll-льку, которая будет содержать локальный хук?... Запутал ты меня :)
Delphist 13 - 16.03.2004 - 11:13 | Если хук ставится на ЧУЖОЙ процесс, то он УЖЕ ГЛОБАЛЬНЫЙ. На эту тему (hooks + memory-mapped files) советую прочитать http://www.delphimaster.ru/articles/hooks/index.html В статье описаны все грабли, на которые наступаешь при написании хука.
denkon 14 - 16.03.2004 - 11:24 | >Как стыкуются эти две вещи: Стыкуются просто - на каждый процесс свой хук. > Или... или ты хочешь для нескольких процессов грузить одну и ту же dll-льку, которая будет содержать локальный хук ДА!!! (13) спасибо за статью. >Если хук ставится на ЧУЖОЙ процесс, то он УЖЕ ГЛОБАЛЬНЫЙ. Я думаю, что если хук ставиться на всю систему то тогда он называется ГЛОБАЛЬНЫЙ, а если на конктретный процесс, то локальный. И думаю, что я правильно думаю (с)
denkon 15 - 16.03.2004 - 11:26 | > Или... или ты хочешь для нескольких процессов грузить одну и ту же dll-льку, которая будет содержать локальный хук В смысле экземляры одной и той же dll-ки в адр. пространство каждого процесса.
Delphist 16 - 16.03.2004 - 11:55 | №14 > И думаю, что я правильно думаю (с) Увы, не важно, что думаем мы. Важно то, что думает Билли Гейтс.

>>