Hola Eternal Idol otra vez retomando el tema pues buscando en la documentación MSDN hay una función que sirve para mi cometido pero al ejecutar la función esta falla y no he podido encontrar donde está el error, se compila bien y todo pero no devuelve nada pongo el código si me haces el favor de darle una revisión puedas ver que he hecho mal.
hscManager = OpenSCManager(0, 0, SC_MANAGER_ENUMERATE_SERVICE);
while( EnumServicesStatusEx( hscManager, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL, service, bufSize,
&bufSize, &numOfService, 0, 0) == 0 )
delete [] service, service = new BYTE[bufSize *= 2];
LPENUM_SERVICE_STATUS_PROCESS services = (LPENUM_SERVICE_STATUS_PROCESS) service;
for(int i = 0; i < numOfService; i++){
val.pid = services->ServiceStatusProcess.dwProcessId;
CopyString(services->lpServiceName, val.service, MAX_PATH);
GetServiceDisplayName (hscManager, services->lpServiceName, NULL, &buffer);
if (buffer)
{
lpDisplayName = new TCHAR[buffer +1];
ZeroMemory (lpDisplayName, buffer + 1);
if (GetServiceDisplayName (hscManager, services->lpServiceName, lpDisplayName, &buffer))
{
CopyString (lpDisplayName, displayName, MAX_PATH);
}
}
services++;
initialRunxes->push_back(val);
}
el problema es en la función
GetServiceDisplayName que no me devuelve el valor de
lpDisplayName nunca entra en el If lo que significa que esta fallando la función no se si he definido mal los parámetros o que pasa.