Шаг 43 - Как грузится COM (SCM) ?

Интересный вопрос. Кто дает информацию о модуле, например, по его CLSID ??? Первый ответ, подходящий я имею в виду, это делает библиотека OLE. А вот оказывается и нет. За поиск COM объекта отвечает SCM - Services Control Message. Именно он в ответ на запрос использования COM сервера производит поиск в реестре и отыскивает по данным из реестра DLL или EXE. По русски это менеджер сервисов. Он загружается вместе с системой и является RPC сервером. Как это происходит ???

Клиент просит загрузить сервер по конкретному CLSID от OLE
OLE обращается к SCM 
SCM ищет в системном реестре информацию
Если он найден, то SCM возвращает OLE имя модуля.

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

43.gif (3918 b)

SCM может манипулировать сервисами на удаленном компьютере. Именно для этого реализована подобная модель. Для этого модифицируется CLSID и запрос на активизацию элемента идет уже на MTS. Ну это тема отдельного разговора. Итак, за загрузку и активизацию COM объекта отвечает SCM, а он при необходимости может загрузить компонент по сети.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.