mirror of
https://github.com/reactos/reactos.git
synced 2025-01-04 21:38:43 +00:00
Merge ScmControlService() and ScmSendStartCommand() into ScmSendServiceCommand().
svn path=/trunk/; revision=49366
This commit is contained in:
parent
d4bd38df22
commit
1917d1c595
3 changed files with 31 additions and 75 deletions
|
@ -678,66 +678,10 @@ ScmGetBootAndSystemDriverState(VOID)
|
|||
|
||||
|
||||
DWORD
|
||||
ScmControlService(PSERVICE Service,
|
||||
DWORD dwControl)
|
||||
{
|
||||
PSCM_CONTROL_PACKET ControlPacket;
|
||||
SCM_REPLY_PACKET ReplyPacket;
|
||||
|
||||
DWORD dwWriteCount = 0;
|
||||
DWORD dwReadCount = 0;
|
||||
DWORD TotalLength;
|
||||
DWORD dwError = ERROR_SUCCESS;
|
||||
|
||||
DPRINT("ScmControlService() called\n");
|
||||
|
||||
TotalLength = wcslen(Service->lpServiceName) + 1;
|
||||
|
||||
ControlPacket = (SCM_CONTROL_PACKET*)HeapAlloc(GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
sizeof(SCM_CONTROL_PACKET) + (TotalLength * sizeof(WCHAR)));
|
||||
if (ControlPacket == NULL)
|
||||
return ERROR_NOT_ENOUGH_MEMORY;
|
||||
|
||||
ControlPacket->dwControl = dwControl;
|
||||
ControlPacket->dwSize = TotalLength;
|
||||
ControlPacket->hServiceStatus = (SERVICE_STATUS_HANDLE)Service;
|
||||
wcscpy(&ControlPacket->szArguments[0], Service->lpServiceName);
|
||||
|
||||
/* Send the control packet */
|
||||
WriteFile(Service->ControlPipeHandle,
|
||||
ControlPacket,
|
||||
sizeof(SCM_CONTROL_PACKET) + (TotalLength * sizeof(WCHAR)),
|
||||
&dwWriteCount,
|
||||
NULL);
|
||||
|
||||
/* Read the reply */
|
||||
ReadFile(Service->ControlPipeHandle,
|
||||
&ReplyPacket,
|
||||
sizeof(SCM_REPLY_PACKET),
|
||||
&dwReadCount,
|
||||
NULL);
|
||||
|
||||
/* Release the contol packet */
|
||||
HeapFree(GetProcessHeap(),
|
||||
0,
|
||||
ControlPacket);
|
||||
|
||||
if (dwReadCount == sizeof(SCM_REPLY_PACKET))
|
||||
{
|
||||
dwError = ReplyPacket.dwError;
|
||||
}
|
||||
|
||||
DPRINT("ScmControlService() done\n");
|
||||
|
||||
return dwError;
|
||||
}
|
||||
|
||||
|
||||
static DWORD
|
||||
ScmSendStartCommand(PSERVICE Service,
|
||||
DWORD argc,
|
||||
LPWSTR *argv)
|
||||
ScmSendServiceCommand(PSERVICE Service,
|
||||
DWORD dwControl,
|
||||
DWORD argc,
|
||||
LPWSTR *argv)
|
||||
{
|
||||
PSCM_CONTROL_PACKET ControlPacket;
|
||||
SCM_REPLY_PACKET ReplyPacket;
|
||||
|
@ -750,7 +694,7 @@ ScmSendStartCommand(PSERVICE Service,
|
|||
DWORD dwError = ERROR_SUCCESS;
|
||||
DWORD i;
|
||||
|
||||
DPRINT("ScmSendStartCommand() called\n");
|
||||
DPRINT("ScmSendServiceCommand() called\n");
|
||||
|
||||
/* Calculate the total length of the start command line */
|
||||
TotalLength = wcslen(Service->lpServiceName) + 1;
|
||||
|
@ -774,7 +718,7 @@ ScmSendStartCommand(PSERVICE Service,
|
|||
if (ControlPacket == NULL)
|
||||
return ERROR_NOT_ENOUGH_MEMORY;
|
||||
|
||||
ControlPacket->dwControl = SERVICE_CONTROL_START;
|
||||
ControlPacket->dwControl = dwControl;
|
||||
ControlPacket->hServiceStatus = (SERVICE_STATUS_HANDLE)Service;
|
||||
ControlPacket->dwSize = TotalLength;
|
||||
Ptr = &ControlPacket->szArguments[0];
|
||||
|
@ -819,7 +763,7 @@ ScmSendStartCommand(PSERVICE Service,
|
|||
dwError = ReplyPacket.dwError;
|
||||
}
|
||||
|
||||
DPRINT("ScmSendStartCommand() done\n");
|
||||
DPRINT("ScmSendServiceCommand() done\n");
|
||||
|
||||
return dwError;
|
||||
}
|
||||
|
@ -998,7 +942,10 @@ ScmStartUserModeService(PSERVICE Service,
|
|||
DPRINT("Received service process ID %lu\n", dwProcessId);
|
||||
|
||||
/* Send start command */
|
||||
dwError = ScmSendStartCommand(Service, argc, argv);
|
||||
dwError = ScmSendServiceCommand(Service,
|
||||
SERVICE_CONTROL_START,
|
||||
argc,
|
||||
argv);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -1227,7 +1174,10 @@ ScmAutoShutdownServices(VOID)
|
|||
CurrentService->Status.dwCurrentState == SERVICE_START_PENDING)
|
||||
{
|
||||
/* shutdown service */
|
||||
ScmControlService(CurrentService, SERVICE_CONTROL_STOP);
|
||||
ScmSendServiceCommand(CurrentService,
|
||||
SERVICE_CONTROL_STOP,
|
||||
0,
|
||||
NULL);
|
||||
}
|
||||
|
||||
ServiceEntry = ServiceEntry->Flink;
|
||||
|
|
|
@ -699,8 +699,10 @@ DWORD RControlService(
|
|||
}
|
||||
|
||||
/* Send control code to the service */
|
||||
dwError = ScmControlService(lpService,
|
||||
dwControl);
|
||||
dwError = ScmSendServiceCommand(lpService,
|
||||
dwControl,
|
||||
0,
|
||||
NULL);
|
||||
|
||||
/* Return service status information */
|
||||
RtlCopyMemory(lpServiceStatus,
|
||||
|
@ -2864,7 +2866,10 @@ DWORD RStartServiceW(
|
|||
}
|
||||
|
||||
/* Start the service */
|
||||
dwError = ScmStartService(lpService, argc, (LPWSTR *)argv);
|
||||
dwError = ScmSendServiceCommand(lpService,
|
||||
SERVICE_CONTROL_START,
|
||||
argc,
|
||||
(LPWSTR *)argv);
|
||||
|
||||
return dwError;
|
||||
}
|
||||
|
@ -4072,7 +4077,10 @@ DWORD RStartServiceA(
|
|||
/* FIXME: Convert argument vector to Unicode */
|
||||
|
||||
/* Start the service */
|
||||
dwError = ScmStartService(lpService, 0, NULL);
|
||||
dwError = ScmSendServiceCommand(lpService,
|
||||
SERVICE_CONTROL_START,
|
||||
0,
|
||||
NULL);
|
||||
|
||||
/* FIXME: Free argument vector */
|
||||
|
||||
|
|
|
@ -104,9 +104,10 @@ VOID ScmShutdownServiceDatabase(VOID);
|
|||
VOID ScmGetBootAndSystemDriverState(VOID);
|
||||
VOID ScmAutoStartServices(VOID);
|
||||
VOID ScmAutoShutdownServices(VOID);
|
||||
DWORD ScmStartService(PSERVICE Service,
|
||||
DWORD argc,
|
||||
LPWSTR *argv);
|
||||
DWORD ScmSendServiceCommand(PSERVICE Service,
|
||||
DWORD dwControl,
|
||||
DWORD argc,
|
||||
LPWSTR *argv);
|
||||
|
||||
PSERVICE ScmGetServiceEntryByName(LPCWSTR lpServiceName);
|
||||
PSERVICE ScmGetServiceEntryByDisplayName(LPCWSTR lpDisplayName);
|
||||
|
@ -116,9 +117,6 @@ DWORD ScmCreateNewServiceRecord(LPCWSTR lpServiceName,
|
|||
VOID ScmDeleteServiceRecord(PSERVICE lpService);
|
||||
DWORD ScmMarkServiceForDelete(PSERVICE pService);
|
||||
|
||||
DWORD ScmControlService(PSERVICE Service,
|
||||
DWORD dwControl);
|
||||
|
||||
BOOL ScmLockDatabaseExclusive(VOID);
|
||||
BOOL ScmLockDatabaseShared(VOID);
|
||||
VOID ScmUnlockDatabase(VOID);
|
||||
|
|
Loading…
Reference in a new issue