SERVICE_STATUS_PROCESS结构 (winsvc.h)

包含服务的进程状态信息。 ControlServiceExEnumServicesStatusExNotifyServiceStatusChangeQueryServiceStatusEx 函数使用此结构。

语法

typedef struct _SERVICE_STATUS_PROCESS {
  DWORD dwServiceType;
  DWORD dwCurrentState;
  DWORD dwControlsAccepted;
  DWORD dwWin32ExitCode;
  DWORD dwServiceSpecificExitCode;
  DWORD dwCheckPoint;
  DWORD dwWaitHint;
  DWORD dwProcessId;
  DWORD dwServiceFlags;
} SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;

成员

dwServiceType

服务的类型。 此成员可以是以下值之一。

含义
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
该服务是文件系统驱动程序。
SERVICE_KERNEL_DRIVER
0x00000001
该服务是设备驱动程序。
SERVICE_WIN32_OWN_PROCESS
0x00000010
服务在其自己的进程中运行。
SERVICE_WIN32_SHARE_PROCESS
0x00000020
该服务与其他服务共享一个进程。
 

如果服务类型SERVICE_WIN32_OWN_PROCESS或SERVICE_WIN32_SHARE_PROCESS,并且服务在 LocalSystem 帐户的上下文中运行,则还可以指定以下类型。

含义
SERVICE_INTERACTIVE_PROCESS
该服务可以与桌面交互。

有关详细信息,请参阅 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_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 通知。

dwWin32ExitCode

服务用于报告启动或停止时发生的错误的错误代码。 若要返回特定于服务的错误代码,服务必须将此值设置为 ERROR_SERVICE_SPECIFIC_ERROR ,以指示 dwServiceSpecificExitCode 成员包含错误代码。 当服务正在运行且正常终止时,服务应将此值设置为 NO_ERROR

dwServiceSpecificExitCode

服务启动或停止时发生错误时,服务返回的特定于服务的错误代码。 除非 dwWin32ExitCode 成员设置为 ERROR_SERVICE_SPECIFIC_ERROR,否则将忽略此值。

dwCheckPoint

服务在长时间启动、停止、暂停或继续操作期间定期递增以报告其进度的检查磅值。 例如,服务在启动时完成其初始化的每个步骤时,应递增此值。 在服务上调用操作的用户界面程序在长时间操作期间使用此值跟踪服务的进度。 此值无效,当服务没有挂起的启动、停止、暂停或继续操作时,此值应为零。

dwWaitHint

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

dwProcessId

服务的进程标识符。

dwServiceFlags

此成员可以是以下值之一。

含义
0
服务在不是系统进程的进程中运行,或者它未在运行。

如果服务在不是系统进程的进程中运行, 则 dwProcessId 为非零值。 如果服务未运行, 则 dwProcessId 为零。

SERVICE_RUNS_IN_SYSTEM_PROCESS
0x00000001
服务在必须始终运行的系统进程中运行。

要求

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

另请参阅

ControlServiceEx

EnumServicesStatusEx

NotifyServiceStatusChange

QueryServiceStatusEx