[NET] Properly check return value of EnumServicesStatusW on first call

This commit is contained in:
Jérôme Gardou 2021-06-17 15:59:48 +02:00 committed by Jérôme Gardou
parent 5aafeb473f
commit 6bf64780e4

View file

@ -23,6 +23,7 @@ EnumerateRunningServices(VOID)
INT i; INT i;
INT nError = 0; INT nError = 0;
DWORD dwError = ERROR_SUCCESS; DWORD dwError = ERROR_SUCCESS;
BOOL ret;
hManager = OpenSCManagerW(NULL, hManager = OpenSCManagerW(NULL,
SERVICES_ACTIVE_DATABASE, SERVICES_ACTIVE_DATABASE,
@ -34,14 +35,22 @@ EnumerateRunningServices(VOID)
goto done; goto done;
} }
EnumServicesStatusW(hManager, ret = EnumServicesStatusW(hManager,
SERVICE_WIN32, SERVICE_WIN32,
SERVICE_ACTIVE, SERVICE_ACTIVE,
NULL, NULL,
0, 0,
&dwBufferSize, &dwBufferSize,
&dwServiceCount, &dwServiceCount,
&dwResumeHandle); &dwResumeHandle);
if (ret)
{
/* Nothing to enumerate ?! */
goto done;
}
dwError = GetLastError();
if (dwError != ERROR_INSUFFICIENT_BUFFER)
goto done;
if (dwBufferSize != 0) if (dwBufferSize != 0)
{ {