static void WINAPI ServiceCtrlHandler(DWORD code)
{
+ DWORD state = SERVICE_RUNNING;
+
WINE_TRACE("%u\n", code);
switch (code)
case SERVICE_CONTROL_STOP:
UpdateSCMStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);
KillService();
- return;
+ state = SERVICE_STOPPED;
+ break;
default:
fprintf(stderr, "Unhandled service control code: %u\n", code);
break;
}
- UpdateSCMStatus(SERVICE_RUNNING, NO_ERROR, 0);
+ UpdateSCMStatus(state, NO_ERROR, 0);
}
static DWORD WINAPI ServiceExecutionThread(LPVOID param)
{
- while (TRUE)
- {
- /* do nothing */
- }
+ WaitForSingleObject(kill_event, INFINITE);
return 0;
}
{
fprintf(stderr, "Failed to create event\n");
KillService();
+ UpdateSCMStatus(SERVICE_STOPPED, NO_ERROR, 0);
return;
}
if (!StartServiceThread())
{
KillService();
+ UpdateSCMStatus(SERVICE_STOPPED, NO_ERROR, 0);
return;
}
WaitForSingleObject(kill_event, INFINITE);
KillService();
+
+ UpdateSCMStatus(SERVICE_STOPPED, NO_ERROR, 0);
}
DWORD DoService(void)