2 * PROJECT: ReactOS Services
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/applications/sc/control.c
5 * PURPOSE: Stops, pauses and resumes a service
6 * COPYRIGHT: Copyright 2005 - 2006 Ged Murphy <gedmurphy@gmail.com>
13 Control(DWORD Control
,
18 SC_HANDLE hSCManager
= NULL
;
19 SC_HANDLE hService
= NULL
;
20 SERVICE_STATUS Status
;
21 DWORD dwDesiredAccess
= 0;
23 SERVICE_STATUS_PROCESS StatusEx
;
26 LPCTSTR
*TmpArgs
= Args
;
27 INT TmpCnt
= ArgCount
;
28 _tprintf(_T("service to control - %s\n"), ServiceName
);
29 _tprintf(_T("command - %lu\n"), Control
);
30 _tprintf(_T("Arguments:\n"));
33 _tprintf(_T(" %s\n"), *TmpArgs
);
42 case SERVICE_CONTROL_STOP
:
43 dwDesiredAccess
= SERVICE_STOP
;
46 case SERVICE_CONTROL_PAUSE
:
47 case SERVICE_CONTROL_CONTINUE
:
48 case SERVICE_CONTROL_PARAMCHANGE
:
49 case SERVICE_CONTROL_NETBINDADD
:
50 case SERVICE_CONTROL_NETBINDREMOVE
:
51 case SERVICE_CONTROL_NETBINDENABLE
:
52 case SERVICE_CONTROL_NETBINDDISABLE
:
53 dwDesiredAccess
= SERVICE_PAUSE_CONTINUE
;
56 case SERVICE_CONTROL_INTERROGATE
:
57 dwDesiredAccess
= SERVICE_INTERROGATE
;
61 if (Control
>= 128 && Control
<= 255)
62 dwDesiredAccess
= SERVICE_USER_DEFINED_CONTROL
;
68 hSCManager
= OpenSCManager(NULL
,
71 if (hSCManager
== NULL
)
73 _tprintf(_T("[SC] OpenSCManager FAILED %lu:\n\n"), GetLastError());
78 hService
= OpenService(hSCManager
,
83 _tprintf(_T("[SC] OpenService FAILED %lu:\n\n"), GetLastError());
88 if (!ControlService(hService
,
92 _tprintf(_T("[SC] ControlService FAILED %lu:\n\n"), GetLastError());
97 /* FIXME: lazy hack ;) */
98 CopyMemory(&StatusEx
, &Status
, sizeof(Status
));
99 StatusEx
.dwProcessId
= 0;
100 StatusEx
.dwServiceFlags
= 0;
102 PrintService(ServiceName
,
112 CloseServiceHandle(hService
);
115 CloseServiceHandle(hSCManager
);