Функция SeAssignSecurityEx (wdm.h)

Подпрограмма SeAssignSecurityEx создает самостоятельный дескриптор безопасности для нового объекта с учетом следующих необязательных параметров: дескриптор безопасности родительского каталога объекта, явный дескриптор безопасности для объекта и тип объекта.

Синтаксис

NTSTATUS SeAssignSecurityEx(
  [in, optional] PSECURITY_DESCRIPTOR      ParentDescriptor,
  [in, optional] PSECURITY_DESCRIPTOR      ExplicitDescriptor,
  [out]          PSECURITY_DESCRIPTOR      *NewDescriptor,
  [in, optional] GUID                      *ObjectType,
  [in]           BOOLEAN                   IsDirectoryObject,
  [in]           ULONG                     AutoInheritFlags,
  [in]           PSECURITY_SUBJECT_CONTEXT SubjectContext,
  [in]           PGENERIC_MAPPING          GenericMapping,
  [in]           POOL_TYPE                 PoolType
);

Параметры

[in, optional] ParentDescriptor

Указатель на SECURITY_DESCRIPTOR родительского объекта, содержащего новый создаваемый объект. ParentDescriptor может иметь значение NULL или иметь список системного управления доступом (SACL) или список управления доступом на уровне NULL (DACL).

[in, optional] ExplicitDescriptor

Указатель на явный SECURITY_DESCRIPTOR , применяемый к новому объекту. ExplicitDescriptor может иметь значение NULL или ИМЕТЬ СПИСОК SACL NULL или NULL DACL.

[out] NewDescriptor

Получает указатель на возвращенный SECURITY_DESCRIPTOR. SeAssignSecurityEx выделяет буфер из выгружаемого пула памяти.

[in, optional] ObjectType

Указатель на GUID для типа создаваемого объекта. Если объект не имеет GUID, objectType должен иметь значение NULL.

[in] IsDirectoryObject

Указывает, является ли новый объект объектом каталога. Если параметр IsDirectoryObject имеет значение TRUE, новый объект является объектом каталога, в противном случае новый объект не является объектом каталога.

[in] AutoInheritFlags

Указывает тип автоматического наследования, применяемого к записям управления доступом (ACE) в списках управления доступом (ACL), заданных ParentDescriptor. AutoInheritFlags также управляет проверкой привилегий, проверкой владельца и настройкой владельца и группы по умолчанию для NewDescriptor. Для параметра AutoInheritFlags должно быть задано логическое или одно или несколько следующих значений:

Значение Значение
SEF_DACL_AUTO_INHERIT ACE в DACL ParentDescriptor наследуются NewDescriptor в дополнение к явным ACE, заданным Явным Дескриптором.
SEF_SACL_AUTO_INHERIT ACE в списке SACL ParentDescriptor наследуются NewDescriptor в дополнение к явным ACE, заданным ЯвнымDescriptor.
SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT ExplicitDescriptor — это дескриптор по умолчанию для типа объекта, заданного objectType. ExplicitDescriptor не используется, если ACE наследуются от ParentDescriptor.
SEF_AVOID_PRIVILEGE_CHECK Проверка привилегий не выполняется. Этот флаг полезен при автоматическом наследовании, так как он позволяет избежать проверки привилегий для каждого дочернего элемента, который необходимо обновить.
SEF_AVOID_OWNER_CHECK Проверка владельца не выполняется.
SEF_DEFAULT_OWNER_FROM_PARENT Если владелец указан с помощью ExplicitDescriptor, этот флаг не используется, а владельцу NewDescriptor присваивается владелец, указанный в ExplictDescriptor.

Если владелец не указан с помощью ExplicitDescriptor, этот флаг используется следующим образом: Если флаг задан, владельцу NewDescriptor присваивается владелец ParentDescriptor. В противном случае владельцу NewDescriptor присваивается владелец, указанный subjectContext.

SEF_DEFAULT_GROUP_FROM_PARENT Если группа указана с помощью ExplicitDescriptor, этот флаг не используется, а группе NewDescriptor присваивается группа, указанная в ExplictDescriptor.

Если группа не указана с помощью ExplicitDescriptor, этот флаг используется следующим образом: Если флаг задан, группе NewDescriptor присваивается группа ParentDescriptor. В противном случае группе NewDescriptor присваивается группа, заданная subjectContext.

 

Назначение системных и дискреционных списков ACL описано в следующей таблице:

Явный дескриптор nondefault(1) Явный дескриптор по умолчанию(2) NULL Явный дескриптор
ACL наследуется от родительского дескриптора(3). Назначьте как унаследованные, так и явные списки управления доступом (5)(6). Назначьте унаследованный список ACL. Назначьте унаследованный список ACL.
ACL не наследуется от родительского дескриптора(4). Назначьте список ACL, отличный от default. Назначьте список ACL по умолчанию. Не назначать список ACL.
 

Заметки о назначении

  1. Флаг SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT не указан.
  2. Указан флаг SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT.
  3. Указан флаг автоматического наследования для списка ACL (SEF_DACL_AUTO_INHERIT или SEF_SACL_AUTO_INHERIT).
  4. Флаг автоматического наследования для ACL не указан.
  5. ACE с битом INHERITED_ACE, заданным в их члене AceFlags , не копируются в назначенный дескриптор безопасности.
  6. ACE, наследуемые от родительского дескриптора, добавляются после ACE, указанных явным дескриптором.

[in] SubjectContext

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

[in] GenericMapping

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

[in] PoolType

Этот параметр не используется. Буфер для хранения нового дескриптора безопасности всегда выделяется из страничного пула.

Возвращаемое значение

SeAssignSecurityEx возвращает одно из следующих значений:

Код возврата Описание
STATUS_SUCCESS
Назначение выполнено успешно.
STATUS_INVALID_OWNER
Идентификатор безопасности, предоставленный в качестве владельца нового дескриптора безопасности, не является идентификатором безопасности, который вызывающий объект уполномочен назначать в качестве владельца объекта.
STATUS_PRIVILEGE_NOT_HELD
Вызывающий объект не имеет привилегии (SeSecurityPrivilege), необходимой для явного назначения указанного списка SACL.

Комментарии

SeAssignSecurityEx расширяет базовую работу SeAssignSecurity следующими способами:

  • ObjectType при необходимости задает тип объекта. Наследование объектов управляется следующими элементами объекта ACE: Flags, InheritedObjectType и Header.AceFlags.
  • AutoInheritFlags указывает тип автоматического наследования используемых ACE. AutoInheritFlags также управляет проверкой привилегий, проверкой владельца и настройкой владельца и группы по умолчанию для NewDescriptor.
Дополнительные сведения о безопасности и управлении доступом см. в документации по этим темам в Microsoft Windows SDK.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs(storport)

См. также раздел

GENERIC_MAPPING

SECURITY_DESCRIPTOR

SeAssignSecurity

SeDeassignSecurity