Наверное, в основном вопрос к Thetrik, но может еще кто-то шарит в этих вендовых COM'ах. Допустим, есть процесс dllhost.exe - суррогантный процесс, в котором хостится некая DLL-ка с COM-объектом. Внимание вопрос: как найти, какой COM-объект (CLSID) хостится в нем? Какая именно DLL отдала суррогату свою класс-фабрику? Первое, что приходит в голову: взять командную строку процесса, отделить "/ProcessID:<GUID>", этот GUID, насколько я понимаю, является AppId, просканить реестр в поисках того, какой CLSID ассоциирован с AppId. Но это кажется чесанием правого уха левой рукой, может есть какой-то более простой или правильный вариант? ЗЫ: Решать вопрос буду программно, при желании могу даже заинжектить в суррогата свой шелл-кодец, если из его контекста будет лучший вариант решения этой задачи, чем извне. Заранее спасибо за ответы!
Странно что никто на васме и на других форумах не создает/использует COM-объекты. Этож так круто и удобно.
Спасибо, я попробовал сегодня, в примерах БЯМа (похоже) есть доля галлюцинаций. Свойство ProcessId (PID-процесса) есть в коллекции ApplicationInstances, а не Applications. Когда я получил коллекцию ApplicationInstances в ней почему-то оказался только один элемент, который корректно совпал по пидам и appid с одним из dllhost-процессов, но на тот момент в системе было запущено 3 dllhost-процессов. То есть в качестве решения это подошло для одного процесса из трех. Наверное, не все типы инициализации суррогатов попадают в эту коллекцию. В коллекции Applications всего 5 элементов, через коллекцию Components можно получить пути до DLL'ек, да (свойство DLL), но там не ассоциации с dllhost-процессом, или я слепошарый просто). Я еще попробую потыкать в эти коллекции на следующей неделе, сегодня мало времени было, а на выходных надо будет уехать. Как будто бы услышал долю сарказма в этом изречении. На самом деле с точки зрения того огромного количества деталей, которые внезапно в COM'ах учтены, это кажется грамотным решением, но удобно ли это? Я бы сказал, что от слова "удобно" там в этих COM'ах нет ровном счетом ничего. Но надо всетки учитывать время и контекст, в котором эта инфраструктура создавалась.
Rel, Он прямо говорит - только com+, для com не сработает. Можно посмотреть в сурках БЯМом(там ооп ).
Код (Text): Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") set apps = objWMIService.ExecQuery("SELECT * FROM Win32_ClassicCOMClassSetting WHERE AppId = '{973D20D7-562D-44B9-B70B-5A0F49CCDF3F}'") for each app in apps wscript.echo app.AppId &vbTab& app.InprocServer32 next Код (Text): >cscript test.vbs Сервер сценариев Windows (Microsoft ®) версия 5.812 Copyright (C) Корпорация Майкрософт 1996-2006, все права защищены. {973d20d7-562d-44b9-b70b-5a0f49ccdf3f} %systemroot%\system32\webplatstorageserver.dll