Функция QueryServiceStatusEx извлекает текущее состояние указанной службы, основанное на указанном уровне защиты информации.
Синтаксис
BOOL QueryServiceStatusEx( SC_HANDLE hService, SC_STATUS_TYPE InfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPDWORD pcbBytesNeeded ); |
hService
[in] Дескриптор службы. Этот дескриптор возвращается функцией CreateService или OpenService и он должен иметь право доступа SERIVCE_QUERY_STATUS. Дополнительную информацию смотри в статье Защита службы и права доступа.
InfoLevel
[in] Возвращаемые атрибуты службы. Используйте флажок SC_STATUS_PROCESS_INFO, чтобы извлечь информацию состояния службы. Параметр lpBuffer - указатель на структуру SERVICE_STATUS_PROCESS.
В настоящее время, никакие другие уровни защиты информации не определены.
lpBuffer
[out] Указатель на буфер, который получает информацию о статусе. Формат этих данных зависит от значения параметра InfoLevel.
Максимальный размер этого массива - 8 КБ. Чтобы определять требуемый размер, задайте значение ПУСТО (NULL) для этого параметра и 0 для параметра cbBufSize. Функция завершится ошибкой, а GetLastError возвратит значение ERROR_INSUFFICIENT_BUFFER. Параметр pcbBytesNeeded получит требуемый размер.
cbBufSize
[in] Размер буфера, на который указывает параметр lpBuffer, в байтах.
pcbBytesNeeded
[out] Указатель на переменную, которая получает число байтов, необходимых для сохранения всей информации о статусе, если функция завершается ошибкой ERROR_INSUFFICIENT_BUFFER.
Если функция завершается ошибкой, возвращаемое значение - нуль. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError. Могут возвратиться следующие ошибки.
Код возврата | Описание |
---|---|
ERROR_INVALID_HANDLE | Дескриптор недействителен. |
ERROR_ACCESS_DENIED | Дескриптор не имеет права доступа SERVICE_QUERY_STATUS. |
ERROR_INSUFFICIENT_BUFFER | Буфер является слишком маленьким для структуры SERVICE_STATUS_PROCESS. В структуре ничто не было записано. |
ERROR_INVALID_PARAMETER | Член cbSize структуры SERVICE_STATUS_PROCESS не действителен. |
ERROR_INVALID_LEVEL | Параметр InfoLevel имеет в своем составе неподдерживаемое значение. |
ERROR_SHUTDOWN_IN_PROGRESS | Система закрывается; эту функцию нельзя вызвать. |
Функция QueryServiceStatusEx возвращает новую информацию о состоянии службы, которая сообщается диспетчеру управления службами. Если служба изменила только свое состояние, функция не может еще обновить диспетчера управления службами. Приложения могут найти текущее состояние службы, запрашивая службы непосредственно при помощи использования функции ControlService с управляющим кодом SERVICE_CONTROL_INTERROGATE.
Идентификатор процесса (PID), возвращенный в структуре SERVICE_STATUS_PROCESS действителен при условии, что состояние службы имеет одно из значений SERVICE_RUNNING, SERVICE_PAUSE_PENDING, SERVICE_PAUSED или SERVICE_CONTINUE_PENDING. Если служба находится в состоянии SERVICE_START_PENDING или SERVICE_STOP_PENDING, то идентификатор процесса (PID) не может быть действительным и, если служба находится в состоянии SERVICE_STOPPED, то он никогда не действителен.
Смотри также
Обзор Службы, Функции, используемые службами, SERVICE_STATUS_PROCESS
Размещение и совместимость QueryServiceStatusEx |
||
К | Windows XP | Да |
л | Windows 2000 Professional | Да |
и | Windows NT | Нет |
е | 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 | Нет | |
Замечания по платформе | Не имеется |