Author: janderwald Date: Thu Feb 5 13:13:35 2009 New Revision: 39419
URL: http://svn.reactos.org/svn/reactos?rev=39419&view=rev Log: - Add more error checks which reduce winetest errors
Modified: trunk/reactos/dll/win32/advapi32/service/scm.c
Modified: trunk/reactos/dll/win32/advapi32/service/scm.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/advapi32/service/... ============================================================================== --- trunk/reactos/dll/win32/advapi32/service/scm.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/advapi32/service/scm.c [iso-8859-1] Thu Feb 5 13:13:35 2009 @@ -1025,6 +1025,48 @@
TRACE("EnumServicesStatusA() called\n");
+ if (!hSCManager) + { + SetLastError(ERROR_INVALID_HANDLE); + return FALSE; + } + + if (dwServiceType != SERVICE_DRIVER && dwServiceType != SERVICE_WIN32) + { + if (pcbBytesNeeded && lpServicesReturned) + { + *pcbBytesNeeded = 0; + *lpServicesReturned = 0; + } + + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (dwServiceState != SERVICE_ACTIVE && dwServiceState != SERVICE_INACTIVE && dwServiceState != SERVICE_STATE_ALL) + { + if (pcbBytesNeeded) + *pcbBytesNeeded = 0; + + if (lpServicesReturned) + *lpServicesReturned = 0; + + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (!pcbBytesNeeded || !lpServicesReturned || !lpResumeHandle) + { + SetLastError(ERROR_INVALID_ADDRESS); + return FALSE; + } + + if (!lpServices && cbBufSize != 0) + { + SetLastError(ERROR_INVALID_ADDRESS); + return FALSE; + } + RpcTryExcept { dwError = REnumServicesStatusA((SC_RPC_HANDLE)hSCManager, @@ -1407,7 +1449,9 @@ if (!lpDisplayName) { SetLastError(ERROR_INVALID_ADDRESS); - *lpcchBuffer = 1; + + if (!lpServiceName) + *lpcchBuffer = 1; return FALSE; }
@@ -2295,6 +2339,12 @@ TRACE("QueryServiceStatus(%p, %p)\n", hService, lpServiceStatus);
+ if (!hService) + { + SetLastError(ERROR_INVALID_HANDLE); + return FALSE; + } + RpcTryExcept { /* Call to services.exe using RPC */ @@ -2333,6 +2383,12 @@ DWORD dwError;
TRACE("QueryServiceStatusEx() called\n"); + + if (InfoLevel != SC_STATUS_PROCESS_INFO) + { + SetLastError(ERROR_INVALID_LEVEL); + return FALSE; + }
RpcTryExcept {