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




Контроль доступа - часть 3


Заголовки SDK определяют так называемый флаг прав (COM_RIGHTS_EXECUTE), который используется при создании DACL для явного разрешения или запрета пользователям на связь с объектами процесса.

Хотя и допускается использовать API-функции Win32 для создания SECURITY_DESCRIPTOR с целью передачи его в CoInitializeSecurity, этот способ контроля доступа к объектам процесса не является предпочтительным, в основном по причине темной природы API-функций защиты Win32. Для упрощения программирования в COM контроля доступа в реализации COM для Windows NT 4.0 Service Pack 2 разработчикам разрешено указывать тот объект COM, который будет использоваться для выполнения проверки доступа при установке новых соединений. Этот объект регистрируется библиотекой COM во время выполнения CoInitializeSecurity и должен реализовать интерфейс IAccessControl:

[object, uuid(EEDD23EO-8410-11CE-A1C3-08002B2B8D8F)] interface IAccessControl : IUnknown { // add access allowed rights for a list of users // добавляем разрешенные права доступа для списка пользователей HRESULT GrantAccessRights([in] PACTRL_ACCESSW pAccessList);

// explicitly set the access rights for a list of users // явно устанавливаем права доступа для списка пользователей HRESULT SetAccessRights([in] PACTRL_ACCESSW pAccessList // users+rights // пользователи + Права );

// set the owner/group IDs of the descriptor // устанавливаем идентификаторы владельца/группы для дескриптора HRESULT Set0wner( [in] PTRUSTEEW pOwner, // owner ID // ID владельца [in] PTRUSTEEW pGroup // group ID // ID группы );

// remove access rights for a list of users // удаляем права доступа для списка пользователей HRESULT RevokeAccessRights( [in] LPWSTR lpProperty, // not used // не используется [in] ULONG cTrustees, // how many users // сколько имеется пользователей [in, size_is(cTrustees)] TRUSTEEW prgTrustees[] // users // пользователи );

// get list of users and their rights // получаем список пользователей и их прав HRESULT GetAllAccessRights( [in] LPWSTR lpProperty, // not used // не используется [out] PACTRL_ACCESSW *ppAccessList, // users+rights // пользователи + права [out] PTRUSTEEW *ppOwner, // owner ID // ID владельца [out] PTRUSTEEW *ppGroup // group ID // ID группы );




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