mirror of
https://github.com/reactos/reactos.git
synced 2025-05-29 05:58:13 +00:00
ScmrControlService: Check access rights.
svn path=/trunk/; revision=19207
This commit is contained in:
parent
577f6f4aa6
commit
1be846c026
1 changed files with 32 additions and 1 deletions
|
@ -280,12 +280,14 @@ ScmrControlService(handle_t BindingHandle,
|
|||
{
|
||||
PSERVICE_HANDLE hSvc;
|
||||
PSERVICE lpService;
|
||||
ACCESS_MASK DesiredAccess;
|
||||
|
||||
DPRINT("ScmrControlService() called\n");
|
||||
|
||||
if (ScmShutdown)
|
||||
return ERROR_SHUTDOWN_IN_PROGRESS;
|
||||
|
||||
/* Check the service handle */
|
||||
hSvc = (PSERVICE_HANDLE)hService;
|
||||
if (hSvc->Handle.Tag != SERVICE_TAG)
|
||||
{
|
||||
|
@ -293,10 +295,39 @@ ScmrControlService(handle_t BindingHandle,
|
|||
return ERROR_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
/* Check access rights */
|
||||
switch (dwControl)
|
||||
{
|
||||
case SERVICE_CONTROL_STOP:
|
||||
DesiredAccess = SERVICE_STOP;
|
||||
break;
|
||||
|
||||
/* FIXME: Check access rights */
|
||||
case SERVICE_CONTROL_PAUSE:
|
||||
case SERVICE_CONTROL_CONTINUE:
|
||||
DesiredAccess = SERVICE_PAUSE_CONTINUE;
|
||||
break;
|
||||
|
||||
case SERVICE_INTERROGATE:
|
||||
DesiredAccess = SERVICE_INTERROGATE;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (dwControl >= 128 && dwControl <= 255)
|
||||
DesiredAccess = SERVICE_USER_DEFINED_CONTROL;
|
||||
else
|
||||
DesiredAccess = SERVICE_QUERY_CONFIG |
|
||||
SERVICE_CHANGE_CONFIG |
|
||||
SERVICE_QUERY_STATUS |
|
||||
SERVICE_START |
|
||||
SERVICE_PAUSE_CONTINUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
|
||||
DesiredAccess))
|
||||
return ERROR_ACCESS_DENIED;
|
||||
|
||||
/* Check the service entry point */
|
||||
lpService = hSvc->ServiceEntry;
|
||||
if (lpService == NULL)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue