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
服務可以與桌面互動。

如需詳細資訊,請參閱 互動式服務

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) 。 使用者介面進程可以在 ControlServiceControlServiceEx 函式中指定控制項命令來控制服務。 根據預設,所有服務都會接受 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