2 * PROJECT: ReactOS Remote Procedure Call service
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: /base/services/rpcss/service_main.c
5 * PURPOSE: Service control code
6 * COPYRIGHT: Copyright 2008 Ged Murphy <gedmurphy@reactos.org>
17 extern BOOL
RPCSS_Initialize(void);
18 extern BOOL
RPCSS_Shutdown(void);
19 extern HANDLE exit_event
;
21 static VOID WINAPI
ServiceMain(DWORD
, LPWSTR
*);
22 static WCHAR ServiceName
[] = L
"RpcSs";
23 SERVICE_TABLE_ENTRYW ServiceTable
[] =
25 { ServiceName
, ServiceMain
},
29 static SERVICE_STATUS ServiceStatus
;
30 static SERVICE_STATUS_HANDLE ServiceStatusHandle
;
33 ServiceControlHandler(DWORD dwControl
,
40 case SERVICE_CONTROL_SHUTDOWN
:
41 case SERVICE_CONTROL_STOP
:
45 case SERVICE_CONTROL_INTERROGATE
:
49 return ERROR_CALL_NOT_IMPLEMENTED
;
54 ServiceMain(DWORD argc
, LPWSTR argv
[])
58 ServiceStatusHandle
= RegisterServiceCtrlHandlerExW(ServiceName
,
59 ServiceControlHandler
,
61 if (!ServiceStatusHandle
)
63 dwError
= GetLastError();
64 DPRINT1("RegisterServiceCtrlHandlerW() failed! (Error %lu)\n", dwError
);
68 ServiceStatus
.dwServiceType
= SERVICE_WIN32_OWN_PROCESS
;
69 ServiceStatus
.dwCurrentState
= SERVICE_START_PENDING
;
70 ServiceStatus
.dwControlsAccepted
= 0;
71 ServiceStatus
.dwWin32ExitCode
= NO_ERROR
;
72 ServiceStatus
.dwServiceSpecificExitCode
= 0;
73 ServiceStatus
.dwCheckPoint
= 0;
74 ServiceStatus
.dwWaitHint
= 1000;
75 SetServiceStatus(ServiceStatusHandle
, &ServiceStatus
);
77 if (RPCSS_Initialize())
79 ServiceStatus
.dwCurrentState
= SERVICE_RUNNING
;
80 ServiceStatus
.dwControlsAccepted
= SERVICE_ACCEPT_STOP
| SERVICE_ACCEPT_SHUTDOWN
;
81 SetServiceStatus(ServiceStatusHandle
, &ServiceStatus
);
83 WaitForSingleObject(exit_event
, INFINITE
);
85 ServiceStatus
.dwCurrentState
= SERVICE_STOPPED
;
86 SetServiceStatus(ServiceStatusHandle
, &ServiceStatus
);
91 int wmain(int argc
, LPWSTR argv
[])
93 if (!StartServiceCtrlDispatcherW(ServiceTable
))
95 DPRINT1("StartServiceCtrlDispatcherW() failed\n");