Поделиться через


Функция SetNamedSecurityInfoA (aclapi.h)

Функция SetNamedSecurityInfo задает указанные сведения о безопасности в дескрипторе безопасности указанного объекта. Вызывающий объект определяет объект по имени.

Синтаксис

DWORD SetNamedSecurityInfoA(
  [in]           LPSTR                pObjectName,
  [in]           SE_OBJECT_TYPE       ObjectType,
  [in]           SECURITY_INFORMATION SecurityInfo,
  [in, optional] PSID                 psidOwner,
  [in, optional] PSID                 psidGroup,
  [in, optional] PACL                 pDacl,
  [in, optional] PACL                 pSacl
);

Параметры

[in] pObjectName

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

Описание форматов строк для различных типов объектов см. в разделе SE_OBJECT_TYPE.

[in] ObjectType

Значение перечисления SE_OBJECT_TYPE , указывающее тип объекта с именем с помощью параметра pObjectName .

[in] SecurityInfo

Набор битовых флагов, указывающих тип устанавливаемых сведений о безопасности. Этот параметр может быть сочетанием SECURITY_INFORMATION битовых флагов.

[in, optional] psidOwner

Указатель на структуру sid , которая определяет владельца объекта. Если у вызывающего объекта нет константы SeRestorePrivilege (см. раздел Константы привилегий), этот идентификатор безопасности должен содержаться в маркере вызывающего объекта и иметь разрешение SE_GROUP_OWNER . Параметр SecurityInfo должен содержать флаг OWNER_SECURITY_INFORMATION. Чтобы задать владельца, вызывающий объект должен иметь WRITE_OWNER доступ к объекту или иметь включенную привилегию SE_TAKE_OWNERSHIP_NAME. Если идентификатор безопасности владельца не задан, этот параметр может иметь значение NULL.

[in, optional] psidGroup

Указатель на идентификатор безопасности, идентифицирующий основную группу объекта. Параметр SecurityInfo должен содержать флаг GROUP_SECURITY_INFORMATION. Если идентификатор безопасности основной группы не задан, этот параметр может иметь значение NULL.

[in, optional] pDacl

Указатель на новый DACL для объекта . Параметр SecurityInfo должен содержать флаг DACL_SECURITY_INFORMATION. Вызывающий объект должен иметь WRITE_DAC доступ к объекту или быть владельцем объекта. Если вы не задаете daCL, этот параметр может иметь значение NULL.

[in, optional] pSacl

Указатель на новый saCL для объекта . Параметр SecurityInfo должен содержать любой из следующих флагов: SACL_SECURITY_INFORMATION, LABEL_SECURITY_INFORMATION, ATTRIBUTE_SECURITY_INFORMATION, SCOPE_SECURITY_INFORMATION или BACKUP_SECURITY_INFORMATION.

Если параметр SACL_SECURITY_INFORMATION или SCOPE_SECURITY_INFORMATION, вызывающий объект должен иметь разрешение SE_SECURITY_NAME. Если вы не задаете saCL, этот параметр может иметь значение NULL.

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

Если функция завершается успешно, функция возвращает ERROR_SUCCESS.

Если функция завершается сбоем, она возвращает ненулевой код ошибки, определенный в WinError.h.

Комментарии

При настройке списка управления доступом на уровне пользователей (DACL) или любых элементов в системном списке управления доступом (SACL) объекта система автоматически распространяет все наследуемые записи управления доступом (ACE) на существующие дочерние объекты в соответствии с правилами наследования.

Функцию SetNamedSecurityInfo можно использовать со следующими типами объектов:

  • Локальные или удаленные файлы или каталоги в NTFS
  • Локальные или удаленные принтеры
  • Локальные или удаленные службы Windows
  • Сетевые общие папки
  • Разделы реестра
  • Семафоры, события, мьютексы и таймеры ожидания
  • Объекты сопоставления файлов
  • Объекты службы каталогов
Функция SetNamedSecurityInfo не изменяет порядок разрешенных или запрещенных в доступе ACE на основе предпочтительного порядка. При распространении наследуемых ACE на существующие дочерние объекты SetNamedSecurityInfo помещает унаследованные ACE в порядок после всех ненаследуемых ACE в списках DACLs дочерних объектов.

Эта функция передает сведения в виде открытого текста. Данные, передаваемые этой функцией, подписываются, если только подписывание не было отключено для системы, но шифрование не выполняется.

При обновлении прав доступа к папке, указанной UNC-путем, например \Test\TestFolder, исходный унаследованный элемент управления доступом удаляется, а полный путь к тому не включается.

Примеры

Пример использования этой функции см. в разделе Изменение списков ACL объекта или Получение прав владения объектом.

Примечание

Заголовок aclapi.h определяет SetNamedSecurityInfo как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header aclapi.h
Библиотека Advapi32.lib
DLL Advapi32.dll

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

ACL

Управление доступом

Базовые функции контроль доступа

GetNamedSecurityInfo

GetSecurityInfo

SECURITY_DESCRIPTOR

SECURITY_INFORMATION

SE_OBJECT_TYPE

SID

SetSecurityInfo