Это довольно сложная вещь, и для этого нет реального решения. В одном из наших проектов мы решили это следующим образом:
- вам нужно создать и приложение на C ++ (.NET слишком высокого уровня), которое переопределяет RegisterActiveObject и RevokeActiveObject с помощью вашего собственного метода, установите хук.
- вам нужно запустить приложение ДО запуска приложения.
- при запуске кода он будет прослушивать события для создания новых объектов в ROT
- ваш код должен перехватить это (переопределяя RegisterActiveObject)
- проверьте, является ли интересующий вас объект регистрации
- если это так, вы можете изменить его имя (например, добавив PID в конце) и добавить к ROT
- теперь у вас есть, например, следующий элемент
! {DED89DB0-45B6-11CE-B307-0800363A1E02}
! {DED89DB0-45B6-11CE-B307-0800363A1E02}
! {DED89DB0-45B6-11CE-B307-0800363A1E02} _3365
! {DED89DB0-45B6-11CE-B307-0800363A1E02} _4564
- теперь последние 2 записи указывают на разные экземпляры вашего приложения, вы можете получить его тогда из ROT по имени. Конечно, добавление PID - это просто пример, вы можете изменить имя по своему желанию (если оно остается уникальным - в этом весь смысл).
Посмотрите в psapi.h и dbghelp.h.
Удачи,
Блез