Функция EnumServicesStatusA (winsvc.h)
Перечисляет службы в указанной базе данных диспетчера управления службами. Указаны имя и состояние каждой службы.
Эта функция заменена функцией EnumServicesStatusEx. Он возвращает те же сведения, возвращается enumServicesStatus, а также идентификатор процесса и дополнительные сведения для службы. Кроме того, EnumServicesStatusEx позволяет перечислять службы, принадлежащие указанной группе.
Синтаксис
BOOL EnumServicesStatusA(
[in] SC_HANDLE hSCManager,
[in] DWORD dwServiceType,
[in] DWORD dwServiceState,
[out, optional] LPENUM_SERVICE_STATUSA lpServices,
[in] DWORD cbBufSize,
[out] LPDWORD pcbBytesNeeded,
[out] LPDWORD lpServicesReturned,
[in, out, optional] LPDWORD lpResumeHandle
);
Параметры
[in] hSCManager
Дескриптор базы данных диспетчера управления службами. Этот дескриптор возвращается функцией OpenSCManager и должен иметь право доступа SC_MANAGER_ENUMERATE_SERVICE. Дополнительные сведения см. в
[in] dwServiceType
Тип служб, которые необходимо перечислить. Этот параметр может быть одним или несколькими из следующих значений.
[in] dwServiceState
Состояние перечисления служб. Этот параметр может быть одним из следующих значений.
[out, optional] lpServices
Указатель на буфер, содержащий массив структур ENUM_SERVICE_STATUS, получающих сведения о имени и состоянии службы для каждой службы в базе данных. Буфер должен быть достаточно большим для хранения структур, а также строк, к которым указываются их члены.
Максимальный размер этого массива составляет 256 КБ. Чтобы определить требуемый размер, укажите значение NULL для этого параметра и 0 для параметра cbBufSize. Функция завершится ошибкой и GetLastError вернет ERROR_INSUFFICIENT_BUFFER. Параметр pcbBytesNeed получит необходимый размер.
Windows Server 2003 и Windows XP: максимальный размер этого массива составляет 64 КБ. Это ограничение было увеличено по состоянию на Windows Server 2003 с пакетом обновления 1 (SP1) и Windows XP с пакетом обновления 2 (SP2).
[in] cbBufSize
Размер буфера, на который указывает параметр lpServices в байтах.
[out] pcbBytesNeeded
Указатель на переменную, которая получает количество байтов, необходимых для возврата оставшихся записей службы, если буфер слишком мал.
[out] lpServicesReturned
Указатель на переменную, которая получает количество возвращаемых записей службы.
[in, out, optional] lpResumeHandle
Указатель на переменную, указывающую начальную точку перечисления. Это значение должно быть равно нулю при первом вызове этой функции. В выходных данных это значение равно нулю, если функция завершается успешно. Однако если функция возвращает ноль , а функция GetLastError возвращает ERROR_MORE_DATA, это значение используется для указания следующей записи службы для чтения при вызове функции для получения дополнительных данных.
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение ненулевое.
Если функция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.
Следующие коды ошибок можно задать диспетчером управления службой. Другие коды ошибок можно задать функциями реестра, которые вызываются диспетчером управления службами.
Возвращаемый код | Описание |
---|---|
|
Дескриптор не имеет права доступа SC_MANAGER_ENUMERATE_SERVICE. |
|
Указанный дескриптор недопустим. |
|
Указанный параметр недопустим. |
|
Существует больше записей служб, чем в буфере lpServices. Фактическое количество записей службы, записанных в lpServices, возвращается в параметре lpServicesReturned. Количество байтов, необходимых для получения оставшихся записей, возвращается в параметре pcbBytesNeed. Остальные службы можно перечислить с помощью дополнительных вызовов EnumServicesStatus с параметром lpResumeHandle, указывающим следующую службу для чтения. |
Замечания
Заметка
Заголовок winsvc.h определяет EnumServicesStatus как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows XP [только классические приложения] |
минимальный поддерживаемый сервер | Windows Server 2003 [только классические приложения] |
целевая платформа | Виндоус |
заголовка | winsvc.h (включая Windows.h) |
библиотеки |
Advapi32.lib |
DLL | Advapi32.dll |