структура SERVICE_STATUS (winsvc.h)
Содержит сведения о состоянии службы. Функции ControlService, EnumDependentServices, EnumServicesStatus и QueryServiceStatus используют эту структуру. Служба использует эту структуру в функции SetServiceStatus , чтобы сообщить о своем текущем состоянии диспетчеру управления службой.
Синтаксис
typedef struct _SERVICE_STATUS {
DWORD dwServiceType;
DWORD dwCurrentState;
DWORD dwControlsAccepted;
DWORD dwWin32ExitCode;
DWORD dwServiceSpecificExitCode;
DWORD dwCheckPoint;
DWORD dwWaitHint;
} SERVICE_STATUS, *LPSERVICE_STATUS;
Члены
dwServiceType
Тип службы. Этот элемент может быть одним из следующих значений.
Если тип службы SERVICE_WIN32_OWN_PROCESS или SERVICE_WIN32_SHARE_PROCESS и служба выполняется в контексте учетной записи LocalSystem, можно также указать следующий тип.
Значение | Значение |
---|---|
|
Служба может взаимодействовать с рабочим столом.
Дополнительные сведения см. в разделе Интерактивные службы. |
dwCurrentState
Текущее состояние службы. Этот элемент может быть одним из следующих значений.
dwControlsAccepted
Элемент управления коды, которые служба принимает и обрабатывает в своей функции обработчика (см. раздел Handler и HandlerEx). Процесс пользовательского интерфейса может управлять службой, указав команду управления в функции ControlService или ControlServiceEx . По умолчанию все службы принимают значение SERVICE_CONTROL_INTERROGATE .
Чтобы принять значение SERVICE_CONTROL_DEVICEEVENT , служба должна зарегистрироваться для получения событий устройства с помощью функции RegisterDeviceNotification .
Ниже приведены коды элементов управления.
Код элемента управления | Значение |
---|---|
|
Служба — это сетевой компонент, который может принимать изменения в привязке без остановки и перезапуска.
Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_NETBINDADD, SERVICE_CONTROL_NETBINDREMOVE, SERVICE_CONTROL_NETBINDENABLE и SERVICE_CONTROL_NETBINDDISABLE . |
|
Служба может повторно считывать параметры запуска без остановки и перезапуска.
Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_PARAMCHANGE . |
|
Службу можно приостановить и продолжить.
Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_PAUSE и SERVICE_CONTROL_CONTINUE . |
|
Служба может выполнять задачи предварительного завершения.
Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_PRESHUTDOWN . Обратите внимание, что ControlService и ControlServiceEx не могут отправить это уведомление; Только система может отправить его. Windows Server 2003 и Windows XP: Это значение не поддерживается. |
|
Служба получает уведомление при завершении работы системы.
Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_SHUTDOWN . Обратите внимание, что ControlService и ControlServiceEx не могут отправить это уведомление; Только система может отправить его. |
|
Службу можно остановить.
Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_STOP . |
Этот элемент также может содержать следующие расширенные коды элементов управления, которые поддерживаются только HandlerEx. (Обратите внимание, что эти коды элементов управления не могут быть отправлены ControlService или ControlServiceEx.)
dwWin32ExitCode
Код ошибки, который служба использует для сообщения об ошибке, возникающей при запуске или остановке. Чтобы вернуть код ошибки, характерный для службы, служба должна задать для этого значения значение ERROR_SERVICE_SPECIFIC_ERROR чтобы указать, что элемент dwServiceSpecificExitCode содержит код ошибки. Служба должна задать для этого значения значение NO_ERROR при запуске и при обычном завершении работы.
dwServiceSpecificExitCode
Код ошибки службы, который служба возвращает при возникновении ошибки во время запуска или остановки службы. Это значение игнорируется, если только члену dwWin32ExitCode не задано значение ERROR_SERVICE_SPECIFIC_ERROR.
dwCheckPoint
Значение проверка точек, которое служба периодически увеличивает, чтобы сообщать о ходе выполнения во время длительного запуска, остановки, приостановки или продолжения операции. Например, служба должна увеличивать это значение по мере завершения каждого этапа инициализации при запуске. Программа пользовательского интерфейса, вызвавщая операцию со службой, использует это значение для отслеживания хода выполнения службы во время длительной операции. Это значение недопустимо и должно быть равным нулю, если служба не имеет ожидающих запуска, остановки, приостановки или продолжения операций.
dwWaitHint
Предполагаемое время, необходимое для ожидающей операции запуска, остановки, приостановки или продолжения в миллисекундах. До истечения указанного времени служба должна выполнить следующий вызов функции SetServiceStatus с увеличением значения dwCheckPoint или изменением dwCurrentState. Если время, указанное dwWaitHint , прошло, а dwCheckPoint не было увеличено или dwCurrentState не изменилось, диспетчер управления службами или программа управления службами может предположить, что произошла ошибка и служба должна быть остановлена. Однако если служба совместно использует процесс с другими службами, диспетчер управления службами не может завершить работу приложения службы, так как ему также придется завершить работу других служб, совместно с которыми выполняется процесс.
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Верхняя часть | winsvc.h (включая Windows.h) |