mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-29 12:23:30 +00:00
[SERVICES]
Improve the parameter checks in RCreateServiceW. svn path=/trunk/; revision=54342
This commit is contained in:
@@ -1999,30 +1999,43 @@ DWORD RCreateServiceW(
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if ((dwServiceType & SERVICE_KERNEL_DRIVER) &&
|
||||
(dwServiceType & SERVICE_FILE_SYSTEM_DRIVER))
|
||||
{
|
||||
/* Check for invalid service type value */
|
||||
if ((dwServiceType != SERVICE_KERNEL_DRIVER) &&
|
||||
(dwServiceType != SERVICE_FILE_SYSTEM_DRIVER) &&
|
||||
((dwServiceType & ~SERVICE_INTERACTIVE_PROCESS) != SERVICE_WIN32_OWN_PROCESS) &&
|
||||
((dwServiceType & ~SERVICE_INTERACTIVE_PROCESS) != SERVICE_WIN32_SHARE_PROCESS))
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
|
||||
/* Check for invalid start type value */
|
||||
if ((dwStartType != SERVICE_BOOT_START) &&
|
||||
(dwStartType != SERVICE_SYSTEM_START) &&
|
||||
(dwStartType != SERVICE_AUTO_START) &&
|
||||
(dwStartType != SERVICE_DEMAND_START) &&
|
||||
(dwStartType != SERVICE_DISABLED))
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
|
||||
/* Only drivers can be boot start or system start services */
|
||||
if ((dwStartType == SERVICE_BOOT_START) ||
|
||||
(dwStartType == SERVICE_SYSTEM_START))
|
||||
{
|
||||
if ((dwServiceType != SERVICE_KERNEL_DRIVER) &&
|
||||
(dwServiceType != SERVICE_FILE_SYSTEM_DRIVER))
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
/* Check for invalid error control value */
|
||||
if ((dwErrorControl != SERVICE_ERROR_IGNORE) &&
|
||||
(dwErrorControl != SERVICE_ERROR_NORMAL) &&
|
||||
(dwErrorControl != SERVICE_ERROR_SEVERE) &&
|
||||
(dwErrorControl != SERVICE_ERROR_CRITICAL))
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
|
||||
if ((dwServiceType == (SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS)) &&
|
||||
(lpServiceStartName))
|
||||
{
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if ((dwServiceType > SERVICE_WIN32_SHARE_PROCESS) &&
|
||||
(dwServiceType != (SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS)) &&
|
||||
(dwServiceType != (SERVICE_WIN32_SHARE_PROCESS | SERVICE_INTERACTIVE_PROCESS)))
|
||||
{
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (dwStartType > SERVICE_DISABLED)
|
||||
{
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (lpdwTagId && (!lpLoadOrderGroup || !*lpLoadOrderGroup))
|
||||
{
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
|
||||
Reference in New Issue
Block a user