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

Функция QueryServiceObjectSecurity извлекает копию дескриптора безопасности , связанного с объектом службы. Вы также можете использовать функцию GetNamedSecurityInfo для получения дескриптора безопасности.

Синтаксис

BOOL QueryServiceObjectSecurity(
  [in]            SC_HANDLE            hService,
  [in]            SECURITY_INFORMATION dwSecurityInformation,
  [out, optional] PSECURITY_DESCRIPTOR lpSecurityDescriptor,
  [in]            DWORD                cbBufSize,
  [out]           LPDWORD              pcbBytesNeeded
);

Параметры

[in] hService

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

[in] dwSecurityInformation

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

[out, optional] lpSecurityDescriptor

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

[in] cbBufSize

Размер буфера, на который указывает параметр lpSecurityDescriptor , в байтах. Максимальный допустимый размер — 8 килобайт.

[out] pcbBytesNeeded

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

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

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

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

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

Код возврата Описание
ERROR_ACCESS_DENIED
Указанный дескриптор не был открыт с READ_CONTROL доступом, или вызывающий процесс не является владельцем объекта.
ERROR_INVALID_HANDLE
Указанный дескриптор недопустим.
ERROR_INSUFFICIENT_BUFFER
Сведения о дескрипторове безопасности слишком велики для буфера lpSecurityDescriptor . Количество байтов, необходимых для получения всех сведений, возвращается в параметре pcbBytesNeeded . В буфер lpSecurityDescriptor ничего не записывается.
ERROR_INVALID_PARAMETER
Указанные сведения о безопасности недопустимы.

Комментарии

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

Чтобы считать владельца, группу или DACL из дескриптора безопасности объекта службы, вызывающему процессу должен быть предоставлен доступ READ_CONTROL при открытии дескриптора. Чтобы получить READ_CONTROL доступ, вызывающий объект должен быть владельцем объекта или DACL объекта должен предоставить доступ.

Чтобы считывать saCL из дескриптора безопасности, вызывающему процессу должен быть предоставлен доступ ACCESS_SYSTEM_SECURITY при открытии дескриптора. Правильный способ получить этот доступ — включить привилегию SE_SECURITY_NAME в текущем маркере вызывающего объекта, открыть дескриптор для ACCESS_SYSTEM_SECURITY доступа, а затем отключить привилегию.

Требования

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

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

CreateService

GetNamedSecurityInfo

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

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

OpenService

SECURITY_DESCRIPTOR

SetServiceObjectSecurity