Функция SetServiceObjectSecurity


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

Вместо нее используйте функцию SetNamedSecurityInfo.

Windows NT 3.51 и раньше: SetNamedSecurityInfo не поддерживается.

Синтаксис

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

Параметры

hService

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

dwSecurityInformation

[in] Задает устанавливаемые компоненты дескриптора безопасности. Этот параметр может быть комбинацией следующих значений.

Обратите внимание! на то, что те флаги, которые не обрабатываются SetServiceObjectSecurity, будут молча игнорироваться.

 

Значение

Предназначение

DACL_SECURITY_INFORMATION Устанавливает список разграничительного контроля доступа (discretionary access control list - DACL) объекта. Дескриптор, заданный hService должен иметь доступ WRITE_DAC, или вызывающий процесс (process) должен быть владельцем объекта.
GROUP_SECURITY_INFORMATION Устанавливает первичный групповой идентификатор безопасности (security identifier - SID) объекта. Дескриптор, заданный hService должен иметь доступ WRITE_OWNER, или вызывающий процесс должен быть владельцем объекта.
OWNER_SECURITY_INFORMATION Устанавливает идентификатор безопасности (SID) владельца объекта. Дескриптор, заданный hService должен иметь доступ WRITE_OWNER, или вызывающий процесс должен быть владельцем объекта, или разрешить привилегии SE_TAKE_OWNERSHIP_NAME.
SACL_SECURITY_INFORMATION Устанавливает системный список контроля доступа (system access control list - SACL) объекта. Дескриптор, заданный hService должен иметь доступ ACCESS_SYSTEM_SECURITY.

Чтобы получить доступ ACCESS_SYSTEM_SECURITY

  1. Допустите привилегии SE_SECURITY_NAME в текущем маркере доступа (access token) вызывающей программы.
  2. Откройте дескриптор для доступа ACCESS_SYSTEM_SECURITY.
  3. Запретите привилегию.

lpSecurityDescriptor

[in] Указатель на структуру SECURITY_DESCRIPTOR, которая имеет в своем составе новую информацию о безопасности.

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

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

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

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

Код возврата

Описание

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

Замечания

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

Когда служба создается, диспетчер управления службами назначает дескриптор безопасности объекту службы по умолчанию. Чтобы извлечь копию дескриптора безопасности для объекта службы, вызовите функцию QueryServiceObjectSecurity. Описание дескриптора безопасности по умолчанию для объекта службы, см. в статье Защита службы и права доступа.

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

Смотри также

Обзор Низкоуровневое управление доступом, Функции, используемые низкоуровневым управлением доступом, CreateService, OpenService, QueryServiceObjectSecurity, SECURITY_DESCRIPTOR

Размещение и совместимость SetServiceObjectSecurity

К Windows XP Да 
л Windows 2000 Professional Да
и Windows NT Workstation Да версии 3.1 и позже
е Windows Me Нет
н Windows 98 Нет
т Windows 95 Нет
 
С Windows Server 2003 Да
е Windows 2000 Server Да
р Windows NT Server Да версии 3.1 и позже
в    
е    
р    
Используемая библиотека Advapi32.lib
Используемая DLL advapi32.dll
 Заголовочный файл  
- объявлено в Winsvc.h
 - включено в Windows.h
 Unicode Нет
 Замечания по платформе Не имеется

 

Назад в оглавление
На главную страницу
В оглавление справки

Hosted by uCoz