Windows Messaging - перехват вызовов, поступающих из другого API - PullRequest
0 голосов
/ 23 декабря 2010

Сценарий:

Мы заняты созданием стороннего C ++ SDK в виде библиотеки DLL, чтобы другим разработчикам в нашей организации было проще интегрировать эту функцию в свои собственные приложения (будь то .net, delphi и т. д.)

Базовая система отправляет сообщения Windows для оповещения о событиях, происходящих в системе.С этими событиями нужно разбираться, поскольку они могут потенциально сигнализировать о состоянии системы и о том, что можно сделать дальше.

Вопрос:

Что было бы наилучшим способомчтобы обрабатывать эти сообщения в контексте подхода, который мы используем (то есть DLL, которая упаковывает сторонний SDK)?Некоторые идеи, которые приходят на ум:

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

Все примерыкод, данный для SDK, использует одно приложение Win32, которое реализует насос сообщений и обрабатывает сообщения в контексте приложения.

Давным-давно я занимался разработкой Windows с использованием собственного Win32 и был бы признателен за некоторые советы.

1 Ответ

2 голосов
/ 23 декабря 2010

Самый простой способ - создать прокси DLL.Основная идея состоит в том, чтобы заменить API DLL своей собственной, заменить нужные функции и переслать остальные в исходную API DLL.Вы переименовываете оригинальную DLL и вставляете в нее оригинальное имя API DLL.Для этого вам необходимо экспортировать функции.Microsoft сделала это довольно просто, используя Visual Studio.

Вот как можно экспортировать функции: http://msdn.microsoft.com/en-us/library/z4zxe9k8%28v=VS.100%29.aspx

Если вы не знаете вызовов функций API, которые они используют, есть утилитаназывается PE Explorer, который может рассказать вам все о функциях.Стоимость одной бизнес-лицензии составляет 229 долларов, но, похоже, она того стоит: http://pe -explorer.com / peexplorer-tour-function-view.htm

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

...