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




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


// called by COM to allow/deny access to an object // вызывается COM для разрешения/запрета доступа к объекту HRESULT IsAccessAllowed( [in] PTRUSTEEW pTrustee, // caller's ID // ID вызывающей программы [in] LPWSTR lpProperty, // not used // не используется [in] ACCESS_RIGHTS Rights, // COM_RIGHTS_EXECUTE [out] BOOL *pbAllowed // yes/no! // да/нет! ); }

Этот интерфейс предназначен для того, чтобы разработчики могли создавать объекты контроля доступа на основе статических таблиц данных, преобразующих имена принципалов в права доступа. Интерфейс основывается на новом Windows NT 4.0 API защиты на базе опекуна (trustee), то есть пользователя, обладающего правами доступа к объекту. Основным типом данных, используемым этим API, является TRUSTEE:

typedef struct _TRUSTEE_W { struct _TRUSTEE_W *pMultipleTrustee; MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; TRUSTEE_FORM TrusteeForm; TRUSTEE_TYPE TrusteeType; switch_is(TrusteeForm)] union { [case(TRUSTEE_IS_NAME)] LPWSTR ptstrName; [case(TRUSTEE_IS_SID)] SID *pSid; }; } TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW;

Этот тип данных используется для описания принципала защиты. Первые два параметра, pMultipleTrustee и MultipleTrusteeOperation, позволяют вызывающей программе отличать настоящие регистрационные имена (logins — логины) от попыток заимствования прав. Пятый параметр, ptstrName/pSid, содержит либо идентификатор защиты NT (security identifier — SID), либо текстовое имя учетной записи, подлежащее идентификации. При этом третий параметр, TrusteeForm, указывает, какой именно член объединения (union member) используется. Четвертый параметр, TrusteeType, указывает, является ли данный принципал учетной записью пользователя или группы.

Для связывания опекуна с полномочиями, которые ему даны или в которых ему отказано, в Win32 API предусмотрен тип данных ACTRL_ACCESS_ENTRY:

typedef struct _ACTRL_ACCESS_ENTRYW { TRUSTEE_W Trustee; // who? // кто? ULONG fAccessFlags; // allowed/denied? // разрешено/запрещено? ACCESSRIGHTS Access;// which rights? // какие права? ACCESSRIGHTS ProvSpecificAccess; // not used by COM // в COM не используется INHERIT_FLAGS Inheritance; // not used by COM // в COM не используется LPWSTR lpInheritProperty; // not used by COM // в COM не используется } ACTRL_ACCESS_ENTRYW, *PACTRL_ACCESS_ENTRYW;




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