SERVICE_STATUS 结构 (winsvc.h)

包含服务的状态信息。 ControlServiceEnumDependentServicesEnumServicesStatusQueryServiceStatus 函数使用此结构。 服务在 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
该服务可以与桌面交互。

有关详细信息,请参阅 Interactive Services

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

服务接受的控制代码及其处理程序函数中的处理 (请参阅 HandlerHandlerEx) 。 用户界面进程可以通过在 ControlService 或 ControlServiceEx 函数中指定控件命令来控制服务。 默认情况下,所有服务都接受 SERVICE_CONTROL_INTERROGATE 值。

若要接受 SERVICE_CONTROL_DEVICEEVENT 值,服务必须注册以使用 RegisterDeviceNotification 函数接收设备事件。

下面是控制代码。

控制代码 含义
SERVICE_ACCEPT_NETBINDCHANGE
0x00000010
该服务是一个网络组件,可以在不停止和重启的情况下接受其绑定中的更改。

此控制代码允许服务接收 SERVICE_CONTROL_NETBINDADDSERVICE_CONTROL_NETBINDREMOVESERVICE_CONTROL_NETBINDENABLESERVICE_CONTROL_NETBINDDISABLE 通知。

SERVICE_ACCEPT_PARAMCHANGE
0x00000008
该服务可以重新读取其启动参数,而无需停止和重启。

此控制代码允许服务接收 SERVICE_CONTROL_PARAMCHANGE 通知。

SERVICE_ACCEPT_PAUSE_CONTINUE
0x00000002
服务可以暂停并继续。

此控制代码允许服务接收 SERVICE_CONTROL_PAUSESERVICE_CONTROL_CONTINUE 通知。

SERVICE_ACCEPT_PRESHUTDOWN
0x00000100
该服务可以执行预执行任务。

此控制代码使服务能够接收 SERVICE_CONTROL_PRESHUTDOWN 通知。 请注意, ControlServiceControlServiceEx 无法发送此通知;只有系统可以发送它。

Windows Server 2003 和 Windows XP: 不支持此值。

SERVICE_ACCEPT_SHUTDOWN
0x00000004
系统关闭时,服务会收到通知。

此控制代码允许服务接收 SERVICE_CONTROL_SHUTDOWN 通知。 请注意, ControlServiceControlServiceEx 无法发送此通知;只有系统可以发送它。

SERVICE_ACCEPT_STOP
0x00000001
服务可以停止。

此控制代码允许服务接收 SERVICE_CONTROL_STOP 通知。

 

此成员还可以包含以下扩展控制代码,这些代码仅受 HandlerEx 支持。 (请注意,这些控制代码不能由 ControlServiceControlServiceEx.)

控制代码 含义
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

挂起的启动、停止、暂停或继续操作所需的估计时间(以毫秒为单位)。 在指定的时间量过去之前,服务应使用递增的 dwCheckPoint 值或 dwCurrentState 中的更改对 SetServiceStatus 函数进行下一次调用。 如果 dwWaitHint 指定的时间量通过,并且 dwCheckPoint 未递增或 dwCurrentState 未更改,则服务控制管理器或服务控制程序可以假定发生了错误,并且服务应停止。 但是,如果服务与其他服务共享进程,则服务控制管理器无法终止服务应用程序,因为它必须终止共享进程的其他服务。

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 winsvc.h (包括 Windows.h)

另请参阅

ControlService

ControlServiceEx

EnumDependentServices

EnumServicesStatus

QueryServiceStatus

SetServiceStatus