Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.12;
Скачать: CL | DM;

Вниз

Hooks & COM   Найти похожие ветки 

 
volser   (2005-11-28 20:15) [0]

Я взаимодействую с глобальным хуком через сообщения и FileMapping. Но хотелось бы что бы мой хук в другом процессе был COM Сервер (OLE ) и общатся через определнный интерфейс. Может кто-то подобное делал?


 
Digitman ©   (2005-11-29 08:22) [1]


> взаимодействую с глобальным хуком через сообщения и FileMapping


а по-хорошему надо бы с помощью NamedPipes


> мой хук в другом процессе был COM Сервер (OLE )


сомнительная по необходимости затея


 
Leonid Troyanovsky ©   (2005-11-29 11:35) [2]


> Digitman ©   (29.11.05 08:22) [1]

> > взаимодействую с глобальным хуком через сообщения и FileMapping

> а по-хорошему надо бы с помощью NamedPipes


А чем оно лучше? Оно ж на одной станции.

--
Regards, LVT.


 
Digitman ©   (2005-11-29 15:03) [3]


> Leonid Troyanovsky ©   (29.11.05 11:35) [2]


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


 
Leonid Troyanovsky ©   (2005-11-29 15:18) [4]


> Digitman ©   (29.11.05 15:03) [3]

> сегодня на одной, а завтра на разных)


Тогда уж tcp, на послезавтра :)

--
Regards, LVT.


 
Digitman ©   (2005-11-29 15:28) [5]


> Leonid Troyanovsky ©   (29.11.05 15:18) [4]


для ЛВС слишком жирно)


 
wal ©   (2005-11-29 16:54) [6]


> для ЛВС слишком жирно)
Сегодня ЛВС, завтра WAN ;)


 
volser   (2005-11-29 23:15) [7]

Так а как на счет COM?
И почему сомнительная? ЧТо лучше обмениваться сообщения и возвращать результат не понятно куда. И как на счет многопоточности? Как узнать на какое сообщение лежит ответ? Не легче было бы взять интефейс и работать с ним и как между процессами передаются данные не интересует.


 
Набережных С. ©   (2005-11-30 08:43) [8]


> volser   (29.11.05 23:15) [7]

Может и стоить попробовать. Только придется учесть, что СОМ достаточно широко использует сообщения. В некоторых случаях это может создать определенные проблемы, придется их разрулить. Только не спрашивай какие именно:)), это просто предположение. Имхо, механизм именованных каналов в подобных задачах достаточно опробованный и надежный, вряд ли стоит от него отказываться, разве что в познавательных целях:)


 
Digitman ©   (2005-11-30 09:26) [9]


> volser   (29.11.05 23:15) [7]


> почему сомнительная?


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


> ЧТо лучше обмениваться сообщения и возвращать результат
> не понятно куда


как это "не понятно куда" ?

если речь идет о SendMessage(), то получателю сообщения без разницы, кто явился его отправителем - результат обработки будет возвращен именно тому отправителю, который вызвал ту самую SendMessage().

если речь идет о PostThreadMessage(), то инф-цию об отправителе последний вполне может передать параметром вызова этой ф-ции, дабы получатель знал, кому и как отправлять результат обработки сообщения.


> как на счет многопоточности?


она никак не мешает сабжу


 
volser   (2005-11-30 12:49) [10]


> потому что в ран-тайм при внедрении хук-кода в процесс,
> заведомо, например, не реализующий фабрику COM-класса, придется
> каким-то образом зарегистрировать его в системе как отныне
> реализующий эту самую фабрику... а это не тривиальная задача,
>  особенно с учетом того что внедренный хук-код может получить
> управление и не в основном потоке процесса.

А разве не достаточно выполнить что-то типа такого кода
TAutoObjectFactory.Create(ComServer, THookServer, Class_HookServer, ciSingleInstance); для регистрации фабрики?

Только мне интересно чтио будет если это сделать в разных процессах.


 
Digitman ©   (2005-11-30 13:04) [11]

А причем здесь TAutoObjectFactory ? это ж для фаблик олей-объектов ...

Ты вроде бы речь ведешь о СОМ-взаимодействии ?

Ну так, значит, и фабрика должна создаваться как TCOMObjectFactory ..


> мне интересно чтио будет если это сделать в разных процессах.


попробуй - увидишь ...


 
Набережных С. ©   (2005-11-30 13:37) [12]


> Digitman ©   (30.11.05 09:26) [9]


> потому что в ран-тайм при внедрении хук-кода в процесс,
> заведомо, например, не реализующий фабрику COM-класса, придется
> каким-то образом зарегистрировать его в системе как отныне
> реализующий эту самую фабрику... а это не тривиальная задача,
>  особенно с учетом того что внедренный хук-код может получить
> управление и не в основном потоке процесса.

Ну это-то как раз не проблема. К тому-же, если объект уже существует, то и фабрика ему как-бы ни к чему. Он может, например, зарегистрироваться в таблице исполняемых объектов. Только вот зарегистрировать там можно только один интерфейс одного объекта некоторого класса. А если ClassID налету генерить, то как их потом искать? Но с фабриками все равно та же фигня.

> volser   (30.11.05 12:49) [10]


> А разве не достаточно выполнить что-то типа такого кода
> TAutoObjectFactory.Create(ComServer, THookServer, Class_HookServer,
>  ciSingleInstance); для регистрации фабрики?

Достаточно, если делать это в секции инициализации модуля. Тогда, если это exe-сервер, объект ComServer произведет регистрацию фабрик. Во всех остальных случаях это нужно делать вручную, вызовом RegisterClassObject у каждой фабрики.

> Только мне интересно чтио будет если это сделать в разных
> процессах.

В таком случае система кэширует их интерфейсы, выстраивая в очередь. При этом для клиентов остается доступен самый первый зарегистрированный.  Если его регистрация снимается, то доступен становится, второй и т.д.

В любом случае, если уж использовать СОМ, то код хука нужно делать клиентом, только так. А управляющее приложение - сервером.


 
Digitman ©   (2005-11-30 13:41) [13]


> если уж использовать СОМ, то код хука нужно делать клиентом,
>  только так. А управляющее приложение - сервером


совершенно логично.



Страницы: 1 вся ветка

Текущий архив: 2006.02.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
11-1118396974
dvk
2005-06-10 13:49
2006.02.12
Про аккселераторы в PopupMenu


15-1138080632
begin...end
2006-01-24 08:30
2006.02.12
С Днём рождения! 24 января


1-1136814083
Gear
2006-01-09 16:41
2006.02.12
Как программно установить файл инсталляции с расширением msi?


1-1136634959
Zoidberg
2006-01-07 14:55
2006.02.12
Как изменить позицию элемена в TListView


2-1137926305
Compton's G
2006-01-22 13:38
2006.02.12
Битмап





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский