Чего-то в тупик попал. Есть глобальный хук(который через SetWindowsHook), нужно к этой dll'ke каким-то раком динамически подгрузить другие, в которых находятся процедуры-обработчики хуков. Я так понял, что их надо грузить при каждом аттаче, но в талмудах не рекомендуют использовать LoadLibrary в DllMain'e. Нужно это всё для плагинов. Предложения?
Как насчет создания дополнительного потока? Только при вызове хука надо будет проверить, успел ли тот поток подгрузить те самые длли.
Попробуй грузить в самой HookProc, установив после первой загрузки флаг, чтобы повторно потом не грузить.
__Ranger А почему нельзя сделать хуки прямо в первой длл.Тогда они сделают хук в своем процесе и в том куда их впихнет SetWindowsHook. Если так не катит то можно через CreateRemoteThread подгрузить длл или процедуру в нужный процес(только надо делать правильно а то как говорит Рихтер:"Все правильно, вы угробили чужой процес, при этом оставив свой в сохранности")
>>А почему нельзя сделать хуки прямо в первой длл.Тогда они сделают хук в своем процесе и в том куда их впихнет SetWindowsHook Они там и делаются. Трабл в том, что на один хук могут вешатся несколько плагинов, поэтому в процедуре обработки хука делается вертушка, которая вызывает функции плагинов, отвечающих за обработку хука. Я не могу получить адреса этих функций, не загрузив плагины. Посмотрел я IShell от Toxic'a, и подумал, не бросить ли мне этот геморрой. Затеял все ради того, чтобы напрямую вызывать из dll'ки обработчики в плагинах, минуя exe'шник. в IShell'e же dll'ка передаёт данные через WM_COPYDATA в exe'шник, откуда потом вызывается нужный плагин(которые загружаются единственный раз при старте проограммы). Смущает лишь то, насколько быстр механизм сообщений Windows для этой затеи(например, чтобы обрабатывать WH_MOUSE).
__Ranger Я эту вешь писал, имея знания по ассемблеру практически на нуле. Да я и сейчас не особо-то продвинулся, т.к. пока у меня нет задач, требующих решения на асме, а чисто теоретически все учить нет смысла - все равно скоро забуду. Это я к тому, что есть другие способов передачи данных, например callback proc. Еще в MSDN можешь почитать про interprocess communication.
__Ranger В книге Рихтера есть пример внедрения длл и способ общения с ней через скрытое диалоговое окно.Таким образом можно общаться между длл в чужом процесе и своим ехе.Используются оконные сообщения WM_APP.Это как еще один вариант.