Функция EnumServicesStatus


Функция EnumServicesStatus перечисляет службы в указанной базе данных диспетчера управления службами. Имя и состояние каждой службы предоставляются.

Эта функция была заменена функцией EnumServicesStatusEx. Она возвращает ту же самую информацию, что и возвращаемые значения EnumServicesStatus, плюс идентификатор процесса (PID) и дополнительная информация для службы. Кроме того, EnumServicesStatusEx дает возможность Вам перечислить службы, которые принадлежат указанной группе.

 Синтаксис

BOOL EnumServicesStatus(
  SC_HANDLE hSCManager,
  DWORD dwServiceType,
  DWORD dwServiceState,
  LPENUM_SERVICE_STATUS lpServices,
  DWORD cbBufSize,
  LPDWORD pcbBytesNeeded,
  LPDWORD lpServicesReturned,
  LPDWORD lpResumeHandle
);

Параметры

hSCManager
[in] Дескриптор базы данных диспетчера управления службой. Этот дескриптор возвращается функцией OpenSCManager и должен иметь право доступа SC_MANAGER_ENUMERATE_SERVICE. Дополнительную информацию смотри в статье Защита службы и права доступа.
dwServiceType
[in] Тип перечисляемых служб. Этот параметр может состоять из одного или из нескольких следующих значений.
Значение Предназначение
SERVICE_DRIVER Перечисляет службы типа SERVICE_KERNEL_DRIVER и SERVICE_FILE_SYSTEM_DRIVER.
SERVICE_WIN32 Перечисляет службы типа SERVICE_WIN32_OWN_PROCESS и SERVICE_WIN32_SHARE_PROCESS.
dwServiceState
[in] Состояние служб, которые будут перечислены. Этот параметр может быть одним из следующих значений.
 
Значение Предназначение
SERVICE_ACTIVE Перечисляет службы, которые находятся в следующих состояниях: SERVICE_START_PENDING, SERVICE_STOP_PENDING, SERVICE_RUNNING, SERVICE_CONTINUE_PENDING, SERVICE_PAUSE_PENDING и SERVICE_PAUSED.
SERVICE_INACTIVE Перечисляет службы, которые находятся в состоянии SERVICE_STOPPED.
SERVICE_STATE_ALL Комбинирует следующие состояния: SERVICE_ACTIVE и SERVICE_INACTIVE.
lpServices
[out] Указатель на буфер, который имеет в своем составе массив структур ENUM_SERVICE_STATUS, которые получают имя и информацию о состоянии службы для каждой службы в базе данных. Буфер должен быть достаточно большим, чтобы хранить структуры, плюс строки, на которые указывают их члены.

Максимальный размер этого массива - 64 КБ. Чтобы определить необходимый размер, задайте значение ПУСТО (NULL) для этого параметра и 0 для параметра cbBufSize. Функция завершится ошибкой, а GetLastError возвратит ERROR_INSUFFICIENT_BUFFER. Параметр pcbBytesNeeded получит необходимый размер.

cbBufSize

[in] Размер буфера, на который указывает параметр lpServices, в байтах.

pcbBytesNeeded

[out] Указатель на переменную, которая получает число байтов, необходимых для возврата остатка сервисных записей, если буфер является слишком маленьким.

lpServicesReturned

[out] Указатель на переменную, которая получает число возвращаемых сервисных записей.

lpResumeHandle

[in, out] Указатель на переменную, которая при вводе данных задает отправную точку перечисления. В первый раз, когда эту функцию вызывают, Вы должны установить это значение в нуль. При выводе данных, это значение - нуль, если функция завершается успешно. Однако, если функция возвращает нуль, а функция 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, указывающим следующую службу для чтения.

Смотри также

Обзор Службы, Функции, используемые службамиEnumDependentServices, EnumServicesStatusEx, OpenSCManager, ENUM_SERVICE_STATUS

Размещение и совместимость EnumServicesStatus  

К

Windows XP

Да 

л

Windows 2000 Professional

Да

и

Windows NT Workstation

Да

е

Windows Me

Нет

н

Windows 98

Нет

т

Windows 95

Нет

 
С

Windows Server 2003

Да

е Windows 2000 Server Да
р Windows NT Server Да
в    
е    
р    

Используемая библиотека

Advapi32.lib

Используемая DLL advapi32.dll
 Заголовочный файл  

- объявлено в

Winsvc.h

 - включено в

Windows.h

 Unicode

Реализуется как EnumServicesStatusW(Unicode) и EnumServicesStatusA(ANSI)

 Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
В оглавление справки

Hosted by uCoz