Функция EnumDependentServices


Функция EnumDependentServices извлекает имя и состояние каждой службы, которая зависит от указанной службы; то есть, указанная служба должна запуститься прежде, чем зависимые службы могут запуститься. 

Синтаксис

BOOL EnumDependentServices(
  SC_HANDLE hService,
  DWORD dwServiceState,
  LPENUM_SERVICE_STATUS lpServices,
  DWORD cbBufSize,
  LPDWORD pcbBytesNeeded,
  LPDWORD lpServicesReturned
);

Параметры

hService
[in] Дескриптор службы. Этот дескриптор возвращается функцией OpenService или CreateService и  должен иметь право доступа SERVICE_ENUMERATE_DEPENDENTS. Дополнительную информацию смотри в статье Защита службы и права доступа.
dwServiceState
[in] Службы, которые перечисляются основываясь на их состоянии. Этот параметр может быть одним из следующих значений.
Значение Предназначение
SERVICE_ACTIVE Перечисляет службы, которые находятся в следующих состояниях: SERVICE_START_PENDING, SERVICE_STOP_PENDING, SERVICE_RUNNING, SERVICE_CONTINUE_PENDING, SERVICE_PAUSE_PENDING и SERVICE_PAUSED.
SERVICE_INACTIVE Перечисляет службы, которые находятся в состоянии SERVICE_STOPPED.
SERVICE_STATE_ALL Комбинирует следующие состояния: SERVICE_ACTIVE и SERVICE_INACTIVE.
lpServices
[out] Указатель на массив структур ENUM_SERVICE_STATUS, который получает имя и информацию о состоянии службы для каждой зависимой службы в базе данных. Буфер должен быть достаточно большим, чтобы вместить структуры, плюс строки, на которые указывают их члены структуры.

Порядок служб в этом массиве - перемена порядка пуска служб. Другими словами, первая служба в массиве та, которая запустилась бы последний, а последняя служба в массиве та, которая запустилась бы первой.

Максимальный размер этого массива - 64 000 байтов. Чтобы определять необходимый размер, задайте значение ПУСТО (NULL) для этого параметра и 0 для параметра cbBufSize. Функция завершится ошибкой и GetLastError возвратит значение ERROR_MORE_DATA. Параметр pcbBytesNeeded получит необходимый размер.

cbBufSize
[in] Размер буфера, на который указывает параметр lpServices, в байтах.
pcbBytesNeeded
[out] Указатель на переменную, получающую число байтов, которое должен был хранить массив записей  служб. Переменная только тогда получает это значение, если буфер, на который указывает lpServices является слишком маленьким, обозначая, что функция завершилась сбоем и выдаст ошибку ERROR_MORE_DATA; в противном случае, содержание pcbBytesNeeded -  неопределенное.
lpServicesReturned
[out] Указатель на переменную, которая получает число возвращенных записей служб.

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

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

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

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

Код возврата Описание
ERROR_ACCESS_DENIED Дескриптор не имеет права доступа SERVICE_ENUMERATE_DEPENDENTS.
ERROR_INVALID_HANDLE Указанный дескриптор недействителен.
ERROR_INVALID_PARAMETER Параметр, который определялся, недействителен.
ERROR_MORE_DATA Буфер, на который указывает lpServices является не достаточно большим. Функция устанавливает переменную, на которую указывает lpServicesReturned в фактическое число сервисных записей, сохраненных в буфере. Функция устанавливает переменную, на которую указывает pcbBytesNeeded в число байтов, в которых требуется сохранить все сервисные записи.

Замечания

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

Демонстрационный код

Пример смотри в статье Остановка службы.

Смотри также

Обзор Службы, Функции, используемые службамиCreateService, EnumServicesStatusEx, OpenServiceENUM_SERVICE_STATUS

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

К

Windows XP

Да 

л

Windows 2000 Professional

Да

и

Windows NT Workstation

Да

е

Windows Me

Нет

н

Windows 98

Нет

т

Windows 95

Нет

 
С

Windows Server 2003

Да

е Windows 2000 Server Да
р Windows NT Server Да
в    
е    
р    

Используемая библиотека

Advapi32.lib

Используемая DLL advapi32.dll
 Заголовочный файл  

- объявлено в

Winsvc.h

 - включено в

Windows.h

 Unicode

Реализуется как EnumDependentServicesW (Unicode) и EnumDependentServicesA (ANSI).

 Замечания по платформе

Не имеется

 

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

Hosted by uCoz