mirror of
https://github.com/reactos/reactos.git
synced 2024-10-05 17:06:29 +00:00
- Send the SCM reply packet with the final status after completing the requested actions
- Fixes the hang during 2nd stage setup svn path=/trunk/; revision=45731
This commit is contained in:
parent
dc4048eeea
commit
e21af25d53
|
@ -347,6 +347,8 @@ ScServiceDispatcher(HANDLE hPipe,
|
|||
DWORD dwRunningServices = 0;
|
||||
LPWSTR lpServiceName;
|
||||
PACTIVE_SERVICE lpService;
|
||||
SCM_REPLY_PACKET ReplyPacket;
|
||||
DWORD dwError;
|
||||
|
||||
TRACE("ScDispatcherLoop() called\n");
|
||||
|
||||
|
@ -381,22 +383,42 @@ ScServiceDispatcher(HANDLE hPipe,
|
|||
{
|
||||
case SERVICE_CONTROL_START:
|
||||
TRACE("Start command - recieved SERVICE_CONTROL_START\n");
|
||||
if (ScStartService(lpService, ControlPacket) == ERROR_SUCCESS)
|
||||
dwError = ScStartService(lpService, ControlPacket);
|
||||
if (dwError == ERROR_SUCCESS)
|
||||
dwRunningServices++;
|
||||
break;
|
||||
|
||||
case SERVICE_CONTROL_STOP:
|
||||
TRACE("Stop command - recieved SERVICE_CONTROL_STOP\n");
|
||||
if (ScControlService(lpService, ControlPacket) == ERROR_SUCCESS)
|
||||
dwError = ScControlService(lpService, ControlPacket);
|
||||
if (dwError == ERROR_SUCCESS)
|
||||
dwRunningServices--;
|
||||
break;
|
||||
|
||||
default:
|
||||
TRACE("Command %lu received", ControlPacket->dwControl);
|
||||
ScControlService(lpService, ControlPacket);
|
||||
continue;
|
||||
dwError = ScControlService(lpService, ControlPacket);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
dwError = ERROR_NOT_FOUND;
|
||||
}
|
||||
|
||||
ReplyPacket.dwError = dwError;
|
||||
|
||||
/* Send the reply packet */
|
||||
bResult = WriteFile(hPipe,
|
||||
&ReplyPacket,
|
||||
sizeof(ReplyPacket),
|
||||
&Count,
|
||||
NULL);
|
||||
if (bResult == FALSE)
|
||||
{
|
||||
ERR("Pipe write failed (Error: %lu)\n", GetLastError());
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (dwRunningServices == 0)
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue