Продолжается подписка на наши издания! Вы не забыли подписаться?

Суррогатные процессы в COM**

Василий Кораблев

Вступление

Реализация COM-сервера в виде in-process (DLL) сервера дает значительные преимущества, например, лучшую структуризацию проекта, раздельную компиляцию модулей, возможность повторного использования модулей и т.п. Но в использовании внутрипроцессного (in-process) сервера есть одно небольшое, но порой критичное неудобство. Их невозможно создавать и вызывать по сети. Решить эту проблему помогают суррогатные процессы.

Формально, суррогатный процесс – это процесс, который порождается специальным EXE-модулем. Отличительной особенностью суррогатный процесса является то, что в него можно загрузить внутрипроцессный COM-сервер. Что же дает использование суррогатных процессов?

Суррогатный процесс позволяет превратить внутрипроцессный сервер в полноценное DCOM-приложение, давая возможность вызывать компоненты этого сервера удаленно.

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

Один суррогатный процесс может обслуживать нескольких клиентов одновременно.

DLL внутрипроцессного сервера, запущенная в суррогатном процессе, получает все настройки контекста безопасности, установленные для суррогатного процесса.

Возможность использования так называемых системных суррогатных процессов, а также создания пользовательских суррогатных процессов появилась в Windows NT 4.0 SP2 и Windows 95 (с установленным DCOM).

Системный суррогатный процесс.

Идея, стоящая за суррогатными процессами COM – независимость способа реализации сервера от способа его активации. Суррогатные объекты реализуются в формате DLL, но могут быть активированы как внепроцессные серверы. Чтобы разрешить DLL активироваться внутри суррогатного процесса, нужно всего лишь добавить в реестр несколько дополнительных ключей, которые COM SCM (Service Control Manager COM, читается как «скам») просматривает при обслуживании запроса на активацию сервера. Эти ключи могут быть добавлены авторами клиентского кода для недопущения загрузки объекта с потенциально опасным кодом внутрь своего процесса или для удаленного запуска внутрипроцессных серверов через сеть...

**полностью статью можно прочитать в печатной версии журнала

Copyright © 1994-2016 ООО "К-Пресс"