mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 23:03:00 +00:00
[SC][SERVICES] Support SERVICE_CONTROL_PARAMCHANGE and SERVICE_CONTROL_NETBIND* control codes
This commit is contained in:
parent
1986049a38
commit
9f0c54fcd3
2 changed files with 29 additions and 7 deletions
|
@ -44,10 +44,12 @@ Control(DWORD Control,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SERVICE_CONTROL_PAUSE:
|
case SERVICE_CONTROL_PAUSE:
|
||||||
dwDesiredAccess = SERVICE_PAUSE_CONTINUE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SERVICE_CONTROL_CONTINUE:
|
case SERVICE_CONTROL_CONTINUE:
|
||||||
|
case SERVICE_CONTROL_PARAMCHANGE:
|
||||||
|
case SERVICE_CONTROL_NETBINDADD:
|
||||||
|
case SERVICE_CONTROL_NETBINDREMOVE:
|
||||||
|
case SERVICE_CONTROL_NETBINDENABLE:
|
||||||
|
case SERVICE_CONTROL_NETBINDDISABLE:
|
||||||
dwDesiredAccess = SERVICE_PAUSE_CONTINUE;
|
dwDesiredAccess = SERVICE_PAUSE_CONTINUE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -55,10 +57,12 @@ Control(DWORD Control,
|
||||||
dwDesiredAccess = SERVICE_INTERROGATE;
|
dwDesiredAccess = SERVICE_INTERROGATE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SERVICE_CONTROL_SHUTDOWN:
|
default:
|
||||||
dwDesiredAccess = 0;
|
if (Control >= 128 && Control <= 255)
|
||||||
|
dwDesiredAccess = SERVICE_USER_DEFINED_CONTROL;
|
||||||
|
else
|
||||||
|
dwDesiredAccess = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hSCManager = OpenSCManager(NULL,
|
hSCManager = OpenSCManager(NULL,
|
||||||
|
|
|
@ -1112,6 +1112,11 @@ RControlService(
|
||||||
|
|
||||||
case SERVICE_CONTROL_PAUSE:
|
case SERVICE_CONTROL_PAUSE:
|
||||||
case SERVICE_CONTROL_CONTINUE:
|
case SERVICE_CONTROL_CONTINUE:
|
||||||
|
case SERVICE_CONTROL_PARAMCHANGE:
|
||||||
|
case SERVICE_CONTROL_NETBINDADD:
|
||||||
|
case SERVICE_CONTROL_NETBINDREMOVE:
|
||||||
|
case SERVICE_CONTROL_NETBINDENABLE:
|
||||||
|
case SERVICE_CONTROL_NETBINDDISABLE:
|
||||||
DesiredAccess = SERVICE_PAUSE_CONTINUE;
|
DesiredAccess = SERVICE_PAUSE_CONTINUE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1226,6 +1231,19 @@ RControlService(
|
||||||
if ((dwControlsAccepted & SERVICE_ACCEPT_PAUSE_CONTINUE) == 0)
|
if ((dwControlsAccepted & SERVICE_ACCEPT_PAUSE_CONTINUE) == 0)
|
||||||
return ERROR_INVALID_SERVICE_CONTROL;
|
return ERROR_INVALID_SERVICE_CONTROL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SERVICE_CONTROL_PARAMCHANGE:
|
||||||
|
if ((dwControlsAccepted & SERVICE_ACCEPT_PARAMCHANGE) == 0)
|
||||||
|
return ERROR_INVALID_SERVICE_CONTROL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SERVICE_CONTROL_NETBINDADD:
|
||||||
|
case SERVICE_CONTROL_NETBINDREMOVE:
|
||||||
|
case SERVICE_CONTROL_NETBINDENABLE:
|
||||||
|
case SERVICE_CONTROL_NETBINDDISABLE:
|
||||||
|
if ((dwControlsAccepted & SERVICE_ACCEPT_NETBINDCHANGE) == 0)
|
||||||
|
return ERROR_INVALID_SERVICE_CONTROL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Send control code to the service */
|
/* Send control code to the service */
|
||||||
|
@ -1728,7 +1746,7 @@ RSetServiceStatus(
|
||||||
/* Restore the previous service type */
|
/* Restore the previous service type */
|
||||||
lpService->Status.dwServiceType = dwPreviousType;
|
lpService->Status.dwServiceType = dwPreviousType;
|
||||||
|
|
||||||
/* Handle a stopped service */
|
/* Dereference a stopped service */
|
||||||
if ((lpServiceStatus->dwServiceType & SERVICE_WIN32) &&
|
if ((lpServiceStatus->dwServiceType & SERVICE_WIN32) &&
|
||||||
(lpServiceStatus->dwCurrentState == SERVICE_STOPPED))
|
(lpServiceStatus->dwCurrentState == SERVICE_STOPPED))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue