Поделиться через


Функция 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_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

Указатель на буфер, содержащий массив 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.

Диспетчер управления службами может задать следующие коды ошибок. Другие коды ошибок могут задаваться функциями реестра, которые вызываются диспетчером управления службами.

Код возврата Описание
ERROR_ACCESS_DENIED
Дескриптор не имеет права доступа к SC_MANAGER_ENUMERATE_SERVICE.
ERROR_INVALID_HANDLE
Указанный дескриптор недопустим.
ERROR_INVALID_PARAMETER
Указан недопустимый параметр.
ERROR_MORE_DATA
Существует больше записей служб, чем помещается в буфер 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

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

ENUM_SERVICE_STATUS

EnumDependentServices

EnumServicesStatusEx

OpenSCManager

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

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