aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/golang.org/x/sys/windows/service.go
blob: 62fc31b40bd92a25fd6b7a98e96814eadeff6301 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build windows

package windows

const (
    SC_MANAGER_CONNECT            = 1
    SC_MANAGER_CREATE_SERVICE     = 2
    SC_MANAGER_ENUMERATE_SERVICE  = 4
    SC_MANAGER_LOCK               = 8
    SC_MANAGER_QUERY_LOCK_STATUS  = 16
    SC_MANAGER_MODIFY_BOOT_CONFIG = 32
    SC_MANAGER_ALL_ACCESS         = 0xf003f
)

//sys   OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW

const (
    SERVICE_KERNEL_DRIVER       = 1
    SERVICE_FILE_SYSTEM_DRIVER  = 2
    SERVICE_ADAPTER             = 4
    SERVICE_RECOGNIZER_DRIVER   = 8
    SERVICE_WIN32_OWN_PROCESS   = 16
    SERVICE_WIN32_SHARE_PROCESS = 32
    SERVICE_WIN32               = SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS
    SERVICE_INTERACTIVE_PROCESS = 256
    SERVICE_DRIVER              = SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER
    SERVICE_TYPE_ALL            = SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS

    SERVICE_BOOT_START   = 0
    SERVICE_SYSTEM_START = 1
    SERVICE_AUTO_START   = 2
    SERVICE_DEMAND_START = 3
    SERVICE_DISABLED     = 4

    SERVICE_ERROR_IGNORE   = 0
    SERVICE_ERROR_NORMAL   = 1
    SERVICE_ERROR_SEVERE   = 2
    SERVICE_ERROR_CRITICAL = 3

    SC_STATUS_PROCESS_INFO = 0

    SC_ACTION_NONE        = 0
    SC_ACTION_RESTART     = 1
    SC_ACTION_REBOOT      = 2
    SC_ACTION_RUN_COMMAND = 3

    SERVICE_STOPPED          = 1
    SERVICE_START_PENDING    = 2
    SERVICE_STOP_PENDING     = 3
    SERVICE_RUNNING          = 4
    SERVICE_CONTINUE_PENDING = 5
    SERVICE_PAUSE_PENDING    = 6
    SERVICE_PAUSED           = 7
    SERVICE_NO_CHANGE        = 0xffffffff

    SERVICE_ACCEPT_STOP                  = 1
    SERVICE_ACCEPT_PAUSE_CONTINUE        = 2
    SERVICE_ACCEPT_SHUTDOWN              = 4
    SERVICE_ACCEPT_PARAMCHANGE           = 8
    SERVICE_ACCEPT_NETBINDCHANGE         = 16
    SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 32
    SERVICE_ACCEPT_POWEREVENT            = 64
    SERVICE_ACCEPT_SESSIONCHANGE         = 128

    SERVICE_CONTROL_STOP                  = 1
    SERVICE_CONTROL_PAUSE                 = 2
    SERVICE_CONTROL_CONTINUE              = 3
    SERVICE_CONTROL_INTERROGATE           = 4
    SERVICE_CONTROL_SHUTDOWN              = 5
    SERVICE_CONTROL_PARAMCHANGE           = 6
    SERVICE_CONTROL_NETBINDADD            = 7
    SERVICE_CONTROL_NETBINDREMOVE         = 8
    SERVICE_CONTROL_NETBINDENABLE         = 9
    SERVICE_CONTROL_NETBINDDISABLE        = 10
    SERVICE_CONTROL_DEVICEEVENT           = 11
    SERVICE_CONTROL_HARDWAREPROFILECHANGE = 12
    SERVICE_CONTROL_POWEREVENT            = 13
    SERVICE_CONTROL_SESSIONCHANGE         = 14

    SERVICE_ACTIVE    = 1
    SERVICE_INACTIVE  = 2
    SERVICE_STATE_ALL = 3

    SERVICE_QUERY_CONFIG           = 1
    SERVICE_CHANGE_CONFIG          = 2
    SERVICE_QUERY_STATUS           = 4
    SERVICE_ENUMERATE_DEPENDENTS   = 8
    SERVICE_START                  = 16
    SERVICE_STOP                   = 32
    SERVICE_PAUSE_CONTINUE         = 64
    SERVICE_INTERROGATE            = 128
    SERVICE_USER_DEFINED_CONTROL   = 256
    SERVICE_ALL_ACCESS             = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL
    SERVICE_RUNS_IN_SYSTEM_PROCESS = 1
    SERVICE_CONFIG_DESCRIPTION     = 1
    SERVICE_CONFIG_FAILURE_ACTIONS = 2

    NO_ERROR = 0

    SC_ENUM_PROCESS_INFO = 0
)

type SERVICE_STATUS struct {
    ServiceType             uint32
    CurrentState            uint32
    ControlsAccepted        uint32
    Win32ExitCode           uint32
    ServiceSpecificExitCode uint32
    CheckPoint              uint32
    WaitHint                uint32
}

type SERVICE_TABLE_ENTRY struct {
    ServiceName *uint16
    ServiceProc uintptr
}

type QUERY_SERVICE_CONFIG struct {
    ServiceType      uint32
    StartType        uint32
    ErrorControl     uint32
    BinaryPathName   *uint16
    LoadOrderGroup   *uint16
    TagId            uint32
    Dependencies     *uint16
    ServiceStartName *uint16
    DisplayName      *uint16
}

type SERVICE_DESCRIPTION struct {
    Description *uint16
}

type SERVICE_STATUS_PROCESS struct {
    ServiceType             uint32
    CurrentState            uint32
    ControlsAccepted        uint32
    Win32ExitCode           uint32
    ServiceSpecificExitCode uint32
    CheckPoint              uint32
    WaitHint                uint32
    ProcessId               uint32
    ServiceFlags            uint32
}

type ENUM_SERVICE_STATUS_PROCESS struct {
    ServiceName          *uint16
    DisplayName          *uint16
    ServiceStatusProcess SERVICE_STATUS_PROCESS
}

type SERVICE_FAILURE_ACTIONS struct {
    ResetPeriod  uint32
    RebootMsg    *uint16
    Command      *uint16
    ActionsCount uint32
    Actions      *SC_ACTION
}

type SC_ACTION struct {
    Type  uint32
    Delay uint32
}

//sys   CloseServiceHandle(handle Handle) (err error) = advapi32.CloseServiceHandle
//sys   CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) [failretval==0] = advapi32.CreateServiceW
//sys   OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenServiceW
//sys   DeleteService(service Handle) (err error) = advapi32.DeleteService
//sys   StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) = advapi32.StartServiceW
//sys   QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) = advapi32.QueryServiceStatus
//sys   ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) = advapi32.ControlService
//sys   StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) = advapi32.StartServiceCtrlDispatcherW
//sys   SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) = advapi32.SetServiceStatus
//sys   ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) = advapi32.ChangeServiceConfigW
//sys   QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfigW
//sys   ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) = advapi32.ChangeServiceConfig2W
//sys   QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfig2W
//sys   EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) = advapi32.EnumServicesStatusExW
//sys   QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceStatusEx