Современная электронная библиотека ModernLib.Net

Сущность технологии СОМ. Библиотека программиста

ModernLib.Net / Программирование / Бокс Дональд / Сущность технологии СОМ. Библиотека программиста - Чтение (стр. 33)
Автор: Бокс Дональд
Жанр: Программирование

 

 



3 Один из администраторов программ фирмы Microsoft (Microsoft Program Manager), пожелавший остаться неизвестным, утверждает, что MEOW означает Microsoft Extended Object Wire (расширенная передачи объектов Microsoft). Но автор, несмотря на свою доверчивость, относится к этому скептически и желал бы выразить в адрес вышеупомянутого источника свои сомнения.


1 Может показаться странным, что глобальная переменная является интерфейсным указателем, который инициализирован в апартаменте программы записи, а используется из апартамента программы считывания. Об этой противоречивости упоминается в документации по CoMarshalInterThreadInterfaceInStream, где формулируется, что к результирующему интерфейсному указателю IStream можно обратиться из любого апартамента в процессе.


1 Логически администратор заглушек обрабатывает удаленные вызоны методов IUnknown. Фактически, однако, эта задача выполняется тем объектом апартамента, который выставляет интерфейс IRemUnknown.


1 MTS также требует, чтобы при создании маршалеров использовалась специальная динамическая библиотека. Интерпретируемый формат маршалера позволяет MTS получать информацию об интерфейсе.


2 Variants – это тип данных, который используется в средах подготовки сценариев (scripting environments) и обсуждался в главе 2.


3 Вероятно, в будущих реализациях библиотеки СОМ это ограничение будет снято. О деталях можете справиться в своей локальной документации.


1 Во время написания этого текста СОМ не поддерживал ни одного нереентерабельного типа апартаментов. Возможно, что будущие версии СОМ смогут предусмотреть новые типы апартаментов, не поддерживающие реентерабельность.


2 По недоразумению широко распространено мнение, что для обеспечения двухсторонней связи или обратных вызовов требуются точки стыковки (Connection Points). Как описывается в главе 7, точки стыковки необходимы только для поддержки программ обработки событий в Visual Basic и для сред подготовки сценариев.


1 В действительности локальный OR ждет в течение короткого промежутка времени, чтобы предоставить шанс демаршализоваться любым оставшимся маршализованным объектным ссылкам, созданным покойным клиентом.


1 Хорошо реализованные серверы проверяют также наличие –RegServer и –UnregServer . Все четыре ключа не зависят от регистра (case).


2 В зависимости от того, как класс сконфигурирован в локальном регистре, регистрация серверного процесса может обратиться ко всем клиентским процессам или только к тем клиентским процессам, которые выполняются с тем же мандатом защиты и/или с той же windows-станцией.


3 Для метода CreateInstance технически осуществимо обеспечить принудительное создание объекта в определенном апартаменте с использованием стандартных технологии мультиапартаментного программирования. Однако фактическая реализация CreateInstance просто обрабатывает новый объект во время выполнения в текущем апартаменте.


1 Формально должен быть объект класса, зарегистрированный как легальный в контексте защиты вызывающего объекта.


1 Эти два параметра могут использоваться в других модулях аутентификации.


2 Отдельный модуль защиты может увеличить уровень, заданный для клиента/сервера, в зависимости от используемого транспортного протокола. В частности, NTML будет использовать уровень RPC_C_AUTHN_LEVEL_PRIVACY для всех вызовов с той же машины. Кроме того, NTLM будет повышать уровни RPC_AUTHN_LEVEL_CONNECT и RPC_C_AUTHN_LEVEL_CALL до RPC_AUTHN_LEVEL_PKT для транспортировки дэйтаграмм (datagram transports) (например, UDP). Для транспортировок, ориентированных на связь (connection-oriented transport) (например, TCP), NTLM будет повышать уровень с RPC_С_AUTHN_LEVEL_CALL дo RPC_C_AUTHN_LEVEL_PKT.


3 Во время написания данного текста оба SSP – NTLM и Kerberos – молча принимали это значение, но в действительности повышали его до RPC_C_IMP_LEVEL_IDENTIFY, если имело место соединение с удаленной машиной.


4 Формально уровень RPC_C_IMP_LEVEL_IMPERSONATE разрешает сохранять полномочия вызывающей программы не более чем в течение одной сетевой передачи. Это эффективно ограничивает доступ для удаленных объектов ресурсами только локальной машины объекта.


1 Важно отметить, что во время написания этого текста структура COAUTHIDENTITY не поддерживается для связей внутри одной машины. Она работает надежно для удаленных связей с хостом.


2 Под Windows NT 5.0 поддержка заимствования прав на уровне делегирования (delegation-level impersonation) может изменить такое поведение, используя маркер вызывающего потока. За дополнительной информацией обращайтесь к имеющейся документации.


3 Это утверждение нуждается в двух небольших уточнениях. Во-первых, если клиентский процесс был сконфигурирован для использования секретных ссылок в его вызове СоInitializeSecurity, то вызовы IRemUnknown::RemAddRef, IRemUnknown::RemRelease будут произведены с использованием принципала процесса, а не принципала, определенного IClientSecurity::SetBlanket . Во-вторых, до выпуска Windows NT 4.0 Service Pack 4 все вызовы IRemUnknown::RemAddRef, IRemUnknown::RemRelease осуществлялись с использованием принципала процесса, вне зависимости от установок полной защиты, сделанных администратором заместителей.


4 Важно отметить, что так как получателем активационного вызова в начальной стадии является SCM (Service Control Manager – диспетчер управления сервисами) со стороны сервера, то некоторые модули аутентификации могут не поддерживаться. SCM в Windows NT 4.0 поддерживает только NTLM. Для получения более подробной информации о поддерживаемых модулях под Windows NT 5.0 обращайтесь к соответствующей документации.


1 Этот класс также реализует интерфейс IPersistStream. Его сериализованный формат распознается SCM с целью записи в элемент реестра AccessPermission во время саморегистрации.


1 Из этого, конечно, следует, что вызывающая программа должна была задать уровень не ниже RPC_C_IMP_LEVEL_IMPERSONATE при создании активационного запроса, либо неявно через вызов CoInitializeSecurity , либо явно, используя структуру COAUTHINFO.


2 Обе эти операции могут быть выполнены во время саморегистрации. Посмотрите прекрасный пример DCOMPERM из SDK Win32, приведенный Майком Нельсоном (Mike Nelson).


3 Если в AppID нет установки RunAs (то есть класс сконфигурирован для использования активации в режиме «как активизатор»), то SCM начинает серверный процесс в window-станции активизатора (или в новой window-станции, если активизатор является удаленным клиентом). Это означает, что сервер может взаимодействовать с интерактивным пользователем только в том случае, если сам активизатор окажется интерактивным пользователем.


4 За такую изоляцию приходится платить снижением эффективности. Каждый серверный процесс, который SCM запускает с учетной записью RunAs, потребляет ресурсы на window-станцию и рабочий стол. По умолчанию Windows NT 4.0 сконфигурировано для работы примерно с 14 рабочими столами. Из этого следует, что только 14 (или меньше) серверов типа RunAs могут одновременно работать в конфигурации по умолчанию. В соответствующей статье Q171890 базы знаний фирмы Microsoft (Microsoft Knowledge Base) объясняется, как поднять это ограничивающее число до более приемлемого уровня.


5 Тем не менее, этот режим активации необходим для предотвращения ошибок RPC_E_WRONG_SERVER_IDENTITY при отладке инициализации серверного процесса.


1 Сгенерированные MIDL интерфейсные заместители и заглушки не проверяют указатели с атрибутом [ref] на нуль. Вместо этого они вслепую разыменовывают указатель, что может привести к нарушению доступа. Поскольку маршалеры, сгенерированные MIDL, всегда выполняются внутри обработчика исключительных ситуаций, это нарушение доступа обнаруживается внутри маршалера и преобразуется в ошибку маршалинга, которая и возвращается в качестве HRESULT метода.


2 Интерфейсный маршалер выявляет значения дублирующих указателей (ps1 == ps2), а не одинаковые разыменованные значения (*ps1 == *ps2); однако второе вытекает из первого.


1 В этом заключается один из известных дефектов в схеме точек стыковки. Другой хорошо известный дефект состоит в том, для каждого типа интерфейса обратного вызова требуется явный вызов FindConnectionPoint. Оба этих дефекта отрицательно сказываются на производительности с связи в увеличением числа полных обходов, которые вносит каждый из этих дефектов. Влияние использования точек стыковки на производительность служит напоминанием, что интерфейсы следует разрабатывать, имея в виду возможный межапартаментиыи доступ.


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


1 Можно утверждать, что исходное определение интерфейса было разумным, и что IDL просто недостаточно гибок для описания общих идиом программирования. Хотя это и может быть достаточным оправданием для интерфейса, определенного в 1992 году, до создания СОМ IDL, но это не может служить оправданием для современных интерфейсов. Просто примем, что всем интерфейсам следует подчиняться правилам СОМ IDL, если только не имеется достаточно обоснованной причины поступать иначе.


  • Страницы:
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33