Как можно контролировать вызовы Windows API к приложению / службе? - PullRequest
2 голосов
/ 13 января 2009

Моя компания рассматривает возможность внедрения нового решения VPN, но требует, чтобы соединение поддерживалось программно нашим программным обеспечением. Решение VPN состоит из фоновой службы, которая, кажется, управляет физическим соединением, и служебной программы командной строки / GUI, которая инициирует запрос на подключение / отключение. Я ищу способ «шпионить» за вызовами API между утилитой переднего плана и внутренним сервисом, чтобы наше программное обеспечение могло делать те же самые вызовы к сервису. Есть ли рекомендуемые программные решения или методы для этого?

Ответы [ 4 ]

1 голос
/ 13 января 2009

Вы можете получить некоторую информацию, используя такие инструменты, как Spy ++ для просмотра сообщений Windows. Инструменты отладки / трассировки ( Windbg и т. Д.) Могут позволить вам видеть выполняющиеся вызовы API. Инструменты Sysinternals могут показать вам системную информацию с некоторой степенью детализации использования.

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

1 голос
/ 13 января 2009

Как сказал Харпер Шелби, это может быть очень сложно, но вы можете начать с filemon , который может сказать вам, когда определенные процессы создают или записывают в файлы, regmon , который может сделать то же самое для записи и чтения реестра и wireshark для мониторинга сетевого трафика. Это может дать вам некоторые данные, но даже с этими данными может быть слишком сложно интерпретировать их так, чтобы вы могли совершать одни и те же вызовы.

1 голос
/ 13 января 2009

Я не понимаю, почему вы хотите заменить утилиту, вместо того, чтобы просто запустить утилиту из вашего приложения.

В любом случае, вы можете запустить «dumpbin / import whatevertheutilitynameis .exe», чтобы увидеть статический список имен функций API, с которыми связана утилита; здесь не отображается ни последовательность их вызова, ни значения параметров.

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

1 голос
/ 13 января 2009

Как правило, связь между внешним приложением и внутренним сервисом осуществляется через IPC (сокеты, именованные каналы и т. Д.) Или через пользовательские сообщения, отправляемые через диспетчер управления службами. Вам, вероятно, потребуется выяснить, какой метод использует это решение, и работать с ним - хотя, если это зашифрованная связь через сокет, это может быть сложно.

...