2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS net command
4 * FILE: base/applications/network/net/cmdStart.c
7 * PROGRAMMERS: Magnus Olsen (greatlord@reactos.org)
12 /* Enumerate all running services */
15 EnumerateRunningServices(VOID
)
17 SC_HANDLE hManager
= NULL
;
18 SC_HANDLE hService
= NULL
;
19 DWORD dwBufferSize
= 0;
21 DWORD dwResumeHandle
= 0;
22 LPENUM_SERVICE_STATUS lpServiceBuffer
= NULL
;
25 DWORD dwError
= ERROR_SUCCESS
;
27 hManager
= OpenSCManagerW(NULL
,
28 SERVICES_ACTIVE_DATABASE
,
29 SC_MANAGER_ENUMERATE_SERVICE
);
32 dwError
= GetLastError();
37 EnumServicesStatusW(hManager
,
46 if (dwBufferSize
!= 0)
48 lpServiceBuffer
= HeapAlloc(GetProcessHeap(), 0, dwBufferSize
);
49 if (lpServiceBuffer
!= NULL
)
51 if (EnumServicesStatusW(hManager
,
60 PrintToConsole(L
"The following services hav been started:\n\n");
62 for (i
= 0; i
< dwServiceCount
; i
++)
64 PrintToConsole(L
" %s\n", lpServiceBuffer
[i
].lpDisplayName
);
68 HeapFree(GetProcessHeap(), 0, lpServiceBuffer
);
74 CloseServiceHandle(hService
);
77 CloseServiceHandle(hManager
);
79 if (dwError
!= ERROR_SUCCESS
)
81 /* FIXME: Print proper error message */
82 printf("Error: %lu\n", dwError
);
88 /* Start the service argv[2] */
91 StartOneService(INT argc
, WCHAR
**argv
)
93 SC_HANDLE hManager
= NULL
;
94 SC_HANDLE hService
= NULL
;
95 LPCWSTR
*lpArgVectors
= NULL
;
96 DWORD dwError
= ERROR_SUCCESS
;
100 hManager
= OpenSCManagerW(NULL
,
101 SERVICES_ACTIVE_DATABASE
,
102 SC_MANAGER_ENUMERATE_SERVICE
);
103 if (hManager
== NULL
)
105 dwError
= GetLastError();
110 hService
= OpenServiceW(hManager
,
113 if (hService
== NULL
)
115 dwError
= GetLastError();
120 lpArgVectors
= HeapAlloc(GetProcessHeap(),
122 (argc
- 2) * sizeof(LPCWSTR
));
123 if (lpArgVectors
== NULL
)
125 dwError
= GetLastError();
130 for (i
= 2; i
< argc
; i
++)
132 lpArgVectors
[i
- 2] = argv
[i
];
135 if (!StartServiceW(hService
,
139 dwError
= GetLastError();
144 if (lpArgVectors
!= NULL
)
145 HeapFree(GetProcessHeap(), 0, (LPVOID
)lpArgVectors
);
147 if (hService
!= NULL
)
148 CloseServiceHandle(hService
);
150 if (hManager
!= NULL
)
151 CloseServiceHandle(hManager
);
153 if (dwError
!= ERROR_SUCCESS
)
155 /* FIXME: Print proper error message */
156 printf("Error: %lu\n", dwError
);
163 cmdStart(INT argc
, WCHAR
**argv
)
169 return EnumerateRunningServices();
172 for (i
= 2; i
< argc
; i
++)
174 if (_wcsicmp(argv
[i
], L
"/help") == 0)
176 PrintResourceString(IDS_START_HELP
);
181 return StartOneService(argc
, argv
);