2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: services/thmsvc/thmsvc.c
5 * PURPOSE: Themes service
6 * PROGRAMMER: Giannis Adamopoulos
9 /* INCLUDES *****************************************************************/
14 #include <wine/debug.h>
16 WINE_DEFAULT_DEBUG_CHANNEL(thmsvc
);
19 /* GLOBALS ******************************************************************/
21 static VOID CALLBACK
ServiceMain(DWORD argc
, LPWSTR
*argv
);
22 static WCHAR ServiceName
[] = L
"Themes";
23 static SERVICE_TABLE_ENTRYW ServiceTable
[] =
25 {ServiceName
, ServiceMain
},
29 SERVICE_STATUS_HANDLE ServiceStatusHandle
;
30 SERVICE_STATUS ServiceStatus
;
33 /* FUNCTIONS *****************************************************************/
36 UpdateServiceStatus(DWORD dwState
)
38 ServiceStatus
.dwServiceType
= SERVICE_WIN32_OWN_PROCESS
;
39 ServiceStatus
.dwCurrentState
= dwState
;
41 if (dwState
== SERVICE_RUNNING
)
42 ServiceStatus
.dwControlsAccepted
= SERVICE_ACCEPT_PAUSE_CONTINUE
| SERVICE_ACCEPT_STOP
| SERVICE_ACCEPT_SHUTDOWN
;
43 else if (dwState
== SERVICE_PAUSED
)
44 ServiceStatus
.dwControlsAccepted
= SERVICE_ACCEPT_PAUSE_CONTINUE
;
46 ServiceStatus
.dwControlsAccepted
= 0;
48 ServiceStatus
.dwWin32ExitCode
= 0;
49 ServiceStatus
.dwServiceSpecificExitCode
= 0;
50 ServiceStatus
.dwCheckPoint
= 0;
52 if (dwState
== SERVICE_START_PENDING
||
53 dwState
== SERVICE_STOP_PENDING
||
54 dwState
== SERVICE_PAUSE_PENDING
||
55 dwState
== SERVICE_CONTINUE_PENDING
)
56 ServiceStatus
.dwWaitHint
= 10000;
58 ServiceStatus
.dwWaitHint
= 0;
60 SetServiceStatus(ServiceStatusHandle
,
66 ServiceControlHandler(DWORD dwControl
,
71 TRACE("ServiceControlHandler() called\n");
75 case SERVICE_CONTROL_STOP
:
76 TRACE(" SERVICE_CONTROL_STOP received\n");
77 UpdateServiceStatus(SERVICE_STOPPED
);
81 case SERVICE_CONTROL_PAUSE
:
82 TRACE(" SERVICE_CONTROL_PAUSE received\n");
83 UpdateServiceStatus(SERVICE_PAUSED
);
86 case SERVICE_CONTROL_CONTINUE
:
87 TRACE(" SERVICE_CONTROL_CONTINUE received\n");
88 UpdateServiceStatus(SERVICE_RUNNING
);
91 case SERVICE_CONTROL_INTERROGATE
:
92 TRACE(" SERVICE_CONTROL_INTERROGATE received\n");
93 SetServiceStatus(ServiceStatusHandle
,
97 case SERVICE_CONTROL_SHUTDOWN
:
98 TRACE(" SERVICE_CONTROL_SHUTDOWN received\n");
99 UpdateServiceStatus(SERVICE_STOPPED
);
100 return ERROR_SUCCESS
;
103 TRACE(" Control %lu received\n");
104 return ERROR_CALL_NOT_IMPLEMENTED
;
110 ServiceMain(DWORD argc
, LPWSTR
*argv
)
112 UNREFERENCED_PARAMETER(argc
);
113 UNREFERENCED_PARAMETER(argv
);
115 TRACE("ServiceMain() called\n");
117 ServiceStatusHandle
= RegisterServiceCtrlHandlerExW(ServiceName
,
118 ServiceControlHandler
,
121 TRACE("Calling SetServiceStatus()\n");
122 UpdateServiceStatus(SERVICE_RUNNING
);
123 TRACE("SetServiceStatus() called\n");
127 TRACE("ServiceMain() done\n");
132 wmain(int argc
, WCHAR
*argv
[])
134 UNREFERENCED_PARAMETER(argc
);
135 UNREFERENCED_PARAMETER(argv
);
137 TRACE("thmsvc: main() started\n");
139 StartServiceCtrlDispatcher(ServiceTable
);
141 TRACE("thmsvc: main() done\n");