-
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS net command
#include "net.h"
-INT cmdStop(INT argc, CHAR **argv )
+INT cmdStop(INT argc, WCHAR **argv)
{
- char *string;
- long size = 100*sizeof(char);
-
- if (argc>4)
- {
- help();
- return 0;
- }
-
- if (argc==2)
- {
- string = (char *) malloc(size);
- if (string != NULL)
- {
- sprintf(string,"rpcclient -c \"service enum\"");
- system(string);
- free(string);
- }
- return 0;
- }
-
- if (argc==3)
- {
- stop_service(argv[1]);
- return 0;
- }
-
- return 0;
+ SC_HANDLE hManager = NULL;
+ SC_HANDLE hService = NULL;
+ SERVICE_STATUS ServiceStatus;
+ DWORD dwError = ERROR_SUCCESS;
+ INT nError = 0;
+
+ if (argc != 3)
+ {
+ /* FIXME: Print usage message! */
+ printf("Usage: NET STOP <Service name>\n");
+ return 1;
+ }
+
+ hManager = OpenSCManagerW(NULL,
+ SERVICES_ACTIVE_DATABASE,
+ SC_MANAGER_ENUMERATE_SERVICE);
+ if (hManager == NULL)
+ {
+printf("1\n");
+ dwError = GetLastError();
+ nError = 1;
+ goto done;
+ }
+
+ hService = OpenServiceW(hManager,
+ argv[2],
+ SERVICE_STOP);
+ if (hService == NULL)
+ {
+printf("2\n");
+ dwError = GetLastError();
+ nError = 1;
+ goto done;
+ }
+
+ if (!ControlService(hService, SERVICE_CONTROL_STOP, &ServiceStatus))
+ {
+printf("3\n");
+ dwError = GetLastError();
+ nError = 1;
+ goto done;
+ }
+
+done:
+ if (hService != NULL)
+ CloseServiceHandle(hService);
+
+ if (hManager != NULL)
+ CloseServiceHandle(hManager);
+
+ if (dwError != ERROR_SUCCESS)
+ {
+ /* FIXME: Print proper error message */
+ printf("Error: %lu\n", dwError);
+ }
+
+ return nError;
}
-INT stop_service(CHAR *service)
-{
-
- CHAR *srvlst;
- LONG pos=0;
- LONG old_pos=0;
- LONG row_size=0;
- LONG size=0;
-
- CHAR *row; /* we assume display name can max be 20 row and each row is 80 char */
-
-
- /* Get the size for srvlst */
- myCreateProcessStartGetSzie("rpcclient -c \"service enum\"", &size);
- if (size==0)
- {
- return 0;
- }
-
- srvlst = (CHAR *) malloc(size);
- if (srvlst == NULL)
- {
- return 0;
- }
- /* Get the server list */
- myCreateProcessStart("rpcclient -c \"service enum\"", srvlst, size);
-
-
- /* scan after display name */
- while (pos<size)
- {
- old_pos = pos;
-
- if (1 == row_scanner_service(srvlst, &pos, size, service, NULL))
- {
- row_size = (pos - old_pos)+32; /* 32 buffer for command */
- pos = old_pos;
- row = (CHAR *) malloc(row_size*sizeof(CHAR));
- if (row == NULL)
- {
- free(srvlst);
- return 0;
- }
- memset(row,0,row_size*sizeof(CHAR));
- if (1 == row_scanner_service(srvlst, &pos, size, service, &row[27]))
- {
- /*
- display name found
- now we can start the service
- */
-
- memcpy(row,"rpcclient -c \"service stop %s\"\"",27*sizeof(CHAR));
- row_size = strlen(row);
- row[row_size] = '\"';
- system(row);
- }
- free(row);
- }
- }
-
- free(srvlst);
- return 0;
-}