Есть ли способ отслеживать и записывать COM-вызовы с параметрами, выполненными в конкретный модуль EXE/DLL, без явного добавления функций ведения журнала к самому модулю? Я думаю о том, как вы можете отслеживать сообщения Windows в Spy ++, но для COM.Как я могу записать [D] COM-вызовы в модуль?
Мотивация заключается в записи вызовов для диагностических и автоматизированных целей тестирования - например, нажмите кнопку в окне на клиентском ПК, следите за COM-вызовами, отправленными на серверный модуль, а затем «повторно воспроизводите» эти вызовы без необходимости использования клиентского ПК.
Если существуют инструменты, которые делают это, это здорово. Если нет, это то, что можно написать, и если да, то как?
Ах, COM компилируется прямо на голосовые вызовы, поэтому нет ничего, что можно было бы перехватить сообщениями. Спасибо за эту ссылку. Правильно ли я думаю, что прокси-сервер может быть предоставлен в полностью отдельном модуле без изменения оригинала - он не обращает внимания на прокси? Я полагаю, что то, что мне действительно нужно, - это автогенерировать прокси-серверы из моего IDL для интерфейсов COM, которые меня интересуют, - насколько это возможно? –
Если вы создаете универсальный прокси-сервер, вы все равно должны его бросить где-то в реальном коде, например. метод вернет прокси вместо обычного указателя интерфейса. Я имею в виду, что даже если прокси-сервер, который охватывает множество вещей, может быть выполнен, модуль, который нужно отслеживать, должен иметь некоторый код для интеграции этого прокси-сервера. Вы должны посмотреть на это следующим образом: мой код работает через указатели и методы, следуя некоторым соглашениям, сужающим разнообразие возможных вызовов в определенной степени. Как я могу универсально регистрировать вызовы. По-видимому, задача не так просто, как просто что-то сделать. –
Простите меня, работая над точкой, но вы говорите, что крюк для звонков, таких как CoCreateInstance, должен быть в том же модуле, что и классы COM? Или я могу создать совершенно новое приложение, которое имеет глобальный крючок, и создает прокси для определенных IID? –