WriteFile() Pipe Problem

NeXoN

Mitglied
Hallo,
ich wollte ein Programm schreiben was die Eingaben an die CMD sendet via CreatePipe();, dass Programm soll darauf hin auch die Antwort auslesen und ausgeben.

Der Quellcode dazu:
Code:
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <iostream.h>

#define BUFSIZE 512

int main(){
   HANDLE stdinRd, stdinWr, stdoutRd, stdoutWr;
   SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE};
   STARTUPINFO si;
   PROCESS_INFORMATION pi;
   DWORD stuff,st;
   char buff[BUFSIZE], recvBuff[500];
  
   
   if(!CreatePipe(&stdinRd, &stdinWr, &sa, 0) || !CreatePipe(&stdoutRd, &stdoutWr, &sa, 0)) {
       printf("Error Creating Pipes");
   }
   
   GetStartupInfo(&si);
   //si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
   si.dwFlags |= STARTF_USESTDHANDLES;
   si.wShowWindow = SW_HIDE;
   si.hStdOutput = stdoutWr;
   si.hStdError = stdoutWr;
   si.hStdInput = stdinRd;
   if(!CreateProcess("C:\\Windows\\System32\\cmd.exe", NULL, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) {
       printf("Error starting CMD");
   }
   
   while(1) {
	   Sleep(100);
	   printf("1");
       GetExitCodeProcess(pi.hProcess, &stuff);
       if(stuff != STILL_ACTIVE) break;
       
       PeekNamedPipe(stdoutRd, NULL, 0, NULL, &stuff, NULL);
       if(stuff != 0) {
		   printf("3");
           ZeroMemory(buff, sizeof(buff));
          do {
			  printf("2");
               ReadFile(stdoutRd, buff, BUFSIZE, &stuff, NULL);
			   printf(buff);
           } while(stuff == 1000);
       }
       
	   scanf("%s",recvBuff);
	   printf(recvBuff);
       WriteFile(stdinWr, recvBuff, strlen(recvBuff+1), &st, NULL);
	   Sleep(1000);
   }

   return 0;
}

Das erstmal auslesen funktioniert auch Einwandfrei nur wenn es dann darum geht das eingebene an die CMD zu senden und die Antwort auszugeben scheitert es. Ich hab auch einwenig rumprobiert und ich habe das gefühl das die Eingabe gar nicht richtig gesendet wird. Weil die Antwort von der CMD 0 Byte groß ist.

Kann mir jemand ein Tipp geben was Falsch sein könnte ?

Liebe Grüße.
 
Zurück