Функция 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.
Диспетчер управления службами может задать следующие коды ошибок. Другие коды ошибок могут задаваться функциями реестра, которые вызываются диспетчером управления службами.
Код возврата | Описание |
---|---|
|
Указанный дескриптор не был открыт с READ_CONTROL доступом, или вызывающий процесс не является владельцем объекта. |
|
Указанный дескриптор недопустим. |
|
Сведения о дескрипторове безопасности слишком велики для буфера lpSecurityDescriptor . Количество байтов, необходимых для получения всех сведений, возвращается в параметре pcbBytesNeeded . В буфер lpSecurityDescriptor ничего не записывается. |
|
Указанные сведения о безопасности недопустимы. |
Комментарии
При создании службы диспетчер управления службами назначает объекту службы дескриптор безопасности по умолчанию. Чтобы получить копию дескриптора безопасности для объекта службы, вызовите функцию 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 |
См. также раздел
Низкоуровневые контроль доступа