Поделиться через


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

Извлекает имя и состояние каждой службы, зависящее от указанной службы; то есть указанная служба должна быть запущена до запуска зависимых служб.

Синтаксис

BOOL EnumDependentServicesA(
  [in]            SC_HANDLE              hService,
  [in]            DWORD                  dwServiceState,
  [out, optional] LPENUM_SERVICE_STATUSA lpServices,
  [in]            DWORD                  cbBufSize,
  [out]           LPDWORD                pcbBytesNeeded,
  [out]           LPDWORD                lpServicesReturned
);

Параметры

[in] hService

Дескриптор службы. Этот дескриптор возвращается функцией OpenService или CreateService и должен иметь право доступа SERVICE_ENUMERATE_DEPENDENTS . Дополнительные сведения см. в разделе Безопасность службы и права доступа.

[in] dwServiceState

Состояние перечисляемых служб. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
SERVICE_ACTIVE
0x00000001
Перечисляет службы, которые находятся в следующих состояниях: SERVICE_START_PENDING, SERVICE_STOP_PENDING, SERVICE_RUNNING, SERVICE_CONTINUE_PENDING, SERVICE_PAUSE_PENDING и SERVICE_PAUSED.
SERVICE_INACTIVE
0x00000002
Перечисляет службы, которые находятся в состоянии SERVICE_STOPPED .
SERVICE_STATE_ALL
0x00000003
Объединяет следующие состояния: SERVICE_ACTIVE и SERVICE_INACTIVE.

[out, optional] lpServices

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

Порядок служб в этом массиве является обратным порядком запуска служб. Иными словами, первая служба в массиве — это служба, которая будет запущена последней, а последняя служба в массиве — это служба, которая будет запущена первой.

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

[in] cbBufSize

Размер буфера, на который указывает параметр lpServices , в байтах.

[out] pcbBytesNeeded

Указатель на переменную, получающую количество байтов, необходимое для хранения массива записей службы. Переменная получает это значение, только если буфер, на который указывает lpServices , слишком мал, на что указывает сбой функции и ошибка ERROR_MORE_DATA ; В противном случае содержимое pcbBytesNeeded не определено.

[out] lpServicesReturned

Указатель на переменную, получающую количество возвращенных записей службы.

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

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

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

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

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

Комментарии

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

Примеры

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

Примечание

Заголовок winsvc.h определяет EnumDependentServices в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

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

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

CreateService

ENUM_SERVICE_STATUS

EnumServicesStatusEx

OpenService

Функции службы

Установка, удаление и перечисление службы