Функция 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. Дополнительные сведения см. в разделе Service Security and Access Rights.
[in] dwServiceType
Тип перечисляемых служб. Этот параметр может иметь одно или несколько из следующих значений.
Значение | Значение |
---|---|
|
Службы типа SERVICE_KERNEL_DRIVER и SERVICE_FILE_SYSTEM_DRIVER. |
|
Службы драйверов файловой системы. |
|
Службы драйверов. |
|
Службы типа SERVICE_WIN32_OWN_PROCESS и SERVICE_WIN32_SHARE_PROCESS. |
|
Службы, которые выполняются в собственных процессах. |
|
Службы, которые совместно используют процесс с одной или несколькими другими службами. Дополнительные сведения см. в разделе Служебные программы. |
[in] dwServiceState
Состояние перечисляемых служб. Этот параметр может принимать одно из указанных ниже значений.
[out, optional] lpServices
Указатель на буфер, содержащий массив ENUM_SERVICE_STATUS структур, получающих сведения об имени и состоянии службы для каждой службы в базе данных. Буфер должен быть достаточно большим, чтобы вместить структуры, а также строки, на которые указывают их члены.
Максимальный размер этого массива составляет 256 КБ байт. Чтобы определить требуемый размер, укажите значение NULL для этого параметра и 0 для параметра cbBufSize . Функция завершится ошибкой, и GetLastError вернет ERROR_INSUFFICIENT_BUFFER. Параметр pcbBytesNeeded получит необходимый размер.
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 . Количество байтов, необходимых для получения оставшихся записей, возвращается в параметре pcbBytesNeeded . Остальные службы можно перечислить с помощью дополнительных вызовов EnumServicesStatus с параметром lpResumeHandle , указывающим следующую считываемую службу. |
Комментарии
Примечание
Заголовок winsvc.h определяет EnumServicesStatus как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | winsvc.h (включая Windows.h) |
Библиотека | Advapi32.lib |
DLL | Advapi32.dll |