?
Hi
Doch das kann man zbsp. mit unnamed pipe's machen !
Hier ein kleiner bsp. Code den ich aus einem meiner Project habe, und für dich ein wenig zurecht rücken frickeln muss. Also mich nicht weichklopfen wen irgendwelche variablen nicht Stimmen oder weis ich was. Doch werde schauen das alles recht ist.
Edit: Das wird ein bisschen Zeitaufwendig wen ich alles anpassen und schön machen möchte. Daher muss das reichen.
über unnamed pips kannst du dich bei MSDN informieren. Ansonnsten kannst du ja fragen.
unsigned long long ReadOfPipeFTShell(char *command)
{
/* Structs */
SECURITY_ATTRIBUTES secattrib;
HANDLE rPipe;
HANDLE wPipe;
STARTUPINFO sInfo;
PROCESS_INFORMATION pInfo;
/* Process buffer's */
char process[]={"cmd.exe /K "};
char commandbuf[2048];
char buf[1];
unsigned long reDword=0;
unsigned long long len=0;
int res;
/* Struktur SEC_ATT definieren for Pipe */
ZeroMemory(&secattrib,sizeof(secattrib));
secattrib.nLength = sizeof(secattrib);
secattrib.bInheritHandle = TRUE;
/* Create Pipe */
CreatePipe(&rPipe ,&wPipe ,&secattrib ,0);
/* StartupInfo struktur definieren für Process */
ZeroMemory(&sInfo,sizeof(sInfo));
ZeroMemory(&pInfo,sizeof(pInfo));
sInfo.cb = sizeof(sInfo);
sInfo.dwFlags = STARTF_USESTDHANDLES;
sInfo.hStdInput = NULL;
sInfo.hStdOutput= wPipe;
sInfo.hStdError = wPipe;
strcpy(commandbuf, process);
/* Buffer overflow protect */
if(strlen(command)>1024) {
strncat(commandbuf ,command ,1024);
} else {
strncat(commandbuf ,command ,strlen(command));
}
/* Create Process */
CreateProcess( 0 ,commandbuf ,0 ,0 ,TRUE ,NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW ,0 ,0 ,&sInfo ,&pInfo );
/* Nach schreiben des Output in wPipe, Pipe schliessen */
CloseHandle(wPipe);
/* Read from Pipe */
do
{
res = ReadFile(rPipe,buf ,1 ,&reDword ,0);
printf("%c",buf);
}
while(res);
/* Read pipe close */
CloseHandle(rPipe);
/* Close process-handles */
CloseHandle(pInfo.hProcess);
CloseHandle(pInfo.hThread);
/* Return Buffer size */
return len;
}
lowbyte