Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
ff0099df
Commit
ff0099df
authored
May 05, 2008
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
spoolsv: Improve the service stub so that it can be started and stopped.
parent
681146c9
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
60 additions
and
3 deletions
+60
-3
main.c
programs/spoolsv/main.c
+60
-3
No files found.
programs/spoolsv/main.c
View file @
ff0099df
...
...
@@ -24,16 +24,73 @@
WINE_DEFAULT_DEBUG_CHANNEL
(
spoolsv
);
static
WCHAR
spoolerW
[]
=
{
'S'
,
'p'
,
'o'
,
'o'
,
'l'
,
'e'
,
'r'
,
0
};
static
SERVICE_STATUS_HANDLE
service_handle
;
static
HANDLE
stop_event
;
static
DWORD
WINAPI
service_handler
(
DWORD
ctrl
,
DWORD
event_type
,
LPVOID
event_data
,
LPVOID
context
)
{
SERVICE_STATUS
status
;
status
.
dwServiceType
=
SERVICE_WIN32
;
status
.
dwControlsAccepted
=
SERVICE_ACCEPT_STOP
;
status
.
dwWin32ExitCode
=
0
;
status
.
dwServiceSpecificExitCode
=
0
;
status
.
dwCheckPoint
=
0
;
status
.
dwWaitHint
=
0
;
switch
(
ctrl
)
{
case
SERVICE_CONTROL_STOP
:
case
SERVICE_CONTROL_SHUTDOWN
:
WINE_TRACE
(
"shutting down
\n
"
);
status
.
dwCurrentState
=
SERVICE_STOP_PENDING
;
status
.
dwControlsAccepted
=
0
;
SetServiceStatus
(
service_handle
,
&
status
);
SetEvent
(
stop_event
);
return
NO_ERROR
;
default:
WINE_FIXME
(
"got service ctrl %x
\n
"
,
ctrl
);
status
.
dwCurrentState
=
SERVICE_RUNNING
;
SetServiceStatus
(
service_handle
,
&
status
);
return
NO_ERROR
;
}
}
static
void
WINAPI
serv_main
(
DWORD
argc
,
LPWSTR
*
argv
)
{
WINE_FIXME
(
"(%d %p)
\n
"
,
argc
,
argv
);
SERVICE_STATUS
status
;
WINE_TRACE
(
"starting service
\n
"
);
stop_event
=
CreateEventW
(
NULL
,
TRUE
,
FALSE
,
NULL
);
service_handle
=
RegisterServiceCtrlHandlerExW
(
spoolerW
,
service_handler
,
NULL
);
if
(
!
service_handle
)
return
;
status
.
dwServiceType
=
SERVICE_WIN32
;
status
.
dwCurrentState
=
SERVICE_RUNNING
;
status
.
dwControlsAccepted
=
SERVICE_ACCEPT_STOP
|
SERVICE_ACCEPT_SHUTDOWN
;
status
.
dwWin32ExitCode
=
0
;
status
.
dwServiceSpecificExitCode
=
0
;
status
.
dwCheckPoint
=
0
;
status
.
dwWaitHint
=
10000
;
SetServiceStatus
(
service_handle
,
&
status
);
WaitForSingleObject
(
stop_event
,
INFINITE
);
status
.
dwCurrentState
=
SERVICE_STOPPED
;
status
.
dwControlsAccepted
=
0
;
SetServiceStatus
(
service_handle
,
&
status
);
WINE_TRACE
(
"service stopped
\n
"
);
}
int
main
(
int
argc
,
char
**
argv
)
{
static
WCHAR
wszSPOOLER
[]
=
{
'S'
,
'P'
,
'O'
,
'O'
,
'L'
,
'E'
,
'R'
,
0
};
static
const
SERVICE_TABLE_ENTRYW
servtbl
[]
=
{
{
wszSPOOLER
,
serv_main
},
{
spoolerW
,
serv_main
},
{
NULL
,
NULL
}
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment