[PROBLEMA] Ejecución de comandos en consola (dir vs ipconfig) Qué puede ocurrir?

Iniciado por DrKillador, 3 Enero 2013, 19:36 PM

0 Miembros y 1 Visitante están viendo este tema.

DrKillador

Hola! Les expongo un problema con el que me he encontrado mientras desarrollaba una app.

Dispongo de una app web en asp que envia instrucciones de CMD a un agente C desplegado en una máquina Windows.

Las instrucciones que recibe el agente las ejecuta utilizando las siguientes funciones, y el resultado es enviado de nuevo a la aplicación web asp:

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;
        }
        partialResult = (char *) malloc(10000);
        strncpy(partialResult,lpBuffer,nBytesRead);
        sprintf(result,"%s%s",result,partialResult);
    }
    return result;
}

//Ejecuta un comando de CMD
char* execute(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);
}


Funciona correctamente si le solicito comandos como "ipconfig", "arp -a" o "systeminfo" (me devuelve el resultado del comando perfectamente) pero si le solicito que me haga un "dir" o un "powershell ls", no los ejecuta.

¿Alguna idea de que puede ocurrir? Me estoy rayando :S

gracias!
Python <3 Python