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 and 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
サービスが開始または停止中に発生するエラーを報告するために使用するエラー コード。 サービスに固有のエラー コードを返すには、dwServiceSpecificExitCode メンバーにエラー コードが含まれていることを示すために、この値を ERROR_SERVICE_SPECIFIC_ERROR に設定する必要があります。 サービスは、この値を実行中と正常終了時に NO_ERROR に設定する必要があります。
dwServiceSpecificExitCode
サービスの開始または停止中にエラーが発生したときにサービスが返すサービス固有のエラー コード。 dwWin32ExitCode メンバーが ERROR_SERVICE_SPECIFIC_ERROR に設定されていない限り、この値は無視されます。
dwCheckPoint
サービスが定期的にインクリメントするチェックポイント値は、長い開始、停止、一時停止、または継続操作中に進行状況を報告します。 たとえば、サービスは起動時に初期化の各ステップを完了するときに、この値をインクリメントする必要があります。 サービスで操作を呼び出したユーザー インターフェイス プログラムは、この値を使用して、長い操作中のサービスの進行状況を追跡します。 この値は無効であり、サービスに開始、停止、一時停止、または続行操作が保留中でない場合は 0 にする必要があります。
dwWaitHint
保留中の開始、停止、一時停止、または続行操作に必要な推定時間 (ミリ秒単位)。 指定した時間が経過する前に、サービスは、インクリメントされた dwCheckPoint 値または dwCurrentState の変更を使用して、SetServiceStatus 関数の次の呼び出しを行う必要があります。 dwWaitHint で指定された時間が経過し、dwCheckPoint がインクリメントされていないか、dwCurrentState が変更されていない場合、サービス コントロール マネージャーまたはサービス制御プログラムはエラーが発生し、サービスを停止する必要があると見なすことができます。 ただし、サービスが他のサービスとプロセスを共有している場合、サービス コントロール マネージャーは、プロセスを共有する他のサービスも終了する必要があるため、サービス アプリケーションを終了できません。
要件
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
Header | winsvc.h (Windows.h を含む) |