Index: base/system/services/rpcserver.c =================================================================== --- base/system/services/rpcserver.c (révision 56741) +++ base/system/services/rpcserver.c (copie de travail) @@ -1288,7 +1288,7 @@ dwError = ScmMarkServiceForDelete(lpService); -Done:; +Done: /* Unlock the service database */ ScmUnlockDatabase(); @@ -2312,7 +2312,7 @@ lpService->dwRefCount = 1; DPRINT("CreateService - lpService->dwRefCount %u\n", lpService->dwRefCount); -done:; +done: /* Unlock the service database */ ScmUnlockDatabase(); @@ -2635,7 +2635,7 @@ *lpServiceHandle = (SC_RPC_HANDLE)hHandle; DPRINT("*hService = %p\n", *lpServiceHandle); -Done:; +Done: /* Unlock the service database */ ScmUnlockDatabase(); @@ -2832,7 +2832,7 @@ if (pcbBytesNeeded != NULL) *pcbBytesNeeded = dwRequiredSize; -Done:; +Done: /* Unlock the service database */ ScmUnlockDatabase(); @@ -3692,7 +3692,7 @@ LPBOUNDED_DWORD_256K lpServicesReturned, LPBOUNDED_DWORD_256K lpResumeHandle) { - LPENUM_SERVICE_STATUSW lpStatusPtrW = NULL; + LPENUM_SERVICE_STATUSW lpStatusPtrW = NULL, lpStatusPtrIncrW = NULL; LPENUM_SERVICE_STATUSA lpStatusPtrA = NULL; LPWSTR lpStringPtrW; LPSTR lpStringPtrA; @@ -3724,6 +3724,7 @@ if (*lpServicesReturned == 0) goto Done; + lpStatusPtrIncrW = lpStatusPtrW; lpStatusPtrA = (LPENUM_SERVICE_STATUSA)lpBuffer; lpStringPtrA = (LPSTR)((ULONG_PTR)lpBuffer + *lpServicesReturned * sizeof(ENUM_SERVICE_STATUSA)); @@ -3762,13 +3763,14 @@ /* Copy the status information */ memcpy(&lpStatusPtrA->ServiceStatus, - &lpStatusPtrW->ServiceStatus, + &lpStatusPtrIncrW->ServiceStatus, sizeof(SERVICE_STATUS)); lpStatusPtrA++; + lpStatusPtrIncrW++; } -Done:; +Done: if (lpStatusPtrW) HeapFree(GetProcessHeap(), 0, lpStatusPtrW); @@ -4062,7 +4064,7 @@ if (pcbBytesNeeded != NULL) *pcbBytesNeeded = dwRequiredSize; -Done:; +Done: /* Unlock the service database */ ScmUnlockDatabase(); @@ -4431,16 +4433,15 @@ *pcbBytesNeeded = 0; *lpServicesReturned = 0; - if ((dwServiceType == 0) || - ((dwServiceType & ~(SERVICE_DRIVER | SERVICE_WIN32)) != 0)) + if ( (dwServiceType == 0) || + ((dwServiceType & ~SERVICE_TYPE_ALL) != 0) ) { DPRINT("Not a valid Service Type!\n"); return ERROR_INVALID_PARAMETER; } - if ((dwServiceState != SERVICE_ACTIVE) && - (dwServiceState != SERVICE_INACTIVE) && - (dwServiceState != SERVICE_STATE_ALL)) + if ( (dwServiceState == 0) || + ((dwServiceState & ~SERVICE_STATE_ALL) != 0) ) { DPRINT("Not a valid Service State!\n"); return ERROR_INVALID_PARAMETER; @@ -5670,7 +5671,7 @@ LPBOUNDED_DWORD_256K lpResumeIndex, LPCSTR pszGroupName) { - LPENUM_SERVICE_STATUS_PROCESSW lpStatusPtrW = NULL; + LPENUM_SERVICE_STATUS_PROCESSW lpStatusPtrW = NULL, lpStatusPtrIncrW = NULL; LPENUM_SERVICE_STATUS_PROCESSA lpStatusPtrA = NULL; LPWSTR lpStringPtrW; LPSTR lpStringPtrA; @@ -5722,6 +5723,7 @@ if (*lpServicesReturned == 0) goto Done; + lpStatusPtrIncrW = lpStatusPtrW; lpStatusPtrA = (LPENUM_SERVICE_STATUS_PROCESSA)lpBuffer; lpStringPtrA = (LPSTR)((ULONG_PTR)lpBuffer + *lpServicesReturned * sizeof(ENUM_SERVICE_STATUS_PROCESSA)); @@ -5760,15 +5762,17 @@ /* Copy the status information */ memcpy(&lpStatusPtrA->ServiceStatusProcess, - &lpStatusPtrW->ServiceStatusProcess, + &lpStatusPtrIncrW->ServiceStatusProcess, sizeof(SERVICE_STATUS)); - lpStatusPtrA->ServiceStatusProcess.dwProcessId = lpStatusPtrW->ServiceStatusProcess.dwProcessId; /* FIXME */ + lpStatusPtrA->ServiceStatusProcess.dwProcessId = lpStatusPtrIncrW->ServiceStatusProcess.dwProcessId; /* FIXME */ lpStatusPtrA->ServiceStatusProcess.dwServiceFlags = 0; /* FIXME */ + lpStatusPtrA++; + lpStatusPtrIncrW++; } -Done:; +Done: if (pszGroupNameW) HeapFree(GetProcessHeap(), 0, pszGroupNameW); @@ -5825,16 +5829,15 @@ *pcbBytesNeeded = 0; *lpServicesReturned = 0; - if ((dwServiceType == 0) || - ((dwServiceType & ~(SERVICE_DRIVER | SERVICE_WIN32)) != 0)) + if ( (dwServiceType == 0) || + ((dwServiceType & ~SERVICE_TYPE_ALL) != 0) ) { DPRINT("Not a valid Service Type!\n"); return ERROR_INVALID_PARAMETER; } - if ((dwServiceState != SERVICE_ACTIVE) && - (dwServiceState != SERVICE_INACTIVE) && - (dwServiceState != SERVICE_STATE_ALL)) + if ( (dwServiceState == 0) || + ((dwServiceState & ~SERVICE_STATE_ALL) != 0) ) { DPRINT("Not a valid Service State!\n"); return ERROR_INVALID_PARAMETER; @@ -6055,7 +6058,7 @@ *lpResumeIndex = 0; } -Done:; +Done: /* Unlock the service database */ ScmUnlockDatabase();