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 帐户的上下文中运行,则还可以指定以下类型。
值 | 含义 |
---|---|
|
该服务可以与桌面交互。
有关详细信息,请参阅 Interactive Services。 |
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
挂起的启动、停止、暂停或继续操作所需的估计时间(以毫秒为单位)。 在指定的时间量过去之前,服务应使用递增的 dwCheckPoint 值或 dwCurrentState 中的更改对 SetServiceStatus 函数进行下一次调用。 如果 dwWaitHint 指定的时间量通过,并且 dwCheckPoint 未递增或 dwCurrentState 未更改,则服务控制管理器或服务控制程序可以假定发生了错误,并且服务应停止。 但是,如果服务与其他服务共享进程,则服务控制管理器无法终止服务应用程序,因为它必须终止共享进程的其他服务。
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
标头 | winsvc.h (包括 Windows.h) |