xref: /reactos/base/applications/sc/usage.c (revision a0d412b7)
1 /*
2  * PROJECT:     ReactOS Services
3  * LICENSE:     GPL - See COPYING in the top level directory
4  * FILE:        base/applications/sc/usage.c
5  * PURPOSE:     display usage info
6  * COPYRIGHT:   Copyright 2005 - 2006 Ged Murphy <gedmurphy@gmail.com>
7  *
8  */
9 
10 #include "sc.h"
11 
12 #include <conio.h>
13 
MainUsage(VOID)14 VOID MainUsage(VOID)
15 {
16     INT c;
17 
18     _tprintf(_T("DESCRIPTION:\n")
19     _T("\tSC is a command line program used for communicating with\n")
20     _T("\tthe Service Control Manager and its services.\n")
21     _T("USAGE:\n")
22     _T("\tsc <server> [command] [service name] <option1> <option2>...\n")
23 
24     _T("\tThe optional parameter <server> has the form \"\\ServerName\"\n")
25     _T("\tFurther help on commands can be obtained by typing: \"sc [command]\"\n")
26     _T("\tService Commands:\n")
27     _T("\t  query          : Queries the status for a service, or\n")
28     _T("\t                   enumerates the status for types of services.\n")
29     _T("\t  queryex        : Queries the extended status for a service, or\n")
30     _T("\t                   enumerates the status for types of services.\n")
31     _T("\t  start          : Starts a service.\n")
32     _T("\t  pause          : Sends a PAUSE control request to a service.\n")
33     _T("\t  interrogate    : Sends a INTERROGATE control request to a service.\n")
34     _T("\t  continue       : Sends a CONTINUE control request to a service.\n")
35     _T("\t  stop           : Sends a STOP request to a service.\n")
36     _T("\t  config         : Changes the configuration of a service (persistent).\n")
37     _T("\t  description    : Changes the description of a service.\n")
38     _T("\t  failure        : Changes the actions taken by a service upon failure.\n")
39     _T("\t  qc             : Queries the configuration information for a service.\n")
40     _T("\t  qdescription   : Queries the description for a service.\n")
41     _T("\t  qfailure       : Queries the actions taken by a service upon failure.\n")
42     _T("\t  delete         : Deletes a service (from the registry).\n")
43     _T("\t  create         : Creates a service (adds it to the registry).\n")
44     _T("\t  control        : Sends a control to a service.\n")
45     _T("\t  sdshow         : Displays a service's security descriptor.\n")
46     _T("\t  sdset          : Sets a service's security descriptor.\n")
47     _T("\t  GetDisplayName : Gets the DisplayName for a service.\n")
48     _T("\t  GetKeyName     : Gets the ServiceKeyName for a service.\n")
49     _T("\t  EnumDepend     : Enumerates Service Dependencies.\n"));
50 //    "\n")
51 //    "\tService Name Independent Commands:\n")
52 //    "\t  boot           : (ok | bad) Indicates whether the last boot should\n")
53 //    "\t                   be saved as the last-known-good boot configuration\n")
54 //    "\t  Lock           : Locks the SCM Database\n")
55 //    "\t  QueryLock      : Queries the LockStatus for the SCM Database\n")
56 
57     _tprintf(_T("\nWould you like to see help for the QUERY and QUERYEX commands? [ y | n ]: "));
58     c = _getch(); // _gettch isn't defined in our tchar.h
59     _tprintf(_T("%c\n"), c);
60     if (tolower(c) == 'y')
61     {
62         _tprintf(_T("QUERY and QUERYEX OPTIONS :\n")
63         _T("        If the query command is followed by a service name, the status\n")
64         _T("        for that service is returned.  Further options do not apply in\n")
65         _T("        this case.  If the query command is followed by nothing or one of\n")
66         _T("        the options listed below, the services are enumerated.\n")
67         _T("    type=    Type of services to enumerate (driver, service, interact, all)\n")
68         _T("             (default = service)\n")
69         _T("    state=   State of services to enumerate (active, all, inactive)\n")
70         _T("             (default = active)\n")
71         _T("    bufsize= The size (in bytes) of the enumeration buffer\n")
72         _T("             (default = 4096)\n")
73         _T("    ri=      The resume index number at which to begin the enumeration\n")
74         _T("             (default = 0)\n")
75         _T("    group=   Service group to enumerate\n")
76         _T("             (default = all groups)\n")
77         _T("SYNTAX EXAMPLES\n")
78         _T("sc query                - Enumerates status for active services & drivers\n")
79         _T("sc query messenger      - Displays status for the messenger service\n")
80         _T("sc queryex messenger    - Displays extended status for the messenger service\n")
81         _T("sc query type= driver   - Enumerates only active drivers\n")
82         _T("sc query type= service  - Enumerates only Win32 services\n")
83         _T("sc query state= all     - Enumerates all services & drivers\n")
84         _T("sc query bufsize= 50    - Enumerates with a 50 byte buffer.\n")
85         _T("sc query ri= 14         - Enumerates with resume index = 14\n")
86         _T("sc queryex group= \"\"    - Enumerates active services not in a group\n")
87         _T("sc query type= service type= interact - Enumerates all interactive services\n")
88         _T("sc query type= driver group= NDIS     - Enumerates all NDIS drivers\n"));
89     }
90 }
91 
92 
StartUsage(VOID)93 VOID StartUsage(VOID)
94 {
95     _tprintf(_T("DESCRIPTION:\n")
96                 _T("        Starts a service running.\n")
97                 _T("USAGE:\n")
98                 _T("        sc <server> start [service name] <arg1> <arg2> ...\n"));
99 }
100 
101 
PauseUsage(VOID)102 VOID PauseUsage(VOID)
103 {
104     _tprintf(_T("DESCRIPTION:\n")
105                 _T("        Sends a PAUSE control request to a service.\n")
106                 _T("USAGE:\n")
107                 _T("        sc <server> pause [service name]\n"));
108 }
109 
InterrogateUsage(VOID)110 VOID InterrogateUsage(VOID)
111 {
112     _tprintf(_T("DESCRIPTION:\n")
113                 _T("        Sends an INTERROGATE control request to a service.\n")
114                 _T("USAGE:\n")
115                 _T("        sc <server> interrogate [service name]\n"));
116 }
117 
118 
StopUsage(VOID)119 VOID StopUsage(VOID)
120 {
121     _tprintf(_T("DESCRIPTION:\n")
122                 _T("        Sends a STOP control request to a service.\n")
123                 _T("USAGE:\n")
124                 _T("        sc <server> stop [service name]\n"));
125 }
126 
ContinueUsage(VOID)127 VOID ContinueUsage(VOID)
128 {
129     _tprintf(_T("DESCRIPTION:\n")
130                 _T("        Sends a CONTINUE control request to a service.\n")
131                 _T("USAGE:\n")
132                 _T("        sc <server> continue [service name]\n"));
133 }
134 
DeleteUsage(VOID)135 VOID DeleteUsage(VOID)
136 {
137     _tprintf(_T("DESCRIPTION:\n")
138                 _T("        Deletes a service entry from the registry.\n")
139                 _T("        If the service is running, or another process has an\n")
140                 _T("        open handle to the service, the service is simply marked\n")
141                 _T("        for deletion.\n")
142                 _T("USAGE:\n")
143                 _T("        sc <server> delete [service name]\n"));
144 }
145 
CreateUsage(VOID)146 VOID CreateUsage(VOID)
147 {
148     _tprintf(_T("Creates a service entry in the registry and Service Database.\n")
149                 _T("SYNTAX:\n")
150                 _T("sc create [service name] [binPath= ] <option1> <option2>...\n")
151                 _T("CREATE OPTIONS:\n")
152                 _T("NOTE: The option name includes the equal sign.\n")
153                 _T(" type= <own|share|interact|kernel|filesys|rec>\n")
154                 _T("       (default = own)\n")
155                 _T(" start= <boot|system|auto|demand|disabled>\n")
156                 _T("       (default = demand)\n")
157                 _T(" error= <normal|severe|critical|ignore>\n")
158                 _T("       (default = normal)\n")
159                 _T(" binPath= <BinaryPathName>\n")
160                 _T(" group= <LoadOrderGroup>\n")
161                 _T(" tag= <yes|no>\n")
162                 _T(" depend= <Dependencies(separated by / (forward slash))>\n")
163                 _T(" obj= <AccountName|ObjectName>\n")
164                 _T("       (default = LocalSystem)\n")
165                 _T(" DisplayName= <display name>\n")
166                 _T(" password= <password>\n"));
167 }
168 
ControlUsage(VOID)169 VOID ControlUsage(VOID)
170 {
171     _tprintf(_T("DESCRIPTION:\n")
172              _T("        Sends a CONTROL code to a service.\n")
173              _T("USAGE:\n")
174              _T("        sc <server> control [service name] <value>\n")
175              _T("            <value> = user-defined control code\n")
176              _T("            <value> = <paramchange|\n")
177              _T("                       netbindadd|netbindremove|\n")
178              _T("                       netbindenable|netbinddisable>\n"));
179 }
180 
SdShowUsage(VOID)181 VOID SdShowUsage(VOID)
182 {
183     _tprintf(_T("DESCRIPTION:\n")
184              _T("        Displays a service's security descriptor in SDDL format.\n")
185              _T("USAGE:\n")
186              _T("        sc <server> sdshow <service name>\n"));
187 }
188 
SdSetUsage(VOID)189 VOID SdSetUsage(VOID)
190 {
191     _tprintf(_T("DESCRIPTION:\n")
192              _T("        Sets a service's security descriptor.\n")
193              _T("USAGE:\n")
194              _T("        sc <server> sdset <service name> <SD in SDDL format>\n"));
195 }
196 
QueryConfigUsage(VOID)197 VOID QueryConfigUsage(VOID)
198 {
199     _tprintf(_T("DESCRIPTION:\n")
200              _T("        Queries the configuration information for a service.\n")
201              _T("USAGE:\n")
202              _T("        sc <server> qc [service name] <bufferSize>\n"));
203 }
204 
QueryDescriptionUsage(VOID)205 VOID QueryDescriptionUsage(VOID)
206 {
207     _tprintf(_T("DESCRIPTION:\n")
208              _T("        Retrieves the description string of a service.\n")
209              _T("USAGE:\n")
210              _T("        sc <server> qdescription [service name] <bufferSize>\n"));
211 }
212 
QueryFailureUsage(VOID)213 VOID QueryFailureUsage(VOID)
214 {
215     _tprintf(_T("DESCRIPTION:\n")
216              _T("        Retrieves the actions performed on service failure.\n")
217              _T("USAGE:\n")
218              _T("        sc <server> qfailure [service name] <bufferSize>\n"));
219 }
220 
SetDescriptionUsage(VOID)221 VOID SetDescriptionUsage(VOID)
222 {
223     _tprintf(_T("DESCRIPTION:\n")
224              _T("        Sets the description string of a service.\n")
225              _T("USAGE:\n")
226              _T("        sc <server> description [service name] [description]\n"));
227 }
228 
SetConfigUsage(VOID)229 VOID SetConfigUsage(VOID)
230 {
231     _tprintf(_T("DESCRIPTION:\n")
232              _T("        Modifies a service entry in the registry and Service Database.\n")
233              _T("USAGE:\n")
234              _T("        sc <server> config [service name] <option1> <option2>...\n")
235              _T("CONFIG OPTIONS:\n")
236              _T("        NOTE: The option name includes the equal sign.\n")
237              _T("        type= <own|share|interact|kernel|filesys|rec>\n")
238              _T("        start= <boot|system|auto|demand|disabled>\n")
239              _T("        error= <normal|severe|critical|ignore>\n")
240              _T("        binPath= <BinaryPathName>\n")
241              _T("        group= <LoadOrderGroup>\n")
242              _T("        tag= <yes|no>\n")
243              _T("        depend= <Dependencies(separated by / (forward slash))>\n")
244              _T("        obj= <AccountName|ObjectName>\n")
245              _T("        DisplayName= <display name>\n")
246              _T("        password= <password>\n"));
247 }
248 
SetFailureUsage(VOID)249 VOID SetFailureUsage(VOID)
250 {
251     _tprintf(_T("DESCRIPTION:\n")
252              _T("        Changes the actions upon failure.\n")
253              _T("USAGE:\n")
254              _T("        sc <server> failure [service name] <option1> <option2>...\n")
255              _T("\n")
256              _T("OPTIONS:\n")
257              _T("        reset= <Length of period of no failures (in seconds)\n")
258              _T("                after which to reset the failure count to 0 (may be INFINITE)>\n")
259              _T("               (Must be used in conjunction with actions= )\n")
260              _T("        reboot= <Message broadcast before rebooting on failure>\n")
261              _T("        command= <Command line to be run on failure>\n")
262              _T("        actions= <Failure actions and their delay time (in milliseconds),\n")
263              _T("                  separated by / (forward slash) -- e.g., run/5000/reboot/800\n")
264              _T("                  Valid actions are <run|restart|reboot> >\n")
265              _T("                 (Must be used in conjunction with the reset= option)\n"));
266 }
267 
GetDisplayNameUsage(VOID)268 VOID GetDisplayNameUsage(VOID)
269 {
270     _tprintf(_T("DESCRIPTION:\n")
271              _T("        Gets the display name associated with a particular service.\n")
272              _T("USAGE:\n")
273              _T("        sc <server> GetDisplayName <service key name> <bufsize>\n"));
274 }
275 
GetKeyNameUsage(VOID)276 VOID GetKeyNameUsage(VOID)
277 {
278     _tprintf(_T("DESCRIPTION:\n")
279              _T("        Gets the key name associated with a particular service, using the\n")
280              _T("        display name as input.\n")
281              _T("USAGE:\n")
282              _T("        sc <server> GetKeyName <service display name> <bufsize>\n"));
283 }
284 
EnumDependUsage(VOID)285 VOID EnumDependUsage(VOID)
286 {
287     _tprintf(_T("DESCRIPTION:\n")
288              _T("        Enumerates te Services that are dependent on this one.\n")
289              _T("USAGE:\n")
290              _T("        sc <server> EnumDepend <service display name> <bufsize>\n"));
291 }
292