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>
15 extern BOOL
RPCSS_Initialize(void);
16 extern BOOL
RPCSS_Shutdown(void);
17 extern HANDLE exit_event
;
19 static VOID WINAPI
ServiceMain(DWORD
, LPWSTR
*);
20 static WCHAR ServiceName
[] = L
"RpcSs";
21 SERVICE_TABLE_ENTRYW ServiceTable
[] =
23 { ServiceName
, ServiceMain
},
27 static SERVICE_STATUS ServiceStatus
;
28 static SERVICE_STATUS_HANDLE ServiceStatusHandle
;
31 ServiceControlHandler(DWORD dwControl
,
38 case SERVICE_CONTROL_SHUTDOWN
:
39 case SERVICE_CONTROL_STOP
:
43 case SERVICE_CONTROL_INTERROGATE
:
47 return ERROR_CALL_NOT_IMPLEMENTED
;
52 ServiceMain(DWORD argc
, LPWSTR argv
[])
56 ServiceStatusHandle
= RegisterServiceCtrlHandlerExW(ServiceName
,
57 ServiceControlHandler
,
59 if (!ServiceStatusHandle
)
61 dwError
= GetLastError();
62 DPRINT1("RegisterServiceCtrlHandlerW() failed! (Error %lu)\n", dwError
);
66 ServiceStatus
.dwServiceType
= SERVICE_WIN32_OWN_PROCESS
;
67 ServiceStatus
.dwCurrentState
= SERVICE_START_PENDING
;
68 ServiceStatus
.dwControlsAccepted
= 0;
69 ServiceStatus
.dwWin32ExitCode
= NO_ERROR
;
70 ServiceStatus
.dwServiceSpecificExitCode
= 0;
71 ServiceStatus
.dwCheckPoint
= 0;
72 ServiceStatus
.dwWaitHint
= 1000;
73 SetServiceStatus(ServiceStatusHandle
, &ServiceStatus
);
75 if (RPCSS_Initialize())
77 ServiceStatus
.dwCurrentState
= SERVICE_RUNNING
;
78 ServiceStatus
.dwControlsAccepted
= SERVICE_ACCEPT_STOP
| SERVICE_ACCEPT_SHUTDOWN
;
79 SetServiceStatus(ServiceStatusHandle
, &ServiceStatus
);
81 WaitForSingleObject(exit_event
, INFINITE
);
83 ServiceStatus
.dwCurrentState
= SERVICE_STOPPED
;
84 SetServiceStatus(ServiceStatusHandle
, &ServiceStatus
);
89 int wmain(int argc
, LPWSTR argv
[])
91 if (!StartServiceCtrlDispatcherW(ServiceTable
))
93 DPRINT1("StartServiceCtrlDispatcherW() failed\n");