Функция 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 может возвращать одно из следующих данных:
Код возврата | Описание |
---|---|
|
Назначение прошло успешно. |
|
Идентификатор безопасности, предоставленный владельцу целевого дескриптора безопасности, не является идентификатором, который вызывающий объект имеет право на назначение в качестве владельца объекта. |
|
Вызывающий объект не имеет привилегии (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) |