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


Функция 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. Параметр pcbBytesNeed получит необходимый размер.

[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 [только классические приложения]
целевая платформа Виндоус
заголовка winsvc.h (включая Windows.h)
библиотеки Advapi32.lib
DLL Advapi32.dll

См. также

CreateService

ENUM_SERVICE_STATUS

EnumServicesStatusEx

OpenService

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

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