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 帳戶的內容中執行,則也可能指定下列類型。
值 | 意義 |
---|---|
|
服務可以與桌面互動。
如需詳細資訊,請參閱 互動式服務。 |
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) |