2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: services/spoolsv/spoolsv.c
5 * PURPOSE: Printer spooler
6 * PROGRAMMER: Eric Kohl
9 /* INCLUDES *****************************************************************/
13 #include <wine/debug.h>
15 WINE_DEFAULT_DEBUG_CHANNEL(spoolsv
);
18 /* GLOBALS ******************************************************************/
20 static VOID CALLBACK
ServiceMain(DWORD argc
, LPWSTR
*argv
);
21 static WCHAR ServiceName
[] = L
"Spooler";
22 static SERVICE_TABLE_ENTRYW ServiceTable
[] =
24 {ServiceName
, ServiceMain
},
28 SERVICE_STATUS_HANDLE ServiceStatusHandle
;
29 SERVICE_STATUS ServiceStatus
;
32 /* FUNCTIONS *****************************************************************/
35 UpdateServiceStatus(DWORD dwState
)
37 ServiceStatus
.dwServiceType
= SERVICE_WIN32_OWN_PROCESS
;
38 ServiceStatus
.dwCurrentState
= dwState
;
40 if (dwState
== SERVICE_RUNNING
)
41 ServiceStatus
.dwControlsAccepted
= SERVICE_ACCEPT_PAUSE_CONTINUE
| SERVICE_ACCEPT_STOP
| SERVICE_ACCEPT_SHUTDOWN
;
42 else if (dwState
== SERVICE_PAUSED
)
43 ServiceStatus
.dwControlsAccepted
= SERVICE_ACCEPT_PAUSE_CONTINUE
;
45 ServiceStatus
.dwControlsAccepted
= 0;
47 ServiceStatus
.dwWin32ExitCode
= 0;
48 ServiceStatus
.dwServiceSpecificExitCode
= 0;
49 ServiceStatus
.dwCheckPoint
= 0;
51 if (dwState
== SERVICE_START_PENDING
||
52 dwState
== SERVICE_STOP_PENDING
||
53 dwState
== SERVICE_PAUSE_PENDING
||
54 dwState
== SERVICE_CONTINUE_PENDING
)
55 ServiceStatus
.dwWaitHint
= 10000;
57 ServiceStatus
.dwWaitHint
= 0;
59 SetServiceStatus(ServiceStatusHandle
,
65 ServiceControlHandler(DWORD dwControl
,
70 TRACE("ServiceControlHandler() called\n");
74 case SERVICE_CONTROL_STOP
:
75 TRACE(" SERVICE_CONTROL_STOP received\n");
76 UpdateServiceStatus(SERVICE_STOPPED
);
79 case SERVICE_CONTROL_PAUSE
:
80 TRACE(" SERVICE_CONTROL_PAUSE received\n");
81 UpdateServiceStatus(SERVICE_PAUSED
);
84 case SERVICE_CONTROL_CONTINUE
:
85 TRACE(" SERVICE_CONTROL_CONTINUE received\n");
86 UpdateServiceStatus(SERVICE_RUNNING
);
89 case SERVICE_CONTROL_INTERROGATE
:
90 TRACE(" SERVICE_CONTROL_INTERROGATE received\n");
91 SetServiceStatus(ServiceStatusHandle
,
95 case SERVICE_CONTROL_SHUTDOWN
:
96 TRACE(" SERVICE_CONTROL_SHUTDOWN received\n");
97 UpdateServiceStatus(SERVICE_STOPPED
);
101 TRACE(" Control %lu received\n");
102 return ERROR_CALL_NOT_IMPLEMENTED
;
108 ServiceMain(DWORD argc
, LPWSTR
*argv
)
110 UNREFERENCED_PARAMETER(argc
);
111 UNREFERENCED_PARAMETER(argv
);
113 TRACE("ServiceMain() called\n");
115 ServiceStatusHandle
= RegisterServiceCtrlHandlerExW(ServiceName
,
116 ServiceControlHandler
,
119 TRACE("Calling SetServiceStatus()\n");
120 UpdateServiceStatus(SERVICE_RUNNING
);
121 TRACE("SetServiceStatus() called\n");
124 TRACE("ServiceMain() done\n");
129 wmain(int argc
, WCHAR
*argv
[])
131 UNREFERENCED_PARAMETER(argc
);
132 UNREFERENCED_PARAMETER(argv
);
134 TRACE("Spoolsv: main() started\n");
136 StartServiceCtrlDispatcher(ServiceTable
);
138 TRACE("Spoolsv: main() done\n");