Функция EnumDependentServices извлекает имя и состояние каждой службы, которая зависит от указанной службы; то есть, указанная служба должна запуститься прежде, чем зависимые службы могут запуститься.
Синтаксис
BOOL EnumDependentServices( SC_HANDLE hService, DWORD dwServiceState, LPENUM_SERVICE_STATUS lpServices, DWORD cbBufSize, LPDWORD pcbBytesNeeded, LPDWORD lpServicesReturned ); |
| Значение | Предназначение |
|---|---|
| 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. |
Порядок служб в этом массиве - перемена порядка пуска служб. Другими словами, первая служба в массиве та, которая запустилась бы последний, а последняя служба в массиве та, которая запустилась бы первой.
Максимальный размер этого массива - 64 000 байтов. Чтобы определять необходимый размер, задайте значение ПУСТО (NULL) для этого параметра и 0 для параметра cbBufSize. Функция завершится ошибкой и GetLastError возвратит значение ERROR_MORE_DATA. Параметр pcbBytesNeeded получит необходимый размер.
Если функция завершается успешно, возвращаемое значение является ненулевым.
Если функция завершается ошибкой, возвращаемое значение - ноль. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.
Следующие коды ошибки могут установиться диспетчером управления службами. Другие коды ошибки могут установиться функциями реестра, которые вызывает диспетчер управления службами.
| Код возврата | Описание |
|---|---|
| ERROR_ACCESS_DENIED | Дескриптор не имеет права доступа SERVICE_ENUMERATE_DEPENDENTS. |
| ERROR_INVALID_HANDLE | Указанный дескриптор недействителен. |
| ERROR_INVALID_PARAMETER | Параметр, который определялся, недействителен. |
| ERROR_MORE_DATA | Буфер, на который указывает lpServices является не достаточно большим. Функция устанавливает переменную, на которую указывает lpServicesReturned в фактическое число сервисных записей, сохраненных в буфере. Функция устанавливает переменную, на которую указывает pcbBytesNeeded в число байтов, в которых требуется сохранить все сервисные записи. |
Возвращенные записи служб располагаются в обратном порядке по отношению к очередности запуска, с учетом порядка групп. Если Вы должны остановить зависимые службы, Вы можете использовать порядок записей, написанных в буфере lpServices, чтобы остановить зависимые службы в правильной последовательности.
Пример смотри в статье Остановка службы.
Обзор Службы, Функции, используемые службами, CreateService, EnumServicesStatusEx, OpenService, ENUM_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). |
|
| Замечания по платформе |
Не имеется |
|