Функция 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_DRIVER
0x0000000B
Службы типа SERVICE_KERNEL_DRIVER и SERVICE_FILE_SYSTEM_DRIVER.
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
Службы драйверов файловой системы.
SERVICE_KERNEL_DRIVER
0x00000001
Службы драйверов.
SERVICE_WIN32
0x00000030
Службы типа SERVICE_WIN32_OWN_PROCESS и SERVICE_WIN32_SHARE_PROCESS.
SERVICE_WIN32_OWN_PROCESS
0x00000010
Службы, которые выполняются в собственных процессах.
SERVICE_WIN32_SHARE_PROCESS
0x00000020
Службы, которые совместно используют процесс с одной или несколькими другими службами. Дополнительные сведения см. в разделе Служебные программы.

[in] dwServiceState

Состояние перечисляемых служб. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
SERVICE_ACTIVE
0x00000001
Перечисляет службы, которые находятся в следующих состояниях: SERVICE_START_PENDING, SERVICE_STOP_PENDING, SERVICE_RUNNING, SERVICE_CONTINUE_PENDING, SERVICE_PAUSE_PENDING и SERVICE_PAUSED.
SERVICE_INACTIVE
0x00000002
Перечисляет службы, которые находятся в состоянии SERVICE_STOPPED .
SERVICE_STATE_ALL
0x00000003
Объединяет состояния SERVICE_ACTIVE и SERVICE_INACTIVE .

[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. Могут быть возвращены следующие ошибки.

Код возврата Описание
ERROR_ACCESS_DENIED
Дескриптор не имеет права доступа к SC_MANAGER_ENUMERATE_SERVICE .
ERROR_MORE_DATA
Буфер слишком мал. Не все данные в активной базе данных могут быть возвращены. Параметр pcbBytesNeeded содержит количество байтов, необходимых для получения оставшихся записей.
ERROR_INVALID_PARAMETER
Использовалось недопустимое значение параметра.
ERROR_INVALID_HANDLE
Дескриптор недействителен.
ERROR_INVALID_LEVEL
Параметр InfoLevel содержит неподдерживаемое значение.
ERROR_SHUTDOWN_IN_PROGRESS
Система завершает работу; эту функцию нельзя вызвать.

Комментарии

Если вызывающий объект не имеет права SERVICE_QUERY_STATUS доступа к службе, служба автоматически пропускается из списка служб, возвращенных клиенту.

Примечание

Заголовок winsvc.h определяет EnumServicesStatusEx в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

   
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header winsvc.h (включая Windows.h)
Библиотека Advapi32.lib
DLL Advapi32.dll

См. также раздел

ENUM_SERVICE_STATUS_PROCESS

Функции службы

Установка, удаление и перечисление службы