Функция SeSetSecurityDescriptorInfoEx (ntifs.h)
Подпрограмма SeSetSecurityDescriptorInfoEx изменяет дескриптор безопасности объекта и указывает, поддерживает ли объект автоматическое наследование записей управления доступом (ACE).
Синтаксис
NTSTATUS SeSetSecurityDescriptorInfoEx(
[in, optional] PVOID Object,
[in] PSECURITY_INFORMATION SecurityInformation,
PSECURITY_DESCRIPTOR ModificationDescriptor,
[in, out] PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
[in] ULONG AutoInheritFlags,
[in] POOL_TYPE PoolType,
[in] PGENERIC_MAPPING GenericMapping
);
Параметры
[in, optional] Object
Указатель на объект, дескриптор безопасности которого требуется изменить. Используется для обновления сведений о квотах безопасности.
[in] SecurityInformation
Указатель на значение, указывающее, какие сведения о безопасности следует задать. Может быть сочетанием одного или нескольких из следующих элементов.
Значение | Значение |
---|---|
DACL_SECURITY_INFORMATION | Указывает, что настраивается список управления доступом (DACL) для объекта. Требуется доступ WRITE_DAC. |
GROUP_SECURITY_INFORMATION | Указывает, что задается идентификатор основной группы объекта. Требуется доступ WRITE_OWNER. |
OWNER_SECURITY_INFORMATION | Указывает, что задается идентификатор владельца объекта. Требуется доступ WRITE_OWNER. |
SACL_SECURITY_INFORMATION | Указывает, что системный ACL (SACL) объекта устанавливается. Требуется доступ ACCESS_SYSTEM_SECURITY. |
ModificationDescriptor
Дескриптор безопасности входных данных, применяемый к объекту . Предполагается, что вызывающий объект этой подпрограммы проверит и зафиксировать переданный дескриптор безопасности перед вызовом и отпустит его после вызова.
[in, out] ObjectsSecurityDescriptor
Указатель на указатель на дескриптор безопасности объекта. Дескриптор безопасности должен иметь самостоятельный формат. Эта структура должна быть освобождена вызывающим элементом.
[in] AutoInheritFlags
Битовая маска, управляющая автоматическим наследованием ACE. Задайте для логического ИЛИ одного или нескольких из следующих битовых флагов:
Флаги информационной безопасности | Значение |
---|---|
SEF_DACL_AUTO_INHERIT | Если этот флаг установлен, daCL обрабатывается как автоматически наследующий DACL и обрабатывается, как описано в следующем разделе Примечаний. Этот бит игнорируется, если DACL_SECURITY_INFORMATION не задано в параметре SecurityInformation . |
SEF_SACL_AUTO_INHERIT | Если этот флаг установлен, saCL обрабатывается как автоматически наследуемый saCL и обрабатывается, как описано в следующем разделе Примечаний. Этот бит игнорируется, если SACL_SECURITY_INFORMATION не задан в параметре SecurityInformation . |
[in] PoolType
Указывает тип пула, используемый при выделении нового дескриптора безопасности, который может быть одним из следующих:
- NonPagedPool
- PagedPool
- NonPagedPoolCacheAligned
- PagedPoolCacheAligned
Обычно вызывающий объект указывает PagedPool или NonPagedPool , если доступ к буферу будет осуществляться в IRQL >= DISPATCH_LEVEL или в произвольном контексте потока.
Типы пулов NonPagedPoolMustSucceed и NonPagedPoolCacheAlignedMustS являются устаревшими и больше не должны использоваться.
[in] GenericMapping
Указатель на структуру GENERIC_MAPPING, задающую сопоставление универсального типа с конкретными и стандартными типами доступа для объекта, к которому осуществляется доступ. Предполагается, что эта структура сопоставления будет безопасной для доступа (т. е. захватывается при необходимости) перед передачей в эту подпрограмму.
Возвращаемое значение
Код возврата | Описание |
---|---|
STATUS_SUCCESS | Дескриптор безопасности объекта успешно изменен. |
STATUS_BAD_DESCRIPTOR_FORMAT | Дескриптор безопасности предоставленного объекта не был в самособлагающем формате. |
STATUS_NO_SECURITY_ON_OBJECT | Объект не имеет дескриптора безопасности. |
Комментарии
Если параметр AutoInheritFlags равен нулю, результат вызова SeSetSecurityDescriptorInfoEx будет таким же, как и при вызове SeSetSecurityDescriptorInfo.
Если AutoInheritFlags указывает бит SEF_DACL_AUTO_INHERIT, SeSetSecurityDescriptorInfoEx применяет следующие правила к DACL, чтобы создать новый дескриптор безопасности из текущего дескриптора:
Если флаг SE_DACL_PROTECTED не задан в битах управления текущего дескриптора безопасности или входного дескриптора безопасности, SeSetSecurityDescriptorInfoEx создает дескриптор безопасности вывода из унаследованных ACE текущего дескриптора безопасности и ненаследуемых ACE securityDescriptor. То есть невозможно изменить унаследованный элемент ACE, изменив список ACL для объекта . Это поведение сохраняет унаследованные ACE так, как они были унаследованы от родительского контейнера.
Если SE_DACL_PROTECTED задано во входном дескрипторове SecurityDescriptor, текущий дескриптор безопасности игнорируется. Дескриптор безопасности выходных данных создается как копия входного дескриптора SecurityDescriptor с отключенными битами INHERITED_ACE.
В идеале редактор ACL должен отключить INHERITED_ACE битов, указывающих вызывающей стороне, что ACE, унаследованные от родительского объекта, теперь явно задаются для объекта.
- Если SE_DACL_PROTECTED задано в текущем дескрипторове безопасности, а не в Дескрипторове безопасности, текущий дескриптор безопасности игнорируется. Дескриптор безопасности выходных данных создается как копия дескриптора SecurityDescriptor. Ответственность за обеспечение включения бита INHERITED_ACE в правильных ACE лежит на вызывающем объекте.
Если параметр AutoInheritFlags указывает бит SEF_SACL_AUTO_INHERIT, SeSetSecurityDescriptorInfoEx применяет аналогичные правила к новому saCL.
Дополнительные сведения об управлении доступом и наследовании ACE см. в разделе Безопасность документации по Microsoft Windows SDK.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 |
Целевая платформа | Универсальное |
Верхняя часть | ntifs.h (включая Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |