Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problemas al usar función GetServiceDisplayName

Estas en el tema de Problemas al usar función GetServiceDisplayName en el foro de C/C++ en Foros del Web. Hola, estoy usando la función GetServiceDisplayName pero no me recupera nada al hacer el llamado de la función en el if esta se sale pongo ...
  #1 (permalink)  
Antiguo 04/10/2013, 14:45
 
Fecha de Ingreso: junio-2008
Mensajes: 109
Antigüedad: 15 años, 11 meses
Puntos: 0
Pregunta Problemas al usar función GetServiceDisplayName

Hola, estoy usando la función GetServiceDisplayName pero no me recupera nada al hacer el llamado de la función en el if esta se sale pongo a continuación el código:

Código C++:
Ver original
  1. hscManager = OpenSCManager(0, 0, SC_MANAGER_ENUMERATE_SERVICE);
  2.  
  3.     while( EnumServicesStatusEx( hscManager, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL, service, bufSize,
  4.         &bufSize, &numOfService, 0, 0) == 0 )
  5.         delete [] service, service = new BYTE[bufSize *= 2];
  6.        
  7.     LPENUM_SERVICE_STATUS_PROCESS services = (LPENUM_SERVICE_STATUS_PROCESS) service;
  8.        
  9.     for(int i = 0; i < numOfService; i++){
  10.  
  11.         val.pid = services->ServiceStatusProcess.dwProcessId;
  12.         CopyString(services->lpServiceName, val.service, MAX_PATH);
  13.                
  14.         GetServiceDisplayName (hscManager, services->lpServiceName, NULL, &buffer);
  15.         if (buffer)
  16.         {
  17.             lpDisplayName = new TCHAR[buffer +1];
  18.             ZeroMemory (lpDisplayName, buffer + 1);
  19.  
  20.                        
  21.             if (GetServiceDisplayName (hscManager, services->lpServiceName, lpDisplayName, &buffer))
  22.             {
  23.                 CopyString (lpDisplayName, displayName, MAX_PATH);
  24.             }
  25.         }
  26.                
  27.         services++;
  28.  
  29.         initialRunxes->push_back(val);
  30.     }


El problema es que se supone que la función GetServiceDisplayName debe devolver el parámetro lpDisplayName y si la función se ejecuta bien retorna un valor distinto de cero por lo que se ejecutaría el if pero no entra al if por lo que la función está fallando y no se por que.

Si alguien puede ayudarme se los agradecería.
  #2 (permalink)  
Antiguo 05/10/2013, 07:55
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Problemas al usar función GetServiceDisplayName

Extracto de la referencia:

Código C:
Ver original
  1. GetServiceDisplayName
  2. ...
  3. Return Values:
  4. If the functions succeeds, the return value is nonzero.
  5. If the function fails, the return value is zero. To get extended error information, call GetLastError.

Si no entra al if llama a GetLastError para ver el codigo de error; para hacerlo mas amigable puedes usar la 'traduccion' del FormatMessage a ver que te dice:

Código C:
Ver original
  1. char* bff;
  2. FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, (char *)&bff, 0, 0);
  3. MessageBox(0, bff, 0, MB_OK);
  4. LocalFree(bff);

Siento no ser de mas ayuda

Saludos
vosk

p.s. una cosa, recuerda que para cada new necesitas un delete, te lo comento por el new que tienes dentro del for

Etiquetas: string, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:47.