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


Функция SetPrivateObjectSecurity (securitybaseapi.h)

Функция SetPrivateObjectSecurity изменяет дескриптор безопасности частного объекта.

Чтобы указать, поддерживает ли защищенный сервер автоматическое наследование записей управления доступом (ACE), используйте функцию SetPrivateObjectSecurityEx .

Синтаксис

BOOL SetPrivateObjectSecurity(
  [in]           SECURITY_INFORMATION SecurityInformation,
  [in]           PSECURITY_DESCRIPTOR ModificationDescriptor,
  [in, out]      PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
  [in]           PGENERIC_MAPPING     GenericMapping,
  [in, optional] HANDLE               Token
);

Параметры

[in] SecurityInformation

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

[in] ModificationDescriptor

Указатель на структуру SECURITY_DESCRIPTOR . Части этого дескриптора безопасности, указанные параметром SecurityInformation , применяются к дескриптору безопасности ObjectsSecurityDescriptor .

[in, out] ObjectsSecurityDescriptor

Указатель на указатель на структуру SECURITY_DESCRIPTOR . Этот дескриптор безопасности должен иметь самостоятельную форму. Память для дескриптора безопасности должна быть выделена из кучи процесса (GetProcessHeap) с помощью функции HeapAlloc.

На входных данных это текущий дескриптор безопасности частного объекта. Функция изменяет его, чтобы создать новый дескриптор безопасности. При необходимости функция SetPrivateObjectSecurity выделяет дополнительную память для создания дескриптора безопасности большего размера.

[in] GenericMapping

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

[in, optional] Token

Дескриптор маркера доступа для клиента, от имени которого изменяется безопасность частного объекта. Этот параметр необходим, чтобы убедиться, что клиент предоставил допустимое значение для нового идентификатора безопасности владельца (SID). Маркер должен быть открыт для доступа TOKEN_QUERY.

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

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

Если функция завершается сбоем, она возвращает ноль. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

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

  • Если задан владелец объекта, вызывающий процесс должен иметь разрешение WRITE_OWNER или быть владельцем объекта.
  • Если настраивается список управления доступом (DACL) объекта, вызывающий процесс должен иметь разрешение WRITE_DAC или быть владельцем объекта.
  • Если задан список управления доступом (SACL) объекта, для вызывающего процесса необходимо включить привилегию SE_SECURITY_NAME.
Если предыдущие условия не выполняются, вызов этой функции не завершается ошибкой; однако стандартная политика доступа не применяется.

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

Требования

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

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

Функции контроль доступа клиента или сервера

Общие сведения о клиенте и сервере контроль доступа

CreatePrivateObjectSecurity

DestroyPrivateObjectSecurity

GENERIC_MAPPING

GetPrivateObjectSecurity

SECURITY_DESCRIPTOR

SECURITY_INFORMATION

SetFileSecurity

SetKernelObjectSecurity

SetPrivateObjectSecurityEx

SetUserObjectSecurity