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


Функция 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-terminated, указывающую имя объекта, для которого необходимо задать сведения о безопасности. Это может быть имя локального или удаленного файла или каталога в файловой системе NTFS, сетевой ресурс, раздел реестра, семафор, событие, мьютекс, сопоставление файлов или таймер ожидания.

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

[in] ObjectType

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

[in] SecurityInfo

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

[in, optional] psidOwner

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

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

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

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

Замечания

Если вы устанавливаете список управления доступом (DACL) или любые элементы в списке системного управления доступом (SACL) объекта, система автоматически распространяет все наследуемые записи управления доступом (ACEs) к существующим дочерним объектам, согласно правилам наследования.

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

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

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

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

Примеры

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

Заметка

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2003 [классические приложения | Приложения UWP]
целевая платформа Виндоус
заголовка aclapi.h
библиотеки Advapi32.lib
DLL Advapi32.dll

См. также

ACL

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

базовые функции управления доступом

GetNamedSecurityInfo

GetSecurityInfo

SECURITY_DESCRIPTOR

SECURITY_INFORMATION

SE_OBJECT_TYPE

SID

SetSecurityInfo