mirror of
https://github.com/reactos/reactos.git
synced 2024-10-06 01:13:38 +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;
|
DWORD dwRunningServices = 0;
|
||||||
LPWSTR lpServiceName;
|
LPWSTR lpServiceName;
|
||||||
PACTIVE_SERVICE lpService;
|
PACTIVE_SERVICE lpService;
|
||||||
|
SCM_REPLY_PACKET ReplyPacket;
|
||||||
|
DWORD dwError;
|
||||||
|
|
||||||
TRACE("ScDispatcherLoop() called\n");
|
TRACE("ScDispatcherLoop() called\n");
|
||||||
|
|
||||||
|
@ -381,22 +383,42 @@ ScServiceDispatcher(HANDLE hPipe,
|
||||||
{
|
{
|
||||||
case SERVICE_CONTROL_START:
|
case SERVICE_CONTROL_START:
|
||||||
TRACE("Start command - recieved SERVICE_CONTROL_START\n");
|
TRACE("Start command - recieved SERVICE_CONTROL_START\n");
|
||||||
if (ScStartService(lpService, ControlPacket) == ERROR_SUCCESS)
|
dwError = ScStartService(lpService, ControlPacket);
|
||||||
|
if (dwError == ERROR_SUCCESS)
|
||||||
dwRunningServices++;
|
dwRunningServices++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SERVICE_CONTROL_STOP:
|
case SERVICE_CONTROL_STOP:
|
||||||
TRACE("Stop command - recieved SERVICE_CONTROL_STOP\n");
|
TRACE("Stop command - recieved SERVICE_CONTROL_STOP\n");
|
||||||
if (ScControlService(lpService, ControlPacket) == ERROR_SUCCESS)
|
dwError = ScControlService(lpService, ControlPacket);
|
||||||
|
if (dwError == ERROR_SUCCESS)
|
||||||
dwRunningServices--;
|
dwRunningServices--;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
TRACE("Command %lu received", ControlPacket->dwControl);
|
TRACE("Command %lu received", ControlPacket->dwControl);
|
||||||
ScControlService(lpService, ControlPacket);
|
dwError = ScControlService(lpService, ControlPacket);
|
||||||
continue;
|
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)
|
if (dwRunningServices == 0)
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue