Win32 API 日本語リファレンス
ホームSystem.Services › SERVICE_STATUS_PROCESS

SERVICE_STATUS_PROCESS

構造体
サイズx64: 36 バイト / x86: 36 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
dwServiceTypeENUM_SERVICE_TYPE4+0+0

サービスの種類です。このメンバーには次のいずれかの値を指定できます。

意味
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 を参照してください。

dwCurrentStateSERVICE_STATUS_CURRENT_STATE4+4+4

サービスの現在の状態です。このメンバーには次のいずれかの値を指定できます。

意味
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
サービスは停止しました。
dwControlsAcceptedDWORD4+8+8

サービスがハンドラー関数で受け入れて処理する制御コードです ( Handler および HandlerEx を参照)。ユーザー インターフェイス プロセスは、 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_PAUSE および SERVICE_CONTROL_CONTINUE の通知を受け取ることができます。

SERVICE_ACCEPT_PRESHUTDOWN
0x00000100
サービスはシャットダウン前の処理を実行できます。

この制御コードにより、サービスは SERVICE_CONTROL_PRESHUTDOWN の通知を受け取ることができます。ただし、 ControlService および ControlServiceEx ではこの通知を送信できません。送信できるのはシステムのみです。

Windows Server 2003 および Windows XP: この値はサポートされていません。

SERVICE_ACCEPT_SHUTDOWN
0x00000004
システムのシャットダウンが発生したときにサービスに通知されます。

この制御コードにより、サービスは SERVICE_CONTROL_SHUTDOWN の通知を受け取ることができます。ただし、 ControlService および ControlServiceEx ではこの通知を送信できません。送信できるのはシステムのみです。

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 の通知を送信できるようになります。
dwWin32ExitCodeDWORD4+12+12サービスの開始時または停止時に発生したエラーを報告するために、サービスが使用するエラー コードです。サービス固有のエラー コードを返すには、dwServiceSpecificExitCode メンバーにエラー コードが格納されていることを示すため、サービスはこの値を ERROR_SERVICE_SPECIFIC_ERROR に設定する必要があります。サービスは、実行中および正常に終了する場合には、この値を NO_ERROR に設定します。
dwServiceSpecificExitCodeDWORD4+16+16サービスの開始中または停止中にエラーが発生したときに、サービスが返すサービス固有のエラー コードです。dwWin32ExitCode メンバーが ERROR_SERVICE_SPECIFIC_ERROR に設定されている場合を除き、この値は無視されます。
dwCheckPointDWORD4+20+20時間のかかる開始、停止、一時停止、または再開の操作中に、進行状況を報告するためにサービスが定期的にインクリメントするチェックポイント値です。たとえば、起動時にサービスは初期化の各ステップを完了するたびにこの値をインクリメントします。サービスに対して操作を実行したユーザー インターフェイス プログラムは、この値を使用して、時間のかかる操作中のサービスの進行状況を追跡します。開始、停止、一時停止、または再開の操作が保留中でない場合、この値は無効であり、0 でなければなりません。
dwWaitHintDWORD4+24+24保留中の開始、停止、一時停止、または再開の操作に必要と見積もられる時間 (ミリ秒単位) です。サービスは、指定された時間が経過する前に、インクリメントした dwCheckPoint 値、または変更した dwCurrentState 値を指定して、 SetServiceStatus 関数を次に呼び出す必要があります。dwWaitHint で指定された時間が経過しても dwCheckPoint がインクリメントされず、dwCurrentState も変化しない場合、サービス コントロール マネージャーまたはサービス制御プログラムは、エラーが発生したものとみなしてサービスを停止できます。ただし、サービスが他のサービスとプロセスを共有している場合、そのプロセスを共有する他のサービスも終了させることになるため、サービス コントロール マネージャーはサービス アプリケーションを終了できません。
dwProcessIdDWORD4+28+28サービスのプロセス識別子です。
dwServiceFlagsSERVICE_RUNS_IN_PROCESS4+32+32

このメンバーには次のいずれかの値を指定できます。

意味
0
サービスはシステム プロセス以外のプロセスで実行されているか、または実行されていません。

サービスがシステム プロセス以外のプロセスで実行されている場合、dwProcessId は 0 以外になります。サービスが実行されていない場合、dwProcessId は 0 になります。

SERVICE_RUNS_IN_SYSTEM_PROCESS
0x00000001
サービスは、常に実行されている必要があるシステム プロセスで実行されます。

公式ドキュメント

サービスのプロセス状態情報を格納します。 ControlServiceExEnumServicesStatusExNotifyServiceStatusChangeQueryServiceStatusEx の各関数がこの構造体を使用します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// SERVICE_STATUS_PROCESS  (x64 36 / x86 36 バイト)
typedef struct SERVICE_STATUS_PROCESS {
    ENUM_SERVICE_TYPE dwServiceType;
    SERVICE_STATUS_CURRENT_STATE dwCurrentState;
    DWORD dwControlsAccepted;
    DWORD dwWin32ExitCode;
    DWORD dwServiceSpecificExitCode;
    DWORD dwCheckPoint;
    DWORD dwWaitHint;
    DWORD dwProcessId;
    SERVICE_RUNS_IN_PROCESS dwServiceFlags;
} SERVICE_STATUS_PROCESS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SERVICE_STATUS_PROCESS
{
    public uint dwServiceType;
    public uint dwCurrentState;
    public uint dwControlsAccepted;
    public uint dwWin32ExitCode;
    public uint dwServiceSpecificExitCode;
    public uint dwCheckPoint;
    public uint dwWaitHint;
    public uint dwProcessId;
    public uint dwServiceFlags;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SERVICE_STATUS_PROCESS
    Public dwServiceType As UInteger
    Public dwCurrentState As UInteger
    Public dwControlsAccepted As UInteger
    Public dwWin32ExitCode As UInteger
    Public dwServiceSpecificExitCode As UInteger
    Public dwCheckPoint As UInteger
    Public dwWaitHint As UInteger
    Public dwProcessId As UInteger
    Public dwServiceFlags As UInteger
End Structure
import ctypes
from ctypes import wintypes

class SERVICE_STATUS_PROCESS(ctypes.Structure):
    _fields_ = [
        ("dwServiceType", wintypes.DWORD),
        ("dwCurrentState", wintypes.DWORD),
        ("dwControlsAccepted", wintypes.DWORD),
        ("dwWin32ExitCode", wintypes.DWORD),
        ("dwServiceSpecificExitCode", wintypes.DWORD),
        ("dwCheckPoint", wintypes.DWORD),
        ("dwWaitHint", wintypes.DWORD),
        ("dwProcessId", wintypes.DWORD),
        ("dwServiceFlags", wintypes.DWORD),
    ]
#[repr(C)]
pub struct SERVICE_STATUS_PROCESS {
    pub dwServiceType: u32,
    pub dwCurrentState: u32,
    pub dwControlsAccepted: u32,
    pub dwWin32ExitCode: u32,
    pub dwServiceSpecificExitCode: u32,
    pub dwCheckPoint: u32,
    pub dwWaitHint: u32,
    pub dwProcessId: u32,
    pub dwServiceFlags: u32,
}
import "golang.org/x/sys/windows"

type SERVICE_STATUS_PROCESS struct {
	dwServiceType uint32
	dwCurrentState uint32
	dwControlsAccepted uint32
	dwWin32ExitCode uint32
	dwServiceSpecificExitCode uint32
	dwCheckPoint uint32
	dwWaitHint uint32
	dwProcessId uint32
	dwServiceFlags uint32
}
type
  SERVICE_STATUS_PROCESS = record
    dwServiceType: DWORD;
    dwCurrentState: DWORD;
    dwControlsAccepted: DWORD;
    dwWin32ExitCode: DWORD;
    dwServiceSpecificExitCode: DWORD;
    dwCheckPoint: DWORD;
    dwWaitHint: DWORD;
    dwProcessId: DWORD;
    dwServiceFlags: DWORD;
  end;
const SERVICE_STATUS_PROCESS = extern struct {
    dwServiceType: u32,
    dwCurrentState: u32,
    dwControlsAccepted: u32,
    dwWin32ExitCode: u32,
    dwServiceSpecificExitCode: u32,
    dwCheckPoint: u32,
    dwWaitHint: u32,
    dwProcessId: u32,
    dwServiceFlags: u32,
};
type
  SERVICE_STATUS_PROCESS {.bycopy.} = object
    dwServiceType: uint32
    dwCurrentState: uint32
    dwControlsAccepted: uint32
    dwWin32ExitCode: uint32
    dwServiceSpecificExitCode: uint32
    dwCheckPoint: uint32
    dwWaitHint: uint32
    dwProcessId: uint32
    dwServiceFlags: uint32
struct SERVICE_STATUS_PROCESS
{
    uint dwServiceType;
    uint dwCurrentState;
    uint dwControlsAccepted;
    uint dwWin32ExitCode;
    uint dwServiceSpecificExitCode;
    uint dwCheckPoint;
    uint dwWaitHint;
    uint dwProcessId;
    uint dwServiceFlags;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SERVICE_STATUS_PROCESS サイズ: 36 バイト(x64)
dim st, 9    ; 4byte整数×9(構造体サイズ 36 / 4 切り上げ)
; dwServiceType : ENUM_SERVICE_TYPE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwCurrentState : SERVICE_STATUS_CURRENT_STATE (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwControlsAccepted : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwWin32ExitCode : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwServiceSpecificExitCode : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwCheckPoint : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwWaitHint : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwProcessId : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwServiceFlags : SERVICE_RUNS_IN_PROCESS (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SERVICE_STATUS_PROCESS
    #field int dwServiceType
    #field int dwCurrentState
    #field int dwControlsAccepted
    #field int dwWin32ExitCode
    #field int dwServiceSpecificExitCode
    #field int dwCheckPoint
    #field int dwWaitHint
    #field int dwProcessId
    #field int dwServiceFlags
#endstruct

stdim st, SERVICE_STATUS_PROCESS        ; NSTRUCT 変数を確保
st->dwServiceType = 100
mes "dwServiceType=" + st->dwServiceType