[SERVICES]

Code cleaning and bugs correction.
Patch by Hermès Bélusca.

See issue #7128 for more details.

svn path=/trunk/; revision=56754
This commit is contained in:
Eric Kohl 2012-06-19 21:16:10 +00:00
parent c3b547453e
commit 63e9d00bb0

View file

@ -1288,7 +1288,7 @@ DWORD RDeleteService(
dwError = ScmMarkServiceForDelete(lpService); dwError = ScmMarkServiceForDelete(lpService);
Done:; Done:
/* Unlock the service database */ /* Unlock the service database */
ScmUnlockDatabase(); ScmUnlockDatabase();
@ -2312,7 +2312,7 @@ DWORD RCreateServiceW(
lpService->dwRefCount = 1; lpService->dwRefCount = 1;
DPRINT("CreateService - lpService->dwRefCount %u\n", lpService->dwRefCount); DPRINT("CreateService - lpService->dwRefCount %u\n", lpService->dwRefCount);
done:; done:
/* Unlock the service database */ /* Unlock the service database */
ScmUnlockDatabase(); ScmUnlockDatabase();
@ -2635,7 +2635,7 @@ DWORD ROpenServiceW(
*lpServiceHandle = (SC_RPC_HANDLE)hHandle; *lpServiceHandle = (SC_RPC_HANDLE)hHandle;
DPRINT("*hService = %p\n", *lpServiceHandle); DPRINT("*hService = %p\n", *lpServiceHandle);
Done:; Done:
/* Unlock the service database */ /* Unlock the service database */
ScmUnlockDatabase(); ScmUnlockDatabase();
@ -2832,7 +2832,7 @@ DWORD RQueryServiceConfigW(
if (pcbBytesNeeded != NULL) if (pcbBytesNeeded != NULL)
*pcbBytesNeeded = dwRequiredSize; *pcbBytesNeeded = dwRequiredSize;
Done:; Done:
/* Unlock the service database */ /* Unlock the service database */
ScmUnlockDatabase(); ScmUnlockDatabase();
@ -3693,6 +3693,7 @@ DWORD REnumServicesStatusA(
LPBOUNDED_DWORD_256K lpResumeHandle) LPBOUNDED_DWORD_256K lpResumeHandle)
{ {
LPENUM_SERVICE_STATUSW lpStatusPtrW = NULL; LPENUM_SERVICE_STATUSW lpStatusPtrW = NULL;
LPENUM_SERVICE_STATUSW lpStatusPtrIncrW;
LPENUM_SERVICE_STATUSA lpStatusPtrA = NULL; LPENUM_SERVICE_STATUSA lpStatusPtrA = NULL;
LPWSTR lpStringPtrW; LPWSTR lpStringPtrW;
LPSTR lpStringPtrA; LPSTR lpStringPtrA;
@ -3724,6 +3725,7 @@ DWORD REnumServicesStatusA(
if (*lpServicesReturned == 0) if (*lpServicesReturned == 0)
goto Done; goto Done;
lpStatusPtrIncrW = lpStatusPtrW;
lpStatusPtrA = (LPENUM_SERVICE_STATUSA)lpBuffer; lpStatusPtrA = (LPENUM_SERVICE_STATUSA)lpBuffer;
lpStringPtrA = (LPSTR)((ULONG_PTR)lpBuffer + lpStringPtrA = (LPSTR)((ULONG_PTR)lpBuffer +
*lpServicesReturned * sizeof(ENUM_SERVICE_STATUSA)); *lpServicesReturned * sizeof(ENUM_SERVICE_STATUSA));
@ -3762,13 +3764,14 @@ DWORD REnumServicesStatusA(
/* Copy the status information */ /* Copy the status information */
memcpy(&lpStatusPtrA->ServiceStatus, memcpy(&lpStatusPtrA->ServiceStatus,
&lpStatusPtrW->ServiceStatus, &lpStatusPtrIncrW->ServiceStatus,
sizeof(SERVICE_STATUS)); sizeof(SERVICE_STATUS));
lpStatusPtrIncrW++;
lpStatusPtrA++; lpStatusPtrA++;
} }
Done:; Done:
if (lpStatusPtrW) if (lpStatusPtrW)
HeapFree(GetProcessHeap(), 0, lpStatusPtrW); HeapFree(GetProcessHeap(), 0, lpStatusPtrW);
@ -4062,7 +4065,7 @@ DWORD RQueryServiceConfigA(
if (pcbBytesNeeded != NULL) if (pcbBytesNeeded != NULL)
*pcbBytesNeeded = dwRequiredSize; *pcbBytesNeeded = dwRequiredSize;
Done:; Done:
/* Unlock the service database */ /* Unlock the service database */
ScmUnlockDatabase(); ScmUnlockDatabase();
@ -4432,15 +4435,14 @@ DWORD REnumServiceGroupW(
*lpServicesReturned = 0; *lpServicesReturned = 0;
if ((dwServiceType == 0) || if ((dwServiceType == 0) ||
((dwServiceType & ~(SERVICE_DRIVER | SERVICE_WIN32)) != 0)) ((dwServiceType & ~SERVICE_TYPE_ALL) != 0))
{ {
DPRINT("Not a valid Service Type!\n"); DPRINT("Not a valid Service Type!\n");
return ERROR_INVALID_PARAMETER; return ERROR_INVALID_PARAMETER;
} }
if ((dwServiceState != SERVICE_ACTIVE) && if ((dwServiceState == 0) ||
(dwServiceState != SERVICE_INACTIVE) && ((dwServiceState & ~SERVICE_STATE_ALL) != 0))
(dwServiceState != SERVICE_STATE_ALL))
{ {
DPRINT("Not a valid Service State!\n"); DPRINT("Not a valid Service State!\n");
return ERROR_INVALID_PARAMETER; return ERROR_INVALID_PARAMETER;
@ -5671,6 +5673,7 @@ DWORD REnumServicesStatusExA(
LPCSTR pszGroupName) LPCSTR pszGroupName)
{ {
LPENUM_SERVICE_STATUS_PROCESSW lpStatusPtrW = NULL; LPENUM_SERVICE_STATUS_PROCESSW lpStatusPtrW = NULL;
LPENUM_SERVICE_STATUS_PROCESSW lpStatusPtrIncrW;
LPENUM_SERVICE_STATUS_PROCESSA lpStatusPtrA = NULL; LPENUM_SERVICE_STATUS_PROCESSA lpStatusPtrA = NULL;
LPWSTR lpStringPtrW; LPWSTR lpStringPtrW;
LPSTR lpStringPtrA; LPSTR lpStringPtrA;
@ -5722,6 +5725,7 @@ DWORD REnumServicesStatusExA(
if (*lpServicesReturned == 0) if (*lpServicesReturned == 0)
goto Done; goto Done;
lpStatusPtrIncrW = lpStatusPtrW;
lpStatusPtrA = (LPENUM_SERVICE_STATUS_PROCESSA)lpBuffer; lpStatusPtrA = (LPENUM_SERVICE_STATUS_PROCESSA)lpBuffer;
lpStringPtrA = (LPSTR)((ULONG_PTR)lpBuffer + lpStringPtrA = (LPSTR)((ULONG_PTR)lpBuffer +
*lpServicesReturned * sizeof(ENUM_SERVICE_STATUS_PROCESSA)); *lpServicesReturned * sizeof(ENUM_SERVICE_STATUS_PROCESSA));
@ -5760,15 +5764,17 @@ DWORD REnumServicesStatusExA(
/* Copy the status information */ /* Copy the status information */
memcpy(&lpStatusPtrA->ServiceStatusProcess, memcpy(&lpStatusPtrA->ServiceStatusProcess,
&lpStatusPtrW->ServiceStatusProcess, &lpStatusPtrIncrW->ServiceStatusProcess,
sizeof(SERVICE_STATUS)); sizeof(SERVICE_STATUS));
lpStatusPtrA->ServiceStatusProcess.dwProcessId = lpStatusPtrW->ServiceStatusProcess.dwProcessId; /* FIXME */ lpStatusPtrA->ServiceStatusProcess.dwProcessId = lpStatusPtrIncrW->ServiceStatusProcess.dwProcessId; /* FIXME */
lpStatusPtrA->ServiceStatusProcess.dwServiceFlags = 0; /* FIXME */ lpStatusPtrA->ServiceStatusProcess.dwServiceFlags = 0; /* FIXME */
lpStatusPtrIncrW++;
lpStatusPtrA++; lpStatusPtrA++;
} }
Done:; Done:
if (pszGroupNameW) if (pszGroupNameW)
HeapFree(GetProcessHeap(), 0, pszGroupNameW); HeapFree(GetProcessHeap(), 0, pszGroupNameW);
@ -5826,15 +5832,14 @@ DWORD REnumServicesStatusExW(
*lpServicesReturned = 0; *lpServicesReturned = 0;
if ((dwServiceType == 0) || if ((dwServiceType == 0) ||
((dwServiceType & ~(SERVICE_DRIVER | SERVICE_WIN32)) != 0)) ((dwServiceType & ~SERVICE_TYPE_ALL) != 0))
{ {
DPRINT("Not a valid Service Type!\n"); DPRINT("Not a valid Service Type!\n");
return ERROR_INVALID_PARAMETER; return ERROR_INVALID_PARAMETER;
} }
if ((dwServiceState != SERVICE_ACTIVE) && if ((dwServiceState == 0) ||
(dwServiceState != SERVICE_INACTIVE) && ((dwServiceState & ~SERVICE_STATE_ALL) != 0))
(dwServiceState != SERVICE_STATE_ALL))
{ {
DPRINT("Not a valid Service State!\n"); DPRINT("Not a valid Service State!\n");
return ERROR_INVALID_PARAMETER; return ERROR_INVALID_PARAMETER;
@ -6055,7 +6060,7 @@ DWORD REnumServicesStatusExW(
*lpResumeIndex = 0; *lpResumeIndex = 0;
} }
Done:; Done:
/* Unlock the service database */ /* Unlock the service database */
ScmUnlockDatabase(); ScmUnlockDatabase();