mirror of
https://github.com/reactos/reactos.git
synced 2025-06-03 08:20:27 +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_HANDLE hSvc;
|
||||||
PSERVICE lpService;
|
PSERVICE lpService;
|
||||||
|
ACCESS_MASK DesiredAccess;
|
||||||
|
|
||||||
DPRINT("ScmrControlService() called\n");
|
DPRINT("ScmrControlService() called\n");
|
||||||
|
|
||||||
if (ScmShutdown)
|
if (ScmShutdown)
|
||||||
return ERROR_SHUTDOWN_IN_PROGRESS;
|
return ERROR_SHUTDOWN_IN_PROGRESS;
|
||||||
|
|
||||||
|
/* Check the service handle */
|
||||||
hSvc = (PSERVICE_HANDLE)hService;
|
hSvc = (PSERVICE_HANDLE)hService;
|
||||||
if (hSvc->Handle.Tag != SERVICE_TAG)
|
if (hSvc->Handle.Tag != SERVICE_TAG)
|
||||||
{
|
{
|
||||||
|
@ -293,10 +295,39 @@ ScmrControlService(handle_t BindingHandle,
|
||||||
return ERROR_INVALID_HANDLE;
|
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;
|
lpService = hSvc->ServiceEntry;
|
||||||
if (lpService == NULL)
|
if (lpService == NULL)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue