Сущность технологии COM




Управление маркерами - часть 2


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

Напоминаем, что контекстный объект вызова сопоставляется с потоком, когда ORPC-запрос направляется на интерфейсную заглушку. Разработчики объекта получают доступ к контексту вызова через API-функцию CoGetCallContext. Контекстный объект вызова реализует интерфейс IServerSecurity:

[local, object, uuid(0000013E-0000-0000-C000-000000000046)] interface IServerSecurity : IUnknown { // get caller's security settings // получаем установки защиты вызывающей программы HRESULT QueryBlanket( [out] DWORD *pAuthnSvc, // authentication pkg // модуль аутентификации [out] DWORD *pAuthzSvc, // authorization pkg // модуль авторизации [out] OLECHAR **pServerName, // server principal // серверный принципал [out] DWORD *pAuthnLevel, // authentication level // уровень аутентификации [out] DWORD *pImpLevel, // impersonation level // уровень заимствования прав [out] void **pPrivs, // client principal // клиентский принципал [out] DWORD *pCaps // EOAC flags // флаги EOAC );

// start running with credentials of caller // начинаем выполнение с полномочиями вызывающей программы HRESULT ImpersonateClient(void); // stop running with credentials of caller // заканчиваем выполнение с полномочиями вызывающей программы HRESULT RevertToSelf(void); // test for impersonation // проверка заимствования прав BOOL IsImpersonating(void); }

В одном из предыдущих разделов этой главы уже рассматривался метод QueryBlanket. Остальные три метода используются для управления маркерами потока во время выполнения метода. Метод ImpersonateClient создает маркер доступа, основанный на полномочиях клиента, и присваивает этот маркер текущему потоку. Как только возвращается IServerSecurity::ImpersonateClient, все попытки доступа к ресурсам операционной системы будут разрешаться или запрещаться в соответствии с полномочиями клиента, а не объекта.


Содержание  Назад  Вперед