Функция EnumServicesStatusExA (winsvc.h)
Перечисляет службы в указанной базе данных диспетчера управления службами. Имя и состояние каждой службы предоставляются вместе с дополнительными данными на основе указанного уровня информации.
Синтаксис
BOOL EnumServicesStatusExA(
[in] SC_HANDLE hSCManager,
[in] SC_ENUM_TYPE InfoLevel,
[in] DWORD dwServiceType,
[in] DWORD dwServiceState,
[out, optional] LPBYTE lpServices,
[in] DWORD cbBufSize,
[out] LPDWORD pcbBytesNeeded,
[out] LPDWORD lpServicesReturned,
[in, out, optional] LPDWORD lpResumeHandle,
[in, optional] LPCSTR pszGroupName
);
Параметры
[in] hSCManager
Дескриптор для базы данных диспетчера управления службами. Этот дескриптор возвращается функцией OpenSCManager и должен иметь право доступа к SC_MANAGER_ENUMERATE_SERVICE . Дополнительные сведения см. в разделе Безопасность службы и права доступа.
[in] InfoLevel
Возвращаемые атрибуты службы. Используйте SC_ENUM_PROCESS_INFO для получения имени и сведений о состоянии службы для каждой службы в базе данных. Параметр lpServices является указателем на буфер, который получает массив ENUM_SERVICE_STATUS_PROCESS структур. Буфер должен быть достаточно большим, чтобы вместить как структуры, так и строки, на которые указывают их члены.
В настоящее время другие уровни информации не определены.
[in] dwServiceType
Тип перечисляемых служб. Этот параметр может быть одним или несколькими из следующих значений.
Значение | Значение |
---|---|
|
Службы типа SERVICE_KERNEL_DRIVER и SERVICE_FILE_SYSTEM_DRIVER. |
|
Службы драйверов файловой системы. |
|
Службы драйверов. |
|
Службы типа SERVICE_WIN32_OWN_PROCESS и SERVICE_WIN32_SHARE_PROCESS. |
|
Службы, которые выполняются в собственных процессах. |
|
Службы, которые совместно используют процесс с одной или несколькими другими службами. Дополнительные сведения см. в разделе Служебные программы. |
[in] dwServiceState
Состояние перечисляемых служб. Этот параметр может принимать одно из указанных ниже значений.
[out, optional] lpServices
Указатель на буфер, получающий сведения о состоянии. Формат этих данных зависит от значения параметра InfoLevel .
Максимальный размер этого массива составляет 256 000 байт. Чтобы определить требуемый размер, укажите значение NULL для этого параметра и 0 для параметра cbBufSize . Функция завершится ошибкой, и GetLastError вернет ERROR_MORE_DATA. Параметр 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
Указатель на переменную, которая на входных данных задает начальную точку перечисления. Это значение необходимо задать равным нулю при первом вызове функции EnumServicesStatusEx . В выходных данных это значение равно нулю, если функция выполнена успешно. Однако если функция возвращает ноль, а функция GetLastError возвращает ERROR_MORE_DATA, это значение указывает следующую запись службы для чтения при вызове функции EnumServicesStatusEx для получения дополнительных данных.
[in, optional] pszGroupName
Имя группы порядка загрузки. Если этот параметр является строкой, перечисляются только службы, принадлежащие группе с именем, указанным в строке. Если этот параметр является пустой строкой, перечисляются только те службы, которые не принадлежат ни к одной группе. Если этот параметр имеет значение NULL, членство в группах игнорируется и перечисляются все службы.
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError. Могут быть возвращены следующие ошибки.
Код возврата | Описание |
---|---|
|
Дескриптор не имеет права доступа к SC_MANAGER_ENUMERATE_SERVICE . |
|
Буфер слишком мал. Не все данные в активной базе данных могут быть возвращены. Параметр pcbBytesNeeded содержит количество байтов, необходимых для получения оставшихся записей. |
|
Использовалось недопустимое значение параметра. |
|
Дескриптор недействителен. |
|
Параметр InfoLevel содержит неподдерживаемое значение. |
|
Система завершает работу; эту функцию нельзя вызвать. |
Комментарии
Если вызывающий объект не имеет права SERVICE_QUERY_STATUS доступа к службе, служба автоматически пропускается из списка служб, возвращенных клиенту.
Примечание
Заголовок winsvc.h определяет EnumServicesStatusEx в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | winsvc.h (включая Windows.h) |
Библиотека | Advapi32.lib |
DLL | Advapi32.dll |