Добрый день всем!
Я занимаюсь написанием некоторого "фильтра" сообщений в Win32 с помощью технологии хуков на С++ в чистом API для компилятора gcc. Сам фильтр реализован в виде класса Hook. Те, кто занимался хуками знают, о праблеме распределенной памяти для подключаемых к dll процессам.
Моя праблема:
Мне нужно разместить мой класс в shared секцию так, чтобы он был общим для всех процессов (Если возможно реализовать это другим способом, то напишите как). Также, класс использует динамическую память (например для строк или структур: LPSTR s = (LPSTR)new LPSTR[size]), которая тоже должна быть общей.
Я проанализировал возможности gcc связанные с созданием shared секций. Они создаются слудующим образом (для моего случая):
Hook hook __attribute__((section ("section_name"), shared)) = Hook::Hook();
Но при подключении нового процесса к моей hook.dll, конструктор и деструктор вызываются снова, а переменные этого класса
не меняют своего значения.
Я думаю, что можно использовать следующие способы:
— File Mapping. Положить туда свой класс и все динамические данные (объясните как это реализовать).
— С помощью опции линкера --stack=<размер>, указать область побольше и размещать мой класс и все динамические данные в shared секции. (тогда возникает вопрос: "а как выделять память в shared секции?")[/list]
— DDE
Хотелось бы использовать наименее сложный способ.
P.S. Если вы не программировали на gcc, но знаете как это реализовать на Visual C++, помогите всё равно.
Спасибо.