Nano Hash - криптовалюты, майнинг, программирование

Windows Messaging — перехват вызовов, исходящих из другого API

Сценарий:

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

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

Вопрос:

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

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

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

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


Ответы:


1

Самый простой способ — создать прокси-DLL. Основная идея состоит в том, чтобы заменить API DLL своей собственной, заменить функции, которые вы хотите, и перенаправить остальные в исходную API DLL. Вы переименовываете исходную DLL и вставляете свое оригинальное имя API DLL. Для этого вам нужно экспортировать functions. 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 уже был активен (если вы не внимательно следите за системой) и может привести к срабатыванию антивирусных программ.

23.12.2010
  • Не совсем то, что я искал, но тем не менее полезный ответ. Я пытался понять сообщения Windows, исходящие из API, и как лучше всего передать их в конечное приложение, которое использует мою прокси-библиотеку DLL для общения с API. 28.12.2010
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..