1use shared::minwindef::{BOOL, DWORD, LPBYTE, LPDWORD, LPVOID};
8use um::winnt::{
9 HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PSECURITY_DESCRIPTOR, PVOID,
10 SECURITY_INFORMATION, STANDARD_RIGHTS_REQUIRED
11};
12pub const SERVICE_NO_CHANGE: DWORD = 0xffffffff;
13pub const SERVICE_ACTIVE: DWORD = 0x00000001;
14pub const SERVICE_INACTIVE: DWORD = 0x00000002;
15pub const SERVICE_STATE_ALL: DWORD = SERVICE_ACTIVE | SERVICE_INACTIVE;
16pub const SERVICE_CONTROL_STOP: DWORD = 0x00000001;
17pub const SERVICE_CONTROL_PAUSE: DWORD = 0x00000002;
18pub const SERVICE_CONTROL_CONTINUE: DWORD = 0x00000003;
19pub const SERVICE_CONTROL_INTERROGATE: DWORD = 0x00000004;
20pub const SERVICE_CONTROL_SHUTDOWN: DWORD = 0x00000005;
21pub const SERVICE_CONTROL_PARAMCHANGE: DWORD = 0x00000006;
22pub const SERVICE_CONTROL_NETBINDADD: DWORD = 0x00000007;
23pub const SERVICE_CONTROL_NETBINDREMOVE: DWORD = 0x00000008;
24pub const SERVICE_CONTROL_NETBINDENABLE: DWORD = 0x00000009;
25pub const SERVICE_CONTROL_NETBINDDISABLE: DWORD = 0x0000000A;
26pub const SERVICE_CONTROL_DEVICEEVENT: DWORD = 0x0000000B;
27pub const SERVICE_CONTROL_HARDWAREPROFILECHANGE: DWORD = 0x0000000C;
28pub const SERVICE_CONTROL_POWEREVENT: DWORD = 0x0000000D;
29pub const SERVICE_CONTROL_SESSIONCHANGE: DWORD = 0x0000000E;
30pub const SERVICE_CONTROL_PRESHUTDOWN: DWORD = 0x0000000F;
31pub const SERVICE_CONTROL_TIMECHANGE: DWORD = 0x00000010;
32pub const SERVICE_CONTROL_TRIGGEREVENT: DWORD = 0x00000020;
33pub const SERVICE_STOPPED: DWORD = 0x00000001;
34pub const SERVICE_START_PENDING: DWORD = 0x00000002;
35pub const SERVICE_STOP_PENDING: DWORD = 0x00000003;
36pub const SERVICE_RUNNING: DWORD = 0x00000004;
37pub const SERVICE_CONTINUE_PENDING: DWORD = 0x00000005;
38pub const SERVICE_PAUSE_PENDING: DWORD = 0x00000006;
39pub const SERVICE_PAUSED: DWORD = 0x00000007;
40pub const SERVICE_ACCEPT_STOP: DWORD = 0x00000001;
41pub const SERVICE_ACCEPT_PAUSE_CONTINUE: DWORD = 0x00000002;
42pub const SERVICE_ACCEPT_SHUTDOWN: DWORD = 0x00000004;
43pub const SERVICE_ACCEPT_PARAMCHANGE: DWORD = 0x00000008;
44pub const SERVICE_ACCEPT_NETBINDCHANGE: DWORD = 0x00000010;
45pub const SERVICE_ACCEPT_HARDWAREPROFILECHANGE: DWORD = 0x00000020;
46pub const SERVICE_ACCEPT_POWEREVENT: DWORD = 0x00000040;
47pub const SERVICE_ACCEPT_SESSIONCHANGE: DWORD = 0x00000080;
48pub const SERVICE_ACCEPT_PRESHUTDOWN: DWORD = 0x00000100;
49pub const SERVICE_ACCEPT_TIMECHANGE: DWORD = 0x00000200;
50pub const SERVICE_ACCEPT_TRIGGEREVENT: DWORD = 0x00000400;
51pub const SC_MANAGER_CONNECT: DWORD = 0x0001;
53pub const SC_MANAGER_CREATE_SERVICE: DWORD = 0x0002;
54pub const SC_MANAGER_ENUMERATE_SERVICE: DWORD = 0x0004;
55pub const SC_MANAGER_LOCK: DWORD = 0x0008;
56pub const SC_MANAGER_QUERY_LOCK_STATUS: DWORD = 0x0010;
57pub const SC_MANAGER_MODIFY_BOOT_CONFIG: DWORD = 0x0020;
58pub const SC_MANAGER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SC_MANAGER_CONNECT
59 | SC_MANAGER_CREATE_SERVICE | SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_LOCK
60 | SC_MANAGER_QUERY_LOCK_STATUS | SC_MANAGER_MODIFY_BOOT_CONFIG;
61pub const SERVICE_QUERY_CONFIG: DWORD = 0x0001;
62pub const SERVICE_CHANGE_CONFIG: DWORD = 0x0002;
63pub const SERVICE_QUERY_STATUS: DWORD = 0x0004;
64pub const SERVICE_ENUMERATE_DEPENDENTS: DWORD = 0x0008;
65pub const SERVICE_START: DWORD = 0x0010;
66pub const SERVICE_STOP: DWORD = 0x0020;
67pub const SERVICE_PAUSE_CONTINUE: DWORD = 0x0040;
68pub const SERVICE_INTERROGATE: DWORD = 0x0080;
69pub const SERVICE_USER_DEFINED_CONTROL: DWORD = 0x0100;
70pub const SERVICE_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG
71 | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START
72 | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL;
73pub const SERVICE_RUNS_IN_SYSTEM_PROCESS: DWORD = 0x00000001;
74pub const SERVICE_CONFIG_DESCRIPTION: DWORD = 1;
75pub const SERVICE_CONFIG_FAILURE_ACTIONS: DWORD = 2;
76pub const SERVICE_CONFIG_DELAYED_AUTO_START_INFO: DWORD = 3;
77pub const SERVICE_CONFIG_FAILURE_ACTIONS_FLAG: DWORD = 4;
78pub const SERVICE_CONFIG_SERVICE_SID_INFO: DWORD = 5;
79pub const SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO: DWORD = 6;
80pub const SERVICE_CONFIG_PRESHUTDOWN_INFO: DWORD = 7;
81pub const SERVICE_CONFIG_TRIGGER_INFO: DWORD = 8;
82pub const SERVICE_CONFIG_PREFERRED_NODE: DWORD = 9;
83pub const SERVICE_CONFIG_LAUNCH_PROTECTED: DWORD = 12;
84pub const SERVICE_NOTIFY_STATUS_CHANGE_1: DWORD = 1;
85pub const SERVICE_NOTIFY_STATUS_CHANGE_2: DWORD = 2;
86pub const SERVICE_NOTIFY_STATUS_CHANGE: DWORD = SERVICE_NOTIFY_STATUS_CHANGE_2;
87pub const SERVICE_NOTIFY_STOPPED: DWORD = 0x00000001;
88pub const SERVICE_NOTIFY_START_PENDING: DWORD = 0x00000002;
89pub const SERVICE_NOTIFY_STOP_PENDING: DWORD = 0x00000004;
90pub const SERVICE_NOTIFY_RUNNING: DWORD = 0x00000008;
91pub const SERVICE_NOTIFY_CONTINUE_PENDING: DWORD = 0x00000010;
92pub const SERVICE_NOTIFY_PAUSE_PENDING: DWORD = 0x00000020;
93pub const SERVICE_NOTIFY_PAUSED: DWORD = 0x00000040;
94pub const SERVICE_NOTIFY_CREATED: DWORD = 0x00000080;
95pub const SERVICE_NOTIFY_DELETED: DWORD = 0x00000100;
96pub const SERVICE_NOTIFY_DELETE_PENDING: DWORD = 0x00000200;
97pub const SERVICE_STOP_REASON_FLAG_MIN: DWORD = 0x00000000;
98pub const SERVICE_STOP_REASON_FLAG_UNPLANNED: DWORD = 0x10000000;
99pub const SERVICE_STOP_REASON_FLAG_CUSTOM: DWORD = 0x20000000;
100pub const SERVICE_STOP_REASON_FLAG_PLANNED: DWORD = 0x40000000;
101pub const SERVICE_STOP_REASON_FLAG_MAX: DWORD = 0x80000000;
102pub const SERVICE_STOP_REASON_MAJOR_MIN: DWORD = 0x00000000;
103pub const SERVICE_STOP_REASON_MAJOR_OTHER: DWORD = 0x00010000;
104pub const SERVICE_STOP_REASON_MAJOR_HARDWARE: DWORD = 0x00020000;
105pub const SERVICE_STOP_REASON_MAJOR_OPERATINGSYSTEM: DWORD = 0x00030000;
106pub const SERVICE_STOP_REASON_MAJOR_SOFTWARE: DWORD = 0x00040000;
107pub const SERVICE_STOP_REASON_MAJOR_APPLICATION: DWORD = 0x00050000;
108pub const SERVICE_STOP_REASON_MAJOR_NONE: DWORD = 0x00060000;
109pub const SERVICE_STOP_REASON_MAJOR_MAX: DWORD = 0x00070000;
110pub const SERVICE_STOP_REASON_MAJOR_MIN_CUSTOM: DWORD = 0x00400000;
111pub const SERVICE_STOP_REASON_MAJOR_MAX_CUSTOM: DWORD = 0x00ff0000;
112pub const SERVICE_STOP_REASON_MINOR_MIN: DWORD = 0x00000000;
113pub const SERVICE_STOP_REASON_MINOR_OTHER: DWORD = 0x00000001;
114pub const SERVICE_STOP_REASON_MINOR_MAINTENANCE: DWORD = 0x00000002;
115pub const SERVICE_STOP_REASON_MINOR_INSTALLATION: DWORD = 0x00000003;
116pub const SERVICE_STOP_REASON_MINOR_UPGRADE: DWORD = 0x00000004;
117pub const SERVICE_STOP_REASON_MINOR_RECONFIG: DWORD = 0x00000005;
118pub const SERVICE_STOP_REASON_MINOR_HUNG: DWORD = 0x00000006;
119pub const SERVICE_STOP_REASON_MINOR_UNSTABLE: DWORD = 0x00000007;
120pub const SERVICE_STOP_REASON_MINOR_DISK: DWORD = 0x00000008;
121pub const SERVICE_STOP_REASON_MINOR_NETWORKCARD: DWORD = 0x00000009;
122pub const SERVICE_STOP_REASON_MINOR_ENVIRONMENT: DWORD = 0x0000000a;
123pub const SERVICE_STOP_REASON_MINOR_HARDWARE_DRIVER: DWORD = 0x0000000b;
124pub const SERVICE_STOP_REASON_MINOR_OTHERDRIVER: DWORD = 0x0000000c;
125pub const SERVICE_STOP_REASON_MINOR_SERVICEPACK: DWORD = 0x0000000d;
126pub const SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE: DWORD = 0x0000000e;
127pub const SERVICE_STOP_REASON_MINOR_SECURITYFIX: DWORD = 0x0000000f;
128pub const SERVICE_STOP_REASON_MINOR_SECURITY: DWORD = 0x00000010;
129pub const SERVICE_STOP_REASON_MINOR_NETWORK_CONNECTIVITY: DWORD = 0x00000011;
130pub const SERVICE_STOP_REASON_MINOR_WMI: DWORD = 0x00000012;
131pub const SERVICE_STOP_REASON_MINOR_SERVICEPACK_UNINSTALL: DWORD = 0x00000013;
132pub const SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE_UNINSTALL: DWORD = 0x00000014;
133pub const SERVICE_STOP_REASON_MINOR_SECURITYFIX_UNINSTALL: DWORD = 0x00000015;
134pub const SERVICE_STOP_REASON_MINOR_MMC: DWORD = 0x00000016;
135pub const SERVICE_STOP_REASON_MINOR_NONE: DWORD = 0x00000017;
136pub const SERVICE_STOP_REASON_MINOR_MAX: DWORD = 0x00000018;
137pub const SERVICE_STOP_REASON_MINOR_MIN_CUSTOM: DWORD = 0x00000100;
138pub const SERVICE_STOP_REASON_MINOR_MAX_CUSTOM: DWORD = 0x0000FFFF;
139pub const SERVICE_CONTROL_STATUS_REASON_INFO: DWORD = 1;
140pub const SERVICE_SID_TYPE_NONE: DWORD = 0x00000000;
141pub const SERVICE_SID_TYPE_UNRESTRICTED: DWORD = 0x00000001;
142pub const SERVICE_SID_TYPE_RESTRICTED: DWORD = 0x00000002 | SERVICE_SID_TYPE_UNRESTRICTED;
143pub const SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL: DWORD = 1;
144pub const SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY: DWORD = 2;
145pub const SERVICE_TRIGGER_TYPE_DOMAIN_JOIN: DWORD = 3;
146pub const SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT: DWORD = 4;
147pub const SERVICE_TRIGGER_TYPE_GROUP_POLICY: DWORD = 5;
148pub const SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT: DWORD = 6;
149pub const SERVICE_TRIGGER_TYPE_CUSTOM_SYSTEM_STATE_CHANGE: DWORD = 7;
150pub const SERVICE_TRIGGER_TYPE_CUSTOM: DWORD = 20;
151pub const SERVICE_TRIGGER_DATA_TYPE_BINARY: DWORD = 1;
152pub const SERVICE_TRIGGER_DATA_TYPE_STRING: DWORD = 2;
153pub const SERVICE_TRIGGER_DATA_TYPE_LEVEL: DWORD = 3;
154pub const SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ANY: DWORD = 4;
155pub const SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ALL: DWORD = 5;
156pub const SERVICE_START_REASON_DEMAND: DWORD = 0x00000001;
157pub const SERVICE_START_REASON_AUTO: DWORD = 0x00000002;
158pub const SERVICE_START_REASON_TRIGGER: DWORD = 0x00000004;
159pub const SERVICE_START_REASON_RESTART_ON_FAILURE: DWORD = 0x00000008;
160pub const SERVICE_START_REASON_DELAYEDAUTO: DWORD = 0x00000010;
161pub const SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON: DWORD = 1;
162pub const SERVICE_LAUNCH_PROTECTED_NONE: DWORD = 0;
163pub const SERVICE_LAUNCH_PROTECTED_WINDOWS: DWORD = 1;
164pub const SERVICE_LAUNCH_PROTECTED_WINDOWS_LIGHT: DWORD = 2;
165pub const SERVICE_LAUNCH_PROTECTED_ANTIMALWARE_LIGHT: DWORD = 3;
166DEFINE_GUID!{NETWORK_MANAGER_FIRST_IP_ADDRESS_ARRIVAL_GUID,
167 0x4f27f2de, 0x14e2, 0x430b, 0xa5, 0x49, 0x7c, 0xd4, 0x8c, 0xbc, 0x82, 0x45}
168DEFINE_GUID!{NETWORK_MANAGER_LAST_IP_ADDRESS_REMOVAL_GUID,
169 0xcc4ba62a, 0x162e, 0x4648, 0x84, 0x7a, 0xb6, 0xbd, 0xf9, 0x93, 0xe3, 0x35}
170DEFINE_GUID!{DOMAIN_JOIN_GUID,
171 0x1ce20aba, 0x9851, 0x4421, 0x94, 0x30, 0x1d, 0xde, 0xb7, 0x66, 0xe8, 0x09}
172DEFINE_GUID!{DOMAIN_LEAVE_GUID,
173 0xddaf516e, 0x58c2, 0x4866, 0x95, 0x74, 0xc3, 0xb6, 0x15, 0xd4, 0x2e, 0xa1}
174DEFINE_GUID!{FIREWALL_PORT_OPEN_GUID,
175 0xb7569e07, 0x8421, 0x4ee0, 0xad, 0x10, 0x86, 0x91, 0x5a, 0xfd, 0xad, 0x09}
176DEFINE_GUID!{FIREWALL_PORT_CLOSE_GUID,
177 0xa144ed38, 0x8e12, 0x4de4, 0x9d, 0x96, 0xe6, 0x47, 0x40, 0xb1, 0xa5, 0x24}
178DEFINE_GUID!{MACHINE_POLICY_PRESENT_GUID,
179 0x659fcae6, 0x5bdb, 0x4da9, 0xb1, 0xff, 0xca, 0x2a, 0x17, 0x8d, 0x46, 0xe0}
180DEFINE_GUID!{USER_POLICY_PRESENT_GUID,
181 0x54fb46c8, 0xf089, 0x464c, 0xb1, 0xfd, 0x59, 0xd1, 0xb6, 0x2c, 0x3b, 0x50}
182DEFINE_GUID!{RPC_INTERFACE_EVENT_GUID,
183 0xbc90d167, 0x9470, 0x4139, 0xa9, 0xba, 0xbe, 0x0b, 0xbb, 0xf5, 0xb7, 0x4d}
184DEFINE_GUID!{NAMED_PIPE_EVENT_GUID,
185 0x1f81d131, 0x3fac, 0x4537, 0x9e, 0x0c, 0x7e, 0x7b, 0x0c, 0x2f, 0x4b, 0x55}
186DEFINE_GUID!{CUSTOM_SYSTEM_STATE_CHANGE_EVENT_GUID,
187 0x2d7a2816, 0x0c5e, 0x45fc, 0x9c, 0xe7, 0x57, 0x0e, 0x5e, 0xcd, 0xe9, 0xc9}
188ENUM!{enum SC_ACTION_TYPE {
189 SC_ACTION_NONE = 0,
190 SC_ACTION_RESTART = 1,
191 SC_ACTION_REBOOT = 2,
192 SC_ACTION_RUN_COMMAND = 3,
193}}
194STRUCT!{struct SC_ACTION {
195 Type: SC_ACTION_TYPE,
196 Delay: DWORD,
197}}
198pub type LPSC_ACTION = *mut SC_ACTION;
199STRUCT!{struct SERVICE_FAILURE_ACTIONSW {
200 dwResetPeriod: DWORD,
201 lpRebootMsg: LPWSTR,
202 lpCommand: LPWSTR,
203 cActions: DWORD,
204 lpsaActions: LPSC_ACTION,
205}}
206pub type LPSERVICE_FAILURE_ACTIONSW = *mut SERVICE_FAILURE_ACTIONSW;
207STRUCT!{struct SERVICE_DELAYED_AUTO_START_INFO {
208 fDelayedAutostart: BOOL,
209}}
210STRUCT!{struct SERVICE_FAILURE_ACTIONS_FLAG {
211 fFailureActionsOnNonCrashFailures: BOOL,
212}}
213DECLARE_HANDLE!{SC_HANDLE, SC_HANDLE__}
214pub type LPSC_HANDLE = *mut SC_HANDLE;
215DECLARE_HANDLE!{SERVICE_STATUS_HANDLE, SERVICE_STATUS_HANDLE__}
216ENUM!{enum SC_STATUS_TYPE {
217 SC_STATUS_PROCESS_INFO = 0,
218}}
219ENUM!{enum SC_ENUM_TYPE {
220 SC_ENUM_PROCESS_INFO = 0,
221}}
222STRUCT!{struct SERVICE_STATUS {
223 dwServiceType: DWORD,
224 dwCurrentState: DWORD,
225 dwControlsAccepted: DWORD,
226 dwWin32ExitCode: DWORD,
227 dwServiceSpecificExitCode: DWORD,
228 dwCheckPoint: DWORD,
229 dwWaitHint: DWORD,
230}}
231pub type LPSERVICE_STATUS = *mut SERVICE_STATUS;
232STRUCT!{struct SERVICE_STATUS_PROCESS {
233 dwServiceType: DWORD,
234 dwCurrentState: DWORD,
235 dwControlsAccepted: DWORD,
236 dwWin32ExitCode: DWORD,
237 dwServiceSpecificExitCode: DWORD,
238 dwCheckPoint: DWORD,
239 dwWaitHint: DWORD,
240 dwProcessId: DWORD,
241 dwServiceFlags: DWORD,
242}}
243pub type LPSERVICE_STATUS_PROCESS = *mut SERVICE_STATUS_PROCESS;
244STRUCT!{struct ENUM_SERVICE_STATUSA {
245 lpServiceName: LPSTR,
246 lpDisplayName: LPSTR,
247 ServiceStatus: SERVICE_STATUS,
248}}
249pub type LPENUM_SERVICE_STATUSA = *mut ENUM_SERVICE_STATUSA;
250STRUCT!{struct ENUM_SERVICE_STATUSW {
251 lpServiceName: LPWSTR,
252 lpDisplayName: LPWSTR,
253 ServiceStatus: SERVICE_STATUS,
254}}
255pub type LPENUM_SERVICE_STATUSW = *mut ENUM_SERVICE_STATUSW;
256STRUCT!{struct ENUM_SERVICE_STATUS_PROCESSA {
257 lpServiceName: LPSTR,
258 lpDisplayName: LPSTR,
259 ServiceStatusProcess: SERVICE_STATUS_PROCESS,
260}}
261pub type LPENUM_SERVICE_STATUS_PROCESSA = *mut ENUM_SERVICE_STATUS_PROCESSA;
262STRUCT!{struct ENUM_SERVICE_STATUS_PROCESSW {
263 lpServiceName: LPWSTR,
264 lpDisplayName: LPWSTR,
265 ServiceStatusProcess: SERVICE_STATUS_PROCESS,
266}}
267pub type LPENUM_SERVICE_STATUS_PROCESSW = *mut ENUM_SERVICE_STATUS_PROCESSW;
268pub type SC_LOCK = LPVOID;
269STRUCT!{struct QUERY_SERVICE_LOCK_STATUSA {
270 fIsLocked: DWORD,
271 lpLockOwner: LPSTR,
272 dwLockDuration: DWORD,
273}}
274pub type LPQUERY_SERVICE_LOCK_STATUSA = *mut QUERY_SERVICE_LOCK_STATUSA;
275STRUCT!{struct QUERY_SERVICE_LOCK_STATUSW {
276 fIsLocked: DWORD,
277 lpLockOwner: LPWSTR,
278 dwLockDuration: DWORD,
279}}
280pub type LPQUERY_SERVICE_LOCK_STATUSW = *mut QUERY_SERVICE_LOCK_STATUSW;
281STRUCT!{struct QUERY_SERVICE_CONFIGA {
282 dwServiceType: DWORD,
283 dwStartType: DWORD,
284 dwErrorControl: DWORD,
285 lpBinaryPathName: LPSTR,
286 lpLoadOrderGroup: LPSTR,
287 dwTagId: DWORD,
288 lpDependencies: LPSTR,
289 lpServiceStartName: LPSTR,
290 lpDisplayName: LPSTR,
291}}
292pub type LPQUERY_SERVICE_CONFIGA = *mut QUERY_SERVICE_CONFIGA;
293STRUCT!{struct QUERY_SERVICE_CONFIGW {
294 dwServiceType: DWORD,
295 dwStartType: DWORD,
296 dwErrorControl: DWORD,
297 lpBinaryPathName: LPWSTR,
298 lpLoadOrderGroup: LPWSTR,
299 dwTagId: DWORD,
300 lpDependencies: LPWSTR,
301 lpServiceStartName: LPWSTR,
302 lpDisplayName: LPWSTR,
303}}
304pub type LPQUERY_SERVICE_CONFIGW = *mut QUERY_SERVICE_CONFIGW;
305STRUCT!{struct SERVICE_DESCRIPTIONA {
306 lpDescription: LPSTR,
307}}
308pub type LPSERVICE_DESCRIPTIONA = *mut SERVICE_DESCRIPTIONA;
309STRUCT!{struct SERVICE_DESCRIPTIONW {
310 lpDescription: LPWSTR,
311}}
312pub type LPSERVICE_DESCRIPTIONW = *mut SERVICE_DESCRIPTIONW;
313FN!{stdcall LPSERVICE_MAIN_FUNCTIONW(
314 dwNumServicesArgs: DWORD,
315 lpServiceArgVectors: *mut LPWSTR,
316) -> ()}
317FN!{stdcall LPSERVICE_MAIN_FUNCTIONA(
318 dwNumServicesArgs: DWORD,
319 lpServiceArgVectors: *mut LPSTR,
320) -> ()}
321STRUCT!{struct SERVICE_TABLE_ENTRYA {
322 lpServiceName: LPCSTR,
323 lpServiceProc: LPSERVICE_MAIN_FUNCTIONA,
324}}
325pub type LPSERVICE_TABLE_ENTRYA = *mut SERVICE_TABLE_ENTRYA;
326STRUCT!{struct SERVICE_TABLE_ENTRYW {
327 lpServiceName: LPCWSTR,
328 lpServiceProc: LPSERVICE_MAIN_FUNCTIONW,
329}}
330pub type LPSERVICE_TABLE_ENTRYW = *mut SERVICE_TABLE_ENTRYW;
331FN!{stdcall LPHANDLER_FUNCTION(
332 dwControl: DWORD,
333) -> ()}
334FN!{stdcall LPHANDLER_FUNCTION_EX(
335 dwControl: DWORD,
336 dwEventType: DWORD,
337 lpEventData: LPVOID,
338 lpContext: LPVOID,
339) -> DWORD}
340FN!{stdcall PFN_SC_NOTIFY_CALLBACK(
341 pParameter: PVOID,
342) -> ()}
343STRUCT!{struct SERVICE_NOTIFY_1 {
344 dwVersion: DWORD,
345 pfnNotifyCallback: PFN_SC_NOTIFY_CALLBACK,
346 pContext: PVOID,
347 dwNotificationStatus: DWORD,
348 ServiceStatus: SERVICE_STATUS_PROCESS,
349}}
350pub type PSERVICE_NOTIFY_1 = *mut SERVICE_NOTIFY_1;
351STRUCT!{struct SERVICE_NOTIFY_2A {
352 dwVersion: DWORD,
353 pfnNotifyCallback: PFN_SC_NOTIFY_CALLBACK,
354 pContext: PVOID,
355 dwNotificationStatus: DWORD,
356 ServiceStatus: SERVICE_STATUS_PROCESS,
357 dwNotificationTriggered: DWORD,
358 pszServiceNames: LPSTR,
359}}
360pub type PSERVICE_NOTIFY_2A = *mut SERVICE_NOTIFY_2A;
361STRUCT!{struct SERVICE_NOTIFY_2W {
362 dwVersion: DWORD,
363 pfnNotifyCallback: PFN_SC_NOTIFY_CALLBACK,
364 pContext: PVOID,
365 dwNotificationStatus: DWORD,
366 ServiceStatus: SERVICE_STATUS_PROCESS,
367 dwNotificationTriggered: DWORD,
368 pszServiceNames: LPWSTR,
369}}
370pub type PSERVICE_NOTIFY_2W = *mut SERVICE_NOTIFY_2W;
371pub type SERVICE_NOTIFYA = SERVICE_NOTIFY_2A;
372pub type PSERVICE_NOTIFYA = PSERVICE_NOTIFY_2A;
373pub type SERVICE_NOTIFYW = SERVICE_NOTIFY_2W;
374pub type PSERVICE_NOTIFYW = PSERVICE_NOTIFY_2W;
375extern "system" {
376 pub fn ChangeServiceConfigA(
377 hService: SC_HANDLE,
378 dwServiceType: DWORD,
379 dsStartType: DWORD,
380 dwErrorControl: DWORD,
381 lpBinaryPathName: LPCSTR,
382 lpLoadOrderGroup: LPCSTR,
383 lpdwTagId: LPDWORD,
384 lpDependencies: LPCSTR,
385 lpServiceStartName: LPCSTR,
386 lpPassword: LPCSTR,
387 lpDisplayName: LPCSTR,
388 ) -> BOOL;
389 pub fn ChangeServiceConfigW(
390 hService: SC_HANDLE,
391 dwServiceType: DWORD,
392 dsStartType: DWORD,
393 dwErrorControl: DWORD,
394 lpBinaryPathName: LPCWSTR,
395 lpLoadOrderGroup: LPCWSTR,
396 lpdwTagId: LPDWORD,
397 lpDependencies: LPCWSTR,
398 lpServiceStartName: LPCWSTR,
399 lpPassword: LPCWSTR,
400 lpDisplayName: LPCWSTR,
401 ) -> BOOL;
402 pub fn ChangeServiceConfig2A(
403 hService: SC_HANDLE,
404 dwInfoLevel: DWORD,
405 lpInfo: LPVOID,
406 ) -> BOOL;
407 pub fn ChangeServiceConfig2W(
408 hService: SC_HANDLE,
409 dwInfoLevel: DWORD,
410 lpInfo: LPVOID,
411 ) -> BOOL;
412 pub fn CloseServiceHandle(
413 hSCObject: SC_HANDLE,
414 ) -> BOOL;
415 pub fn ControlService(
416 hService: SC_HANDLE,
417 dwControl: DWORD,
418 lpServiceStatus: LPSERVICE_STATUS,
419 ) -> BOOL;
420 pub fn CreateServiceA(
421 hSCManager: SC_HANDLE,
422 lpServiceName: LPCSTR,
423 lpDisplayName: LPCSTR,
424 dwDesiredAccess: DWORD,
425 dwServiceType: DWORD,
426 dwStartType: DWORD,
427 dwErrorControl: DWORD,
428 lpBinaryPathName: LPCSTR,
429 lpLoadOrderGroup: LPCSTR,
430 lpdwTagId: LPDWORD,
431 lpDependencies: LPCSTR,
432 lpServiceStartName: LPCSTR,
433 lpPassword: LPCSTR,
434 ) -> SC_HANDLE;
435 pub fn CreateServiceW(
436 hSCManager: SC_HANDLE,
437 lpServiceName: LPCWSTR,
438 lpDisplayName: LPCWSTR,
439 dwDesiredAccess: DWORD,
440 dwServiceType: DWORD,
441 dwStartType: DWORD,
442 dwErrorControl: DWORD,
443 lpBinaryPathName: LPCWSTR,
444 lpLoadOrderGroup: LPCWSTR,
445 lpdwTagId: LPDWORD,
446 lpDependencies: LPCWSTR,
447 lpServiceStartName: LPCWSTR,
448 lpPassword: LPCWSTR,
449 ) -> SC_HANDLE;
450 pub fn DeleteService(
451 hService: SC_HANDLE,
452 ) -> BOOL;
453 pub fn EnumDependentServicesA(
454 hService: SC_HANDLE,
455 dwServiceState: DWORD,
456 lpServices: LPENUM_SERVICE_STATUSA,
457 cbBufSize: DWORD,
458 pcbBytesNeeded: LPDWORD,
459 lpServicesReturned: LPDWORD,
460 ) -> BOOL;
461 pub fn EnumDependentServicesW(
462 hService: SC_HANDLE,
463 dwServiceState: DWORD,
464 lpServices: LPENUM_SERVICE_STATUSW,
465 cbBufSize: DWORD,
466 pcbBytesNeeded: LPDWORD,
467 lpServicesReturned: LPDWORD,
468 ) -> BOOL;
469 pub fn EnumServicesStatusA(
470 hSCManager: SC_HANDLE,
471 dwServiceType: DWORD,
472 dwServiceState: DWORD,
473 lpServices: LPENUM_SERVICE_STATUSA,
474 cbBufSize: DWORD,
475 pcbBytesNeeded: LPDWORD,
476 lpServicesReturned: LPDWORD,
477 lpResumeHandle: LPDWORD,
478 ) -> BOOL;
479 pub fn EnumServicesStatusW(
480 hSCManager: SC_HANDLE,
481 dwServiceType: DWORD,
482 dwServiceState: DWORD,
483 lpServices: LPENUM_SERVICE_STATUSW,
484 cbBufSize: DWORD,
485 pcbBytesNeeded: LPDWORD,
486 lpServicesReturned: LPDWORD,
487 lpResumeHandle: LPDWORD,
488 ) -> BOOL;
489 pub fn EnumServicesStatusExA(
490 hSCManager: SC_HANDLE,
491 InfoLevel: SC_ENUM_TYPE,
492 dwServiceType: DWORD,
493 dwServiceState: DWORD,
494 lpServices: LPBYTE,
495 cbBufSize: DWORD,
496 pcbBytesNeeded: LPDWORD,
497 lpServicesReturned: LPDWORD,
498 lpResumeHandle: LPDWORD,
499 pszGroupName: LPCSTR,
500 ) -> BOOL;
501 pub fn EnumServicesStatusExW(
502 hSCManager: SC_HANDLE,
503 InfoLevel: SC_ENUM_TYPE,
504 dwServiceType: DWORD,
505 dwServiceState: DWORD,
506 lpServices: LPBYTE,
507 cbBufSize: DWORD,
508 pcbBytesNeeded: LPDWORD,
509 lpServicesReturned: LPDWORD,
510 lpResumeHandle: LPDWORD,
511 pszGroupName: LPCWSTR,
512 ) -> BOOL;
513 pub fn GetServiceKeyNameA(
514 hSCManager: SC_HANDLE,
515 lpDisplayName: LPCSTR,
516 lpServiceName: LPSTR,
517 lpcchBuffer: LPDWORD,
518 ) -> BOOL;
519 pub fn GetServiceKeyNameW(
520 hSCManager: SC_HANDLE,
521 lpDisplayName: LPCWSTR,
522 lpServiceName: LPWSTR,
523 lpcchBuffer: LPDWORD,
524 ) -> BOOL;
525 pub fn GetServiceDisplayNameA(
526 hSCManager: SC_HANDLE,
527 lpServiceName: LPCSTR,
528 lpDisplayName: LPSTR,
529 lpcchBuffer: LPDWORD,
530 ) -> BOOL;
531 pub fn GetServiceDisplayNameW(
532 hSCManager: SC_HANDLE,
533 lpServiceName: LPCWSTR,
534 lpDisplayName: LPWSTR,
535 lpcchBuffer: LPDWORD,
536 ) -> BOOL;
537 pub fn LockServiceDatabase(
538 hSCManager: SC_HANDLE,
539 ) -> SC_LOCK;
540 pub fn NotifyBootConfigStatus(
541 BootAcceptable: BOOL,
542 ) -> BOOL;
543 pub fn OpenSCManagerA(
544 lpMachineName: LPCSTR,
545 lpDatabaseName: LPCSTR,
546 dwDesiredAccess: DWORD,
547 ) -> SC_HANDLE;
548 pub fn OpenSCManagerW(
549 lpMachineName: LPCWSTR,
550 lpDatabaseName: LPCWSTR,
551 dwDesiredAccess: DWORD,
552 ) -> SC_HANDLE;
553 pub fn OpenServiceA(
554 hSCManager: SC_HANDLE,
555 lpServiceName: LPCSTR,
556 dwDesiredAccess: DWORD,
557 ) -> SC_HANDLE;
558 pub fn OpenServiceW(
559 hSCManager: SC_HANDLE,
560 lpServiceName: LPCWSTR,
561 dwDesiredAccess: DWORD,
562 ) -> SC_HANDLE;
563 pub fn QueryServiceConfigA(
564 hService: SC_HANDLE,
565 lpServiceConfig: LPQUERY_SERVICE_CONFIGA,
566 cbBufSize: DWORD,
567 pcbBytesNeeded: LPDWORD,
568 ) -> BOOL;
569 pub fn QueryServiceConfigW(
570 hService: SC_HANDLE,
571 lpServiceConfig: LPQUERY_SERVICE_CONFIGW,
572 cbBufSize: DWORD,
573 pcbBytesNeeded: LPDWORD,
574 ) -> BOOL;
575 pub fn QueryServiceConfig2A(
576 hService: SC_HANDLE,
577 dwInfoLevel: DWORD,
578 lpBuffer: LPBYTE,
579 cbBufSize: DWORD,
580 pcbBytesNeeded: LPDWORD,
581 ) -> BOOL;
582 pub fn QueryServiceConfig2W(
583 hService: SC_HANDLE,
584 dwInfoLevel: DWORD,
585 lpBuffer: LPBYTE,
586 cbBufSize: DWORD,
587 pcbBytesNeeded: LPDWORD,
588 ) -> BOOL;
589 pub fn QueryServiceLockStatusA(
590 hSCManager: SC_HANDLE,
591 lpLockStatus: LPQUERY_SERVICE_LOCK_STATUSA,
592 cbBufSize: DWORD,
593 pcbBytesNeeded: LPDWORD,
594 ) -> BOOL;
595 pub fn QueryServiceLockStatusW(
596 hSCManager: SC_HANDLE,
597 lpLockStatus: LPQUERY_SERVICE_LOCK_STATUSW,
598 cbBufSize: DWORD,
599 pcbBytesNeeded: LPDWORD,
600 ) -> BOOL;
601 pub fn QueryServiceObjectSecurity(
602 hService: SC_HANDLE,
603 dwSecurityInformation: SECURITY_INFORMATION,
604 lpSecurityDescriptor: PSECURITY_DESCRIPTOR,
605 cbBufSize: DWORD,
606 pcbBytesNeeded: LPDWORD,
607 ) -> BOOL;
608 pub fn QueryServiceStatus(
609 hService: SC_HANDLE,
610 lpServiceStatus: LPSERVICE_STATUS,
611 ) -> BOOL;
612 pub fn QueryServiceStatusEx(
613 hService: SC_HANDLE,
614 InfoLevel: SC_STATUS_TYPE,
615 lpBuffer: LPBYTE,
616 cbBufSize: DWORD,
617 pcbBytesNeeded: LPDWORD,
618 ) -> BOOL;
619 pub fn RegisterServiceCtrlHandlerA(
620 lpServiceName: LPCSTR,
621 lpHandlerProc: LPHANDLER_FUNCTION,
622 ) -> SERVICE_STATUS_HANDLE;
623 pub fn RegisterServiceCtrlHandlerW(
624 lpServiceName: LPCWSTR,
625 lpHandlerProc: LPHANDLER_FUNCTION,
626 ) -> SERVICE_STATUS_HANDLE;
627 pub fn RegisterServiceCtrlHandlerExA(
628 lpServiceName: LPCSTR,
629 lpHandlerProc: LPHANDLER_FUNCTION_EX,
630 lpContext: LPVOID,
631 ) -> SERVICE_STATUS_HANDLE;
632 pub fn RegisterServiceCtrlHandlerExW(
633 lpServiceName: LPCWSTR,
634 lpHandlerProc: LPHANDLER_FUNCTION_EX,
635 lpContext: LPVOID,
636 ) -> SERVICE_STATUS_HANDLE;
637 pub fn SetServiceObjectSecurity(
638 hService: SC_HANDLE,
639 dwSecurityInformation: SECURITY_INFORMATION,
640 lpSecurityDescriptor: PSECURITY_DESCRIPTOR,
641 ) -> BOOL;
642 pub fn SetServiceStatus(
643 hServiceStatus: SERVICE_STATUS_HANDLE,
644 lpServiceStatus: LPSERVICE_STATUS,
645 ) -> BOOL;
646 pub fn StartServiceCtrlDispatcherA(
647 lpServiceStartTable: *const SERVICE_TABLE_ENTRYA,
648 ) -> BOOL;
649 pub fn StartServiceCtrlDispatcherW(
650 lpServiceStartTable: *const SERVICE_TABLE_ENTRYW,
651 ) -> BOOL;
652 pub fn StartServiceA(
653 hService: SC_HANDLE,
654 dwNumServiceArgs: DWORD,
655 lpServiceArgVectors: *mut LPCSTR,
656 ) -> BOOL;
657 pub fn StartServiceW(
658 hService: SC_HANDLE,
659 dwNumServiceArgs: DWORD,
660 lpServiceArgVectors: *mut LPCWSTR,
661 ) -> BOOL;
662 pub fn UnlockServiceDatabase(
663 ScLock: SC_LOCK,
664 ) -> BOOL;
665 pub fn NotifyServiceStatusChangeA(
666 hService: SC_HANDLE,
667 dwNotifyMask: DWORD,
668 pNotifyBuffer: PSERVICE_NOTIFYA,
669 ) -> DWORD;
670 pub fn NotifyServiceStatusChangeW(
671 hService: SC_HANDLE,
672 dwNotifyMask: DWORD,
673 pNotifyBuffer: PSERVICE_NOTIFYW,
674 ) -> DWORD;
675 pub fn ControlServiceExA(
676 hService: SC_HANDLE,
677 dwControl: DWORD,
678 dwInfoLevel: DWORD,
679 pControlParams: PVOID,
680 ) -> BOOL;
681 pub fn ControlServiceExW(
682 hService: SC_HANDLE,
683 dwControl: DWORD,
684 dwInfoLevel: DWORD,
685 pControlParams: PVOID,
686 ) -> BOOL;
687 pub fn QueryServiceDynamicInformation(
688 hServiceStatus: SERVICE_STATUS_HANDLE,
689 dwInfoLevel: DWORD,
690 ppDynamicInfo: *mut PVOID,
691 ) -> BOOL;
692 pub fn WaitServiceState (
693 hService: SC_HANDLE,
694 dwNotify: DWORD,
695 dwTimeout: DWORD,
696 hCancelEvent: HANDLE,
697 ) -> DWORD;
698}