dll'ки

Тема в разделе "WASM.WIN32", создана пользователем __Ranger, 9 авг 2004.

  1. __Ranger

    __Ranger New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2003
    Сообщения:
    23
    Адрес:
    Russia
    Чего-то в тупик попал. Есть глобальный хук(который через SetWindowsHook), нужно к этой dll'ke каким-то раком динамически подгрузить другие, в которых находятся процедуры-обработчики хуков. Я так понял, что их надо грузить при каждом аттаче, но в талмудах не рекомендуют использовать LoadLibrary в DllMain'e. Нужно это всё для плагинов. Предложения?
     
  2. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Как насчет создания дополнительного потока?



    Только при вызове хука надо будет проверить, успел ли тот поток подгрузить те самые длли.
     
  3. Toxic

    Toxic New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2003
    Сообщения:
    19
    Адрес:
    Ukraine
    Попробуй грузить в самой HookProc, установив после первой загрузки флаг, чтобы повторно потом не грузить.
     
  4. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    __Ranger

    А почему нельзя сделать хуки прямо в первой длл.Тогда они сделают хук в своем процесе и в том куда их впихнет SetWindowsHook. Если так не катит то можно через CreateRemoteThread подгрузить длл или процедуру в нужный процес(только надо делать правильно а то как говорит Рихтер:"Все правильно, вы угробили чужой процес, при этом оставив свой в сохранности")
     
  5. __Ranger

    __Ranger New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2003
    Сообщения:
    23
    Адрес:
    Russia
    >>А почему нельзя сделать хуки прямо в первой длл.Тогда они сделают хук в своем процесе и в том куда их впихнет SetWindowsHook



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



    Посмотрел я IShell от Toxic'a, и подумал, не бросить ли мне этот геморрой. Затеял все ради того, чтобы напрямую вызывать из dll'ки обработчики в плагинах, минуя exe'шник.

    в IShell'e же dll'ка передаёт данные через WM_COPYDATA в exe'шник, откуда потом вызывается нужный плагин(которые загружаются единственный раз при старте проограммы). Смущает лишь то, насколько быстр механизм сообщений Windows для этой затеи(например, чтобы обрабатывать WH_MOUSE).
     
  6. Toxic

    Toxic New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2003
    Сообщения:
    19
    Адрес:
    Ukraine
    __Ranger

    Я эту вешь писал, имея знания по ассемблеру практически на нуле. Да я и сейчас не особо-то продвинулся, т.к. пока у меня нет задач, требующих решения на асме, а чисто теоретически все учить нет смысла - все равно скоро забуду.

    Это я к тому, что есть другие способов передачи данных, например callback proc. Еще в MSDN можешь почитать про interprocess communication.
     
  7. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    __Ranger

    В книге Рихтера есть пример внедрения длл и способ общения с ней через скрытое диалоговое окно.Таким образом можно общаться между длл в чужом процесе и своим ехе.Используются оконные сообщения WM_APP.Это как еще один вариант.