Функция QueryServiceObjectSecurity извлекает копию дескриптора безопасности, связанного с объектом службы. Вы можете также использовать функцию GetNamedSecurityInfo, чтобы извлечь дескриптор безопасности.
Windows NT 3.51 и ранее: Функция GetNamedSecurityInfo не поддерживается.Синтаксис
BOOL QueryServiceObjectSecurity( SC_HANDLE hService, SECURITY_INFORMATION dwSecurityInformation, PSECURITY_DESCRIPTOR lpSecurityDescriptor, DWORD cbBufSize, LPDWORD pcbBytesNeeded ); |
hService
[in] Дескриптор службы. Этот дескриптор возвращается функцией OpenService или CreateService, и он должен иметь доступ READ_CONTROL.
dwSecurityInformation
[in] Задает информацию о безопасности, которая требуется. Этот параметр может быть комбинацией следующих значений.
Значение | Предназначение |
---|---|
DACL_SECURITY_INFORMATION | Запрашивает DACL объекта. |
GROUP_SECURITY_INFORMATION | Запрашивает первичный идентификатор безопасности (SID) группы объекта. |
OWNER_SECURITY_INFORMATION | Запрашивает идентификатор безопасности (SID) владельца объекта. |
SACL_SECURITY_INFORMATION | Запрашивает SACL объекта. Вызывающий
процесс
( |
lpSecurityDescriptor
[out] Указатель на буфер, который получает копию дескриптора безопасности указанного объекта службы. Вызывающий процесс должен иметь соответствующий доступ, чтобы рассмотреть указанные аспекты дескриптора безопасности объекта. Структура SECURITY_DESCRIPTOR возвращается в самоопределяющемся относительном формате. Установка этого параметра в значение ПУСТО (NULL), определяет требуемое число байтов, которое возвращается в pcbBytesNeeded.
cbBufSize
[in] Задает размер буфера, в байтах, на который указывает параметр lpSecurityDescriptor. Наибольший разрешенный размер - 8 килобайтов.
pcbBytesNeeded
[out] Указатель на переменную, которая получает число байтов, необходимых, чтобы возвратить затребованную информацию дескриптора безопасности, если функция завершается ошибкой.
Если функция завершается успешно, возвращаемое значение является ненулевым.
Если функция завершается ошибкой, возвращаемое значение - нуль. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.
Следующие коды ошибки могут устанавливаться диспетчером управления службами. Другие коды ошибки могут установиться функциями реестра, которые вызывает диспетчер управления службами.
Код возврата | Описание |
---|---|
ERROR_ACCESS_DENIED | Указанный дескриптор не был открыт с доступом READ_CONTROL, или вызывающий процесс не владелец объекта. |
ERROR_INVALID_HANDLE | Указанный дескриптор недействителен. |
ERROR_INSUFFICIENT_BUFFER | Информация дескриптора безопасности является слишком большой для буфера lpSecurityDescriptor. Число байтов, требуемых чтобы получить всю информацию, возвращается в параметре pcbBytesNeeded. В буфер lpSecurityDescriptor ничего не записывается. |
ERROR_INVALID_PARAMETER | Указанная информация о безопасности недействительна. |
Когда служба создается, диспетчер управления службами назначает для объекта службы дескриптор безопасности по умолчанию. Чтобы извлечь копию дескриптора безопасности для объекта службы, вызовите функцию QueryServiceObjectSecurity. Чтобы изменить дескриптор безопасности, вызовите функцию SetServiceObjectSecurity. Описание дескриптора безопасности по умолчанию для объекта службы, см. в статье Защита службы и права доступа.
Чтобы прочитать владельца, группу или DACL из дескриптора безопасности объекта службы, вызывающему процессу, должно быть, предоставлен доступ READ_CONTROL, когда открывался дескриптор. Чтобы получить доступ READ_CONTROL, вызывающая программа должна быть владельцем объекта или DACL объекта должен предоставить этот доступ.
Чтобы прочитать SACL из дескриптора безопасности, вызывающему процессу, должен быть предоставлен доступ ACCESS_SYSTEM_SECURITY, когда открывался дескриптор. Правильный способ получить этот доступ состоит в том, чтобы разрешить привилегии SE_SECURITY_NAME в текущем маркере права доступа вызывающей программы, открыть дескриптор для доступа ACCESS_SYSTEM_SECURITY, а затем запретить привилегию.
Смотри также
Обзор Управление низкоуровневым доступом, Функции,
используемые управлением низкоуровневым доступом,
Размещение и совместимость QueryServiceObjectSecurity |
||
К | 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 | Нет | |
Замечания по платформе | Не имеется |