[C] [AYUDA] Problema ejecutando comando en XP 32bits

Iniciado por DrKillador, 22 Febrero 2013, 10:44 AM

0 Miembros y 2 Visitantes están viendo este tema.

DrKillador

Hi! Les comento un problema a ver si pueden ayudarme.

He programado una shell en C para Win, que me permite ejecutar comandos. Para ello utilizo las 2 siguientes funciones:

char* ReadAndHandleOutput(HANDLE hPipeRead)
{
   char lpBuffer[256]="";
   DWORD nBytesRead;
   char *partialResult;
   char result[10000]="";
   while(1)
   {
       if (!ReadFile(hPipeRead,lpBuffer,sizeof(lpBuffer),&nBytesRead,NULL) || !nBytesRead)
       {
           if (GetLastError() == ERROR_BROKEN_PIPE)
               break; // pipe done - normal exit path.
       }
       partialResult = (char *) malloc(10000);
       strncpy(partialResult,lpBuffer,nBytesRead);
       sprintf(result,"%s%s",result,partialResult);
   }
   return result;
}

char* executeCommand(char *argument)
{
   SECURITY_ATTRIBUTES sa;
   STARTUPINFO si;
   PROCESS_INFORMATION pi;

   void * leer;
   void * escribir;

   ZeroMemory(&sa,sizeof(&sa));

   sa.nLength = sizeof(SECURITY_ATTRIBUTES);
   sa.bInheritHandle = TRUE;
   sa.lpSecurityDescriptor = NULL;

   CreatePipe(&leer,&escribir,&sa,0);

   GetStartupInfoA(&si);

   si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
   si.wShowWindow = SW_HIDE;
   si.hStdOutput = escribir;
   si.hStdError  = escribir;
   si.hStdInput = leer;

   CreateProcess(0,argument,0,0,TRUE,0,NULL,NULL,&si,&pi);

   CloseHandle(escribir);

   return ReadAndHandleOutput(leer);
}


La shell me funciona perfectamente en Windows Vista y 7 (tanto en 32 como en 64bits), pero en XP (32bits) el programa se me queda pillado en la siguiente instrucción:

if (!ReadFile(hPipeRead,lpBuffer,sizeof(lpBuffer),&nBytesRead,NULL) || !nBytesRead)

No consigo dar con el error por el que en XP se queda pillado en ese punto del código, porque el programa no se para, sigue funcionando sin hacer nada...

Por si les sirve el dato, he probado a escribir en un fichero un dato justo antes del IF ese que da el problema y despues, y el fichero lo deja pillado, porque no llega a la instruccion de cierre (logicamente).

La lectura la hago sincrona, poniendo la ultima variable de la llamada a ReadFile a NULL, asi que no veo donde puede estar el problema :/

Cualquier ayuda se la agradezco, que ando perdiendo mucho tiempo con esto

saludoss
Python <3 Python

DrKillador

El problema parece que viene por el handle, pq sí le pongo una cadena a pelo en la cabecera de la llamada a ReadAndHandleOutput()  sí q avanza...

Ideas?
Python <3 Python