Reactos
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS net command
4 * FILE: base/applications/network/net/cmdStop.c
5 * PURPOSE:
6 *
7 * PROGRAMMERS: Magnus Olsen (greatlord@reactos.org)
8 */
9
10#include "net.h"
11
12INT cmdStop(INT argc, WCHAR **argv)
13{
14 SC_HANDLE hManager = NULL;
15 SC_HANDLE hService = NULL;
16 SERVICE_STATUS ServiceStatus;
17 DWORD dwError = ERROR_SUCCESS;
18 INT nError = 0;
19 INT i;
20
21 if (argc != 3)
22 {
23 PrintMessageString(4381);
24 ConPuts(StdOut, L"\n");
25 PrintNetMessage(MSG_STOP_SYNTAX);
26 return 1;
27 }
28
29 for (i = 2; i < argc; i++)
30 {
31 if (_wcsicmp(argv[i], L"/help") == 0)
32 {
33 PrintMessageString(4381);
34 ConPuts(StdOut, L"\n");
35 PrintNetMessage(MSG_STOP_SYNTAX);
36 PrintNetMessage(MSG_STOP_HELP);
37 return 1;
38 }
39 }
40
41 hManager = OpenSCManagerW(NULL,
42 SERVICES_ACTIVE_DATABASE,
43 SC_MANAGER_ENUMERATE_SERVICE);
44 if (hManager == NULL)
45 {
46 dwError = GetLastError();
47 nError = 1;
48 goto done;
49 }
50
51 hService = OpenServiceW(hManager,
52 argv[2],
53 SERVICE_STOP);
54 if (hService == NULL)
55 {
56 dwError = GetLastError();
57 nError = 1;
58 goto done;
59 }
60
61 if (!ControlService(hService, SERVICE_CONTROL_STOP, &ServiceStatus))
62 {
63 dwError = GetLastError();
64 nError = 1;
65 goto done;
66 }
67
68done:
69 if (hService != NULL)
70 CloseServiceHandle(hService);
71
72 if (hManager != NULL)
73 CloseServiceHandle(hManager);
74
75 if (dwError != ERROR_SUCCESS)
76 {
77 /* FIXME: Print proper error message */
78 ConPrintf(StdErr, L"Error: %lu\n", dwError);
79 }
80
81 return nError;
82}