Функция SetServiceObjectSecurity (winsvc.h)

[SetServiceObjectSecurity доступен для использования в операционных системах, указанных в разделе Требования. В последующих версиях он может быть изменен или недоступен. Вместо этого используйте функцию SetNamedSecurityInfo .]

Функция SetServiceObjectSecurity задает дескриптор безопасности объекта службы.

Синтаксис

BOOL SetServiceObjectSecurity(
  [in] SC_HANDLE            hService,
  [in] SECURITY_INFORMATION dwSecurityInformation,
  [in] PSECURITY_DESCRIPTOR lpSecurityDescriptor
);

Параметры

[in] hService

Дескриптор службы. Этот дескриптор возвращается функцией OpenService или CreateService . Доступ, необходимый для этого дескриптора, зависит от сведений о безопасности, указанных в параметре dwSecurityInformation .

[in] dwSecurityInformation

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

Значение Значение
DACL_SECURITY_INFORMATION
Задает дискреционный список управления доступом (DACL) объекта . Дескриптор, заданный hService , должен иметь WRITE_DAC доступ, или вызывающий процесс должен быть владельцем объекта .
GROUP_SECURITY_INFORMATION
Задает идентификатор безопасности основной группы (SID) объекта . Дескриптор, заданный hService , должен иметь WRITE_OWNER доступ, или вызывающий процесс должен быть владельцем объекта .
OWNER_SECURITY_INFORMATION
Задает идентификатор безопасности владельца объекта. Дескриптор, указанный в hService , должен иметь WRITE_OWNER доступ, или вызывающий процесс должен быть владельцем объекта или иметь включенную привилегию SE_TAKE_OWNERSHIP_NAME.
SACL_SECURITY_INFORMATION
Задает системный список управления доступом (SACL) объекта . Дескриптор, указанный hService, должен иметь ACCESS_SYSTEM_SECURITY доступ.

Получение доступа к ACCESS_SYSTEM_SECURITY

  1. Включите привилегию SE_SECURITY_NAME в текущем маркере доступа вызывающего объекта.
  2. Откройте дескриптор для доступа ACCESS_SYSTEM_SECURITY.
  3. Отключите привилегию.

[in] lpSecurityDescriptor

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

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

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

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

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

Код возврата Описание
ERROR_ACCESS_DENIED
Указанный дескриптор не был открыт с необходимым доступом, или вызывающий процесс не является владельцем объекта .
ERROR_INVALID_HANDLE
Указанный дескриптор недопустим.
ERROR_INVALID_PARAMETER
Указанные сведения о безопасности или дескриптор безопасности недопустимы.
ERROR_SERVICE_MARKED_FOR_DELETE
Указанная служба помечена для удаления.

Комментарии

Функция SetServiceObjectSecurity задает указанные части дескриптора безопасности объекта службы на основе сведений, указанных в буфере lpSecurityDescriptor . Эта функция заменяет все или все сведения о безопасности, связанные с объектом службы, в соответствии с флагами, установленными в параметре dwSecurityInformation , и подчиняются правам доступа вызывающего процесса.

При создании службы диспетчер управления службами назначает объекту службы дескриптор безопасности по умолчанию. Чтобы получить копию дескриптора безопасности для объекта службы, вызовите функцию QueryServiceObjectSecurity . Описание дескриптора безопасности по умолчанию для объекта службы см. в разделе Service Security and Access Rights.

Обратите внимание, что предоставление определенного доступа ненадежным пользователям (например, SERVICE_CHANGE_CONFIG или SERVICE_STOP) может позволить им помешать выполнению службы и, возможно, позволит им запускать приложения под учетной записью LocalSystem.

Требования

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

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

CreateService

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

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

OpenService

QueryServiceObjectSecurity

SECURITY_DESCRIPTOR