Функция QueryServiceStatusEx (winsvc.h)

Извлекает текущее состояние указанной службы на основе указанного уровня информации.

Синтаксис

BOOL QueryServiceStatusEx(
  [in]            SC_HANDLE      hService,
  [in]            SC_STATUS_TYPE InfoLevel,
  [out, optional] LPBYTE         lpBuffer,
  [in]            DWORD          cbBufSize,
  [out]           LPDWORD        pcbBytesNeeded
);

Параметры

[in] hService

Дескриптор службы. Этот дескриптор возвращается функцией CreateService или OpenService и должен иметь право доступа SERVICE_QUERY_STATUS. Дополнительные сведения см. в разделе Service Security and Access Rights.

[in] InfoLevel

Возвращаемые атрибуты службы. Используйте SC_STATUS_PROCESS_INFO для получения сведений о состоянии службы. Параметр lpBuffer является указателем на структуру SERVICE_STATUS_PROCESS .

В настоящее время другие уровни информации не определены.

[out, optional] lpBuffer

Указатель на буфер, который получает сведения о состоянии. Формат этих данных зависит от значения параметра InfoLevel .

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

[in] cbBufSize

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

[out] pcbBytesNeeded

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

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение.

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

Код возврата Описание
ERROR_INVALID_HANDLE
Дескриптор недействителен.
ERROR_ACCESS_DENIED
Дескриптор не имеет права доступа к SERVICE_QUERY_STATUS.
ERROR_INSUFFICIENT_BUFFER
Буфер слишком мал для структуры SERVICE_STATUS_PROCESS . В структуру ничего не было написано.
ERROR_INVALID_PARAMETER
Недопустимый член cbSizeSERVICE_STATUS_PROCESS .
ERROR_INVALID_LEVEL
Параметр InfoLevel содержит неподдерживаемое значение.
ERROR_SHUTDOWN_IN_PROGRESS
Система завершает работу; Эта функция не может быть вызвана.

Комментарии

Функция QueryServiceStatusEx возвращает последние сведения о состоянии службы, сообщаемые диспетчеру управления службами. Если служба только что изменила свое состояние, возможно, она еще не обновила диспетчер управления службой.

Идентификатор процесса, возвращаемый в структуре SERVICE_STATUS_PROCESS , действителен при условии, что служба находится в состоянии SERVICE_RUNNING, SERVICE_PAUSE_PENDING, SERVICE_PAUSED или SERVICE_CONTINUE_PENDING. Однако если служба находится в состоянии SERVICE_START_PENDING или SERVICE_STOP_PENDING, идентификатор процесса может быть недопустимым, а если служба находится в состоянии SERVICE_STOPPED, он никогда не будет допустимым.

Примеры

Пример см. в разделе Запуск службы или Остановка службы.

Требования

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

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

SERVICE_STATUS_PROCESS

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

Запуск службы