Функция 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
Состояние перечисляемых служб. Этот параметр может принимать одно из указанных ниже значений.
[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.
Диспетчер управления службами может задать следующие коды ошибок. Другие коды ошибок могут задаваться функциями реестра, вызываемыми диспетчером управления службами.
Код возврата | Описание |
---|---|
|
Дескриптор не имеет права доступа к SERVICE_ENUMERATE_DEPENDENTS . |
|
Указанный дескриптор недопустим. |
|
Указан недопустимый параметр. |
|
Буфер, на который указывает lpServices, недостаточно велик. Функция задает переменную, на которую указывает lpServicesReturned , фактическое количество записей службы, хранящихся в буфере. Функция задает переменной, на которую указывает pcbBytesNeeded, количество байтов, необходимых для хранения всех записей службы. |
Комментарии
Возвращаемые записи служб упорядочены в обратном порядке в порядке запуска с учетом группового порядка. Если необходимо остановить зависимые службы, можно использовать порядок записей, записанных в буфер lpServices , чтобы остановить зависимые службы в правильном порядке.
Примеры
Пример см. в разделе Остановка службы.
Примечание
Заголовок winsvc.h определяет EnumDependentServices в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | winsvc.h (включая Windows.h) |
Библиотека | Advapi32.lib |
DLL | Advapi32.dll |