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:
Código:
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!