Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: COM Method Hook  (Прочитано 973 раз)
0 Пользователей и 1 Гость смотрят эту тему.
..::SCRIBE::..
Помогающий

ua
Offline Offline
Пол: Мужской
не путайте банальность с ленью=)


« : 14-08-2018 12:14 » 

Всем привет.

Можно ли как-то перехватить вызов COM метода библиотеки (написана на чем-то нативном, мб Delphi)? И если да, то было бы неплохо еще и аргументы подправить=)
Средствами C# естественно.

Буду очень благодарен за помощь.
Записан
..::SCRIBE::..
Помогающий

ua
Offline Offline
Пол: Мужской
не путайте банальность с ленью=)


« Ответ #1 : 14-08-2018 19:29 » 

https://support.microsoft.com/en-gb/help/318804/how-to-set-a-windows-hook-in-visual-c-net

Не радует меня этот текст :
Global hooks are not supported in the .NET Framework
Except for the WH_KEYBOARD_LL low-level hook and the WH_MOUSE_LL low-level hook, you cannot implement global hooks in the Microsoft .NET Framework. To install a global hook, a hook must have a native DLL export to inject itself in another process that requires a valid, consistent function to call into. This behavior requires a DLL export. The .NET Framework does not support DLL exports. Managed code has no concept of a consistent value for a function pointer because these function pointers are proxies that are built dynamically.
 Жаль
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 14-08-2018 21:57 » 

Наверно сперва стоит ознакомиться, что такое COM.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
..::SCRIBE::..
Помогающий

ua
Offline Offline
Пол: Мужской
не путайте банальность с ленью=)


« Ответ #3 : 15-08-2018 06:50 » 

Ну я примерно знаю, что такое COM - это интерфейс, а ля API.
Знаю что они регистрируются в системе под уникальным идентификатором.

Согласно Wiki (https://en.wikipedia.org/wiki/Component_Object_Model):
Message pumping
When an STA is initialized it creates a hidden window that is used for inter-apartment and inter-process message routing. This window must have its message queue regularly "pumped". This construct is known as a "message pump". On earlier versions of Windows, failure to do so could cause system-wide deadlocks. This problem is complicated by some Windows APIs that initialize COM as part of their implementation, which causes a "leak" of implementation details.

Может от этого играть, ловить сообщения этого скрытого окна...
Записан
..::SCRIBE::..
Помогающий

ua
Offline Offline
Пол: Мужской
не путайте банальность с ленью=)


« Ответ #4 : 15-08-2018 06:56 » 

Возможно еще, как идея, перерегистрировать как-то эту DLL, а под ее идентификатором зарегать свою, как прослойку Здесь была моя ладья...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines