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

Подпрограмма SeAssignSecurity создает самостоятельный дескриптор безопасности для нового объекта, учитывая дескриптор безопасности родительского каталога и все первоначально запрошенные средства безопасности для объекта.

Синтаксис

NTSTATUS SeAssignSecurity(
  [in, optional] PSECURITY_DESCRIPTOR      ParentDescriptor,
  [in, optional] PSECURITY_DESCRIPTOR      ExplicitDescriptor,
  [out]          PSECURITY_DESCRIPTOR      *NewDescriptor,
  [in]           BOOLEAN                   IsDirectoryObject,
  [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 или ИМЕТЬ NULL SACL или NULL DACL.

[out] NewDescriptor

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

[in] IsDirectoryObject

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

[in] SubjectContext

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

[in] GenericMapping

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

[in] PoolType

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

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

SeAssignSecurity может возвращать одно из следующих данных:

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

Комментарии

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

SeAssignSecurity предполагает, что проверка привилегий не была выполнена. Эта подпрограмма выполняет проверку привилегий.

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

Явный (невостребованный) список ACL указан Явно указан ACL по умолчанию Список ACL не указан
Наследуемый список ACL от родительского элемента Назначение указанного списка ACL Назначение унаследованного списка ACL Назначение унаследованного списка ACL
Нет наследуемого ACL от родительского элемента Назначение указанного списка ACL Назначение ACL по умолчанию Не назначать ACL
 

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

Назначение владельца и группы нового объекта регулируется следующей логикой:

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

Требования

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

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

GENERIC_MAPPING

IoGetFileObjectGenericMapping

SECURITY_DESCRIPTOR

SeDeassignSecurity