winedump: Add preliminary dumping of 0x1136 and 0x1137 symbols.
[wine] / include / wine / svcctl.idl
1 /*
2  * svcctl interface definitions - exported by services.exe to access the
3  * services database
4  *
5  * Copyright 2007 Google (Mikolaj Zalewski)
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21
22 import "wtypes.idl";
23
24 /*
25  * some defined for the C code
26  */
27 cpp_quote("#include \"winsvc.h\"")
28 cpp_quote("#define SVCCTL_TRANSPORT {'n','c','a','c','n','_','n','p',0}")
29 cpp_quote("#define SVCCTL_ENDPOINT {'\\\\','p','i','p','e','\\\\','s','v','c','c','t','l',0}")
30
31 /* Not the Windows event name - if needed the true one can be found in Inside Windows */
32 cpp_quote("#define SVCCTL_STARTED_EVENT {'_','_','w','i','n','e','_','S','v','c','c','t','l','S','t','a','r','t','e','d',0}")
33
34 /* Service startup protocol over control pipe - not compatible with Windows */
35 enum service_pipe_command
36 {
37     WINESERV_STARTINFO = 1,
38     WINESERV_SENDCONTROL = 2
39 };
40
41 typedef struct service_start_info_t
42 {
43     enum service_pipe_command cmd;        /* request code */
44     DWORD                     total_size; /* total request size */
45     DWORD                     name_size;  /* size of name in data buffer */
46     DWORD                     control;    /* control code */
47     WCHAR                     data[1];
48 } service_start_info;
49
50 [
51     uuid(367abb81-9844-35f1-ad32-98f038001003),
52     version(2.0),
53     pointer_default(unique),
54     endpoint("ncacn_np:[\\pipe\\svcctl]")
55 ]
56 interface svcctl
57 {
58     /* handle types */
59     typedef [handle] LPCWSTR MACHINE_HANDLEW;
60     typedef [context_handle] void *SC_RPC_HANDLE;
61     typedef [context_handle] void *SC_RPC_LOCK;
62
63     /* undocumented access rights */
64     cpp_quote("#define SERVICE_SET_STATUS   0x8000")
65
66 cpp_quote("#if 0 /* already defined in winsvc.h */")
67 typedef struct _QUERY_SERVICE_CONFIGW {
68     DWORD   dwServiceType;
69     DWORD   dwStartType;
70     DWORD   dwErrorControl;
71     [unique] LPWSTR  lpBinaryPathName;
72     [unique] LPWSTR  lpLoadOrderGroup;
73     DWORD   dwTagId;
74     [unique] LPWSTR  lpDependencies;
75     [unique] LPWSTR  lpServiceStartName;
76     [unique] LPWSTR  lpDisplayName;
77 } QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
78
79 typedef struct _SERVICE_STATUS {
80   DWORD dwServiceType;
81   DWORD dwCurrentState;
82   DWORD dwControlsAccepted;
83   DWORD dwWin32ExitCode;
84   DWORD dwServiceSpecificExitCode;
85   DWORD dwCheckPoint;
86   DWORD dwWaitHint;
87 } SERVICE_STATUS, *LPSERVICE_STATUS;
88
89 typedef enum _SC_STATUS_TYPE {
90   SC_STATUS_PROCESS_INFO      = 0
91 } SC_STATUS_TYPE;
92 cpp_quote("#endif")
93
94
95     /* Compatible with Windows function 0x00 */
96     DWORD svcctl_CloseServiceHandle(
97         [in,out] SC_RPC_HANDLE *handle
98     );
99
100     /* Compatible with Windows function 0x01 */
101     DWORD svcctl_ControlService(
102         [in] SC_RPC_HANDLE hService,
103         [in] DWORD dwControl,
104         [out] SERVICE_STATUS *lpServiceStatus
105     );
106
107     /* Compatible with Windows function 0x02 */
108     DWORD svcctl_DeleteService(
109         [in] SC_RPC_HANDLE hService
110     );
111
112     /* Compatible with Windows function 0x03 */
113     DWORD svcctl_LockServiceDatabase(
114         [in] SC_RPC_HANDLE hSCManager,
115         [out] SC_RPC_LOCK *phLock
116     );
117
118     /* Not compatible with Windows function 0x04 */
119     DWORD svcctl_QueryServiceObjectSecurity(/* FIXME */);
120
121     /* Not compatible with Windows function 0x05 */
122     DWORD svcctl_SetServiceObjectSecurity(/* FIXME */);
123
124     /* Not compatible with Windows function 0x06 */
125     DWORD svcctl_QueryServiceStatus(/* FIXME */);
126
127     /* Compatible with Windows function 0x07 */
128     DWORD svcctl_SetServiceStatus(
129         [in] SC_RPC_HANDLE hServiceStatus,
130         [in] LPSERVICE_STATUS lpServiceStatus
131     );
132
133     /* Compatible with Windows function 0x08 */
134     DWORD svcctl_UnlockServiceDatabase(
135         [in,out] SC_RPC_LOCK *phLock
136     );
137
138     /* Not compatible with Windows function 0x09 */
139     DWORD svcctl_NotifyBootConfigStatus(/* FIXME */);
140
141     /* Not compatible with Windows function 0x0a */
142     DWORD svcctl_SCSetServiceBitsW(/* FIXME */);
143
144     /* Compatible with Windows function 0x0b */
145     DWORD svcctl_ChangeServiceConfigW(
146         [in] SC_RPC_HANDLE hService,
147         [in] DWORD dwServiceType,
148         [in] DWORD dwStartType,
149         [in] DWORD dwErrorControl,
150         [in,unique] LPCWSTR lpBinaryPathName,
151         [in,unique] LPCWSTR lpLoadOrderGroupKey,
152         [in,out,unique] DWORD *lpdwTagId,
153         [in,unique,size_is(dwDependenciesSize)] const BYTE *lpDependencies,
154         [in] DWORD dwDependenciesSize,
155         [in,unique] LPCWSTR lpServiceStartName,
156         [in,unique,size_is(dwPasswordSize)] const BYTE *lpPassword,
157         [in] DWORD dwPasswordSize,
158         [in,unique] LPCWSTR lpDisplayName
159     );
160
161     /* Compatible with Windows function 0x0c */
162     DWORD svcctl_CreateServiceW(
163         [in] SC_RPC_HANDLE hSCManager,
164         [in] LPCWSTR lpServiceName,
165         [in,unique] LPCWSTR lpDisplayName,
166         [in] DWORD dwDesiredAccess,
167         [in] DWORD dwServiceType,
168         [in] DWORD dwStartType,
169         [in] DWORD dwErrorControl,
170         [in] LPCWSTR lpBinaryPathName,
171         [in,unique] LPCWSTR lpLoadOrderGroup,
172         [in,out,unique] DWORD *lpdwTagId,
173         [in,unique,size_is(dwDependenciesSize)] const BYTE *lpDependencies,
174         [in] DWORD dwDependenciesSize,
175         [in,unique] LPCWSTR lpServiceStartName,
176         [in,unique,size_is(dwPasswordSize)] const BYTE *lpPassword,
177         [in] DWORD dwPasswordSize,
178         [out] SC_RPC_HANDLE *phService
179     );
180
181     /* Not compatible with Windows function 0x0d */
182     DWORD svcctl_EnumDependentServicesW(/* FIXME */);
183
184     /* Not compatible with Windows function 0x0e */
185     DWORD svcctl_EnumServicesStatusW(/* FIXME */);
186
187     /* Compatible with Windows function 0x0f */
188     DWORD svcctl_OpenSCManagerW(
189         [in,unique] MACHINE_HANDLEW MachineName,
190         [in,unique] LPCWSTR DatabaseName,
191         [in] DWORD dwAccessMask,
192         [out] SC_RPC_HANDLE *handle
193     );
194
195     /* Compatible with Windows function 0x10 */
196     DWORD svcctl_OpenServiceW(
197         [in] SC_RPC_HANDLE hSCManager,
198         [in] LPCWSTR lpServiceName,
199         [in] DWORD dwDesiredAccess,
200         [out] SC_RPC_HANDLE *phService
201     );
202
203     /* Windows function 0x11 must be using a different prototype - not compatible */
204     DWORD svcctl_QueryServiceConfigW(
205         [in] SC_RPC_HANDLE hService,
206         [out] QUERY_SERVICE_CONFIGW *config);
207
208     /* Not compatible with Windows function 0x12 */
209     DWORD svcctl_QueryServiceLockStatusW(/* FIXME */);
210
211     /* Untested with Windows function 0x13 */
212     DWORD svcctl_StartServiceW(
213         [in] SC_RPC_HANDLE hService,
214         [in] DWORD dwNumServiceArgs,
215         [in,unique,size_is(dwNumServiceArgs)] LPCWSTR *lpServiceArgVectors
216     );
217
218     /* Compatible with Windows function 0x14 */
219     DWORD svcctl_GetServiceDisplayNameW(
220         [in] SC_RPC_HANDLE hSCManager,
221         [in] LPCWSTR lpServiceName,
222         [out,size_is(cchBufSize)] WCHAR lpBuffer[],
223         [in] DWORD cchBufSize,
224         [out] DWORD *cchLength);
225
226     /* Compatible with Windows function 0x15 */
227     DWORD svcctl_GetServiceKeyNameW(
228         [in] SC_RPC_HANDLE hSCManager,
229         [in] LPCWSTR lpServiceDisplayName,
230         [out,size_is(cchBufSize)] WCHAR lpBuffer[],
231         [in] DWORD cchBufSize,
232         [out] DWORD *cchLength);
233
234     /* Not compatible with Windows function 0x16 */
235     DWORD svcctl_SCSetServiceBitsA(/* FIXME */);
236
237     /* Not compatible with Windows function 0x17 */
238     DWORD svcctl_ChangeServiceConfigA(/* FIXME */);
239
240     /* Not compatible with Windows function 0x18 */
241     DWORD svcctl_CreateServiceA(/* FIXME */);
242
243     /* Not compatible with Windows function 0x19 */
244     DWORD svcctl_EnumDependentServicesA(/* FIXME */);
245
246     /* Not compatible with Windows function 0x1a */
247     DWORD svcctl_EnumServicesStatusA(/* FIXME */);
248
249     /* Not compatible with Windows function 0x1b */
250     DWORD svcctl_OpenSCManagerA(/* FIXME */);
251
252     /* Not compatible with Windows function 0x1c */
253     DWORD svcctl_OpenServiceA(/* FIXME */);
254
255     /* Not compatible with Windows function 0x1d */
256     DWORD svcctl_QueryServiceConfigA(/* FIXME */);
257
258     /* Not compatible with Windows function 0x1e */
259     DWORD svcctl_QueryServiceLockStatusA(/* FIXME */);
260
261     /* Not compatible with Windows function 0x1f */
262     DWORD svcctl_StartServiceA(/* FIXME */);
263
264     /* Not compatible with Windows function 0x20 */
265     DWORD svcctl_GetServiceDisplayNameA(/* FIXME */);
266
267     /* Not compatible with Windows function 0x21 */
268     DWORD svcctl_GetServiceKeyNameA(/* FIXME */);
269
270     /* Not compatible with Windows function 0x22 */
271     DWORD svcctl_GetCurrentGroupStateW(/* FIXME */);
272
273     /* Not compatible with Windows function 0x23 */
274     DWORD svcctl_EnumServiceGroupW(/* FIXME */);
275
276     /* Not compatible with Windows function 0x24 */
277     DWORD svcctl_ChangeServiceConfig2A(/* FIXME */);
278
279     /* Not compatible with Windows function 0x25 */
280     DWORD svcctl_ChangeServiceConfig2W(/* FIXME */);
281
282     /* Not compatible with Windows function 0x26 */
283     DWORD svcctl_QueryServiceConfig2A(/* FIXME */);
284
285     /* Not compatible with Windows function 0x27 */
286     DWORD svcctl_QueryServiceConfig2W(/* FIXME */);
287
288     /* Untested with Windows function 0x28 */
289     DWORD svcctl_QueryServiceStatusEx(
290         [in] SC_RPC_HANDLE hService,
291         [in] SC_STATUS_TYPE InfoLevel,
292         [out,size_is(cbBufSize)] BYTE *lpBuffer,
293         [in] DWORD cbBufSize,
294         [out] LPDWORD pcbBytesNeeded
295     );
296 }