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


структура 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_FILE_SYSTEM_DRIVER
0x00000002
Служба является драйвером файловой системы.
SERVICE_KERNEL_DRIVER
0x00000001
Служба является драйвером устройства.
SERVICE_WIN32_OWN_PROCESS
0x00000010
Служба выполняется в собственном процессе.
SERVICE_WIN32_SHARE_PROCESS
0x00000020
Служба совместно использует процесс с другими службами.
SERVICE_USER_OWN_PROCESS
0x00000050
Служба выполняется в собственном процессе под учетной записью пользователя, выполнившего вход.
SERVICE_USER_SHARE_PROCESS
0x00000060
Служба совместно использует процесс с одной или несколькими другими службами, которые выполняются под учетной записью пользователя, выполнившего вход.
 

Если тип службы SERVICE_WIN32_OWN_PROCESS или SERVICE_WIN32_SHARE_PROCESS и служба выполняется в контексте учетной записи LocalSystem, можно также указать следующий тип.

Значение Значение
SERVICE_INTERACTIVE_PROCESS
0x00000100
Служба может взаимодействовать с рабочим столом.

Дополнительные сведения см. в разделе Интерактивные службы.

dwCurrentState

Текущее состояние службы. Этот элемент может быть одним из следующих значений.

Значение Значение
SERVICE_CONTINUE_PENDING
0x00000005
Ожидается возобновление работы службы.
SERVICE_PAUSE_PENDING
0x00000006
Ожидается приостановка службы.
SERVICE_PAUSED
0x00000007
Служба приостановлена.
SERVICE_RUNNING
0x00000004
Служба запущена.
SERVICE_START_PENDING
0x00000002
Служба запускается.
SERVICE_STOP_PENDING
0x00000003
Служба останавливается.
SERVICE_STOPPED
0x00000001
Служба не запущена.

dwControlsAccepted

Элемент управления коды, которые служба принимает и обрабатывает в своей функции обработчика (см. раздел Handler и HandlerEx). Процесс пользовательского интерфейса может управлять службой, указав команду управления в функции ControlService или ControlServiceEx . По умолчанию все службы принимают значение SERVICE_CONTROL_INTERROGATE .

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

Ниже приведены коды элементов управления.

Код элемента управления Значение
SERVICE_ACCEPT_NETBINDCHANGE
0x00000010
Служба — это сетевой компонент, который может принимать изменения в привязке без остановки и перезапуска.

Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_NETBINDADD, SERVICE_CONTROL_NETBINDREMOVE, SERVICE_CONTROL_NETBINDENABLE и SERVICE_CONTROL_NETBINDDISABLE .

SERVICE_ACCEPT_PARAMCHANGE
0x00000008
Служба может повторно считывать параметры запуска без остановки и перезапуска.

Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_PARAMCHANGE .

SERVICE_ACCEPT_PAUSE_CONTINUE
0x00000002
Службу можно приостановить и продолжить.

Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_PAUSE и SERVICE_CONTROL_CONTINUE .

SERVICE_ACCEPT_PRESHUTDOWN
0x00000100
Служба может выполнять задачи предварительного завершения.

Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_PRESHUTDOWN . Обратите внимание, что ControlService и ControlServiceEx не могут отправить это уведомление; Только система может отправить его.

Windows Server 2003 и Windows XP: Это значение не поддерживается.

SERVICE_ACCEPT_SHUTDOWN
0x00000004
Служба получает уведомление при завершении работы системы.

Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_SHUTDOWN . Обратите внимание, что ControlService и ControlServiceEx не могут отправить это уведомление; Только система может отправить его.

SERVICE_ACCEPT_STOP
0x00000001
Службу можно остановить.

Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_STOP .

 

Этот элемент также может содержать следующие расширенные коды элементов управления, которые поддерживаются только HandlerEx. (Обратите внимание, что эти коды элементов управления не могут быть отправлены ControlService или ControlServiceEx.)

Код элемента управления Значение
SERVICE_ACCEPT_HARDWAREPROFILECHANGE
0x00000020
Служба получает уведомление при изменении профиля оборудования компьютера. Это позволяет системе отправлять SERVICE_CONTROL_HARDWAREPROFILECHANGE уведомления в службу.
SERVICE_ACCEPT_POWEREVENT
0x00000040
Служба получает уведомление при изменении состояния питания компьютера. Это позволяет системе отправлять SERVICE_CONTROL_POWEREVENT уведомления в службу.
SERVICE_ACCEPT_SESSIONCHANGE
0x00000080
Служба получает уведомление при изменении состояния сеанса компьютера. Это позволяет системе отправлять SERVICE_CONTROL_SESSIONCHANGE уведомления в службу.
SERVICE_ACCEPT_TIMECHANGE
0x00000200
Служба получает уведомление об изменении системного времени. Это позволяет системе отправлять SERVICE_CONTROL_TIMECHANGE уведомления в службу.

Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Этот код элемента управления не поддерживается.

SERVICE_ACCEPT_TRIGGEREVENT
0x00000400
Служба получает уведомление при возникновении события, для которого служба зарегистрирована. Это позволяет системе отправлять SERVICE_CONTROL_TRIGGEREVENT уведомления в службу.

Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Этот код элемента управления не поддерживается.

SERVICE_ACCEPT_USERMODEREBOOT
0x00000800
Службы получают уведомление, когда пользователь инициирует перезагрузку.

Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Этот код элемента управления не поддерживается.

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)

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

ControlService

ControlServiceEx

EnumDependentServices

EnumServicesStatus

QueryServiceStatus

SetServiceStatus