wiedermal pipes :)



  • Hi leute. Hab mich jetzt echt hier durch die komplette forensuche durchgehangelt. Ich will einfach die ausgaben der cmd auslesen und neue befehle eintippen können - remote.
    Hab mir da mal bissl was zamgebastelt:

    char buf[512];
        DWORD dummy, dummy2;
        HANDLE Read, Write;
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        SECURITY_ATTRIBUTES sa;
    
        ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
        ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
        ZeroMemory(&si, sizeof(STARTUPINFO));
    
        sa.nLength = sizeof(SECURITY_ATTRIBUTES);
        sa.bInheritHandle = true;
        sa.lpSecurityDescriptor = NULL;
    
        memset(buf, 0, sizeof(buf));
        CreatePipe(&Read, &Write, &sa, NULL);
        strcpy(buf, "mkdir C:\\testfolder\r\n");
        WriteFile(Write, buf, strlen(buf)+1, &dummy, NULL);
    
        si.cb          = sizeof(STARTUPINFO);
        si.dwFlags     = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
        si.hStdInput   = Read;
        si.hStdOutput  = Write;
        si.hStdError   = Write;
        si.wShowWindow = SW_HIDE;
    
        if(!CreateProcess(NULL, buf, NULL, NULL, TRUE, 0, NULL, "C:\\", &si, &pi)) {
            sprintf(buf, "Errornum: %d", GetLastError);
            MessageBox(NULL, "error", buf, MB_OK | MB_ICONSTOP);
            return -1;
        }
    
        memset(buf, 0, sizeof(buf));
        ReadFile(Read, buf, sizeof(buf), &dummy2, NULL);
    
        MessageBox(NULL, buf, "bla", MB_OK | MB_ICONINFORMATION);
    

    CreateProcess() schlägt fehl. Hab auch schon probiert statt "C:\" NULL zu nehmen wie ich es oft gesehen habe.

    so long..
    mfg jghj



  • MSDN: Creating a Child Process with Redirected Input and Output

    Ansonsten: Was für einen Fehler bekommst du denn von CreateProcess - GetLastError?!



  • bei dem msdn sample machen die das mit childprozessen etc. und ich denke das müsste man doch eigtl garnicht alles brauchen oder? Ich will ja eigtl nur einen befehl ausführen (in meinem bsp jetzt mkdir testfolder) und einfach den output bekommen.
    GetLastError() gibt errorcode 2 zurück.



  • jghj schrieb:

    bei dem msdn sample machen die das mit childprozessen etc. und ich denke das müsste man doch eigtl garnicht alles brauchen oder?

    Doch, ich denke schon, dass du den Code weitgehend so brauchst.

    jghj schrieb:

    Ich will ja eigtl nur einen befehl ausführen (in meinem bsp jetzt mkdir testfolder) und einfach den output bekommen.
    GetLastError() gibt errorcode 2 zurück.

    2 The system cannot find the file specified. ERROR_FILE_NOT_FOUND

    Du musst imho die Shell starten, und dort den Befehl ausführen 😉



  • ok hab jetzt einfach mal den command mit dem cmd pfad davor eingetippt. Fehler von CreateProcess kommt keiner mehr .... was ich jetzt aber seeehhhrrr seltsam finde, in dem folder, in dem die exe liegt werden 4 dateien erstellt die so heißen: "(C), der, konnte, Microsoft"
    also das weiß ich echt nicht was das sein soll 😉



  • Wenn du die cmd.exe startest siehst du ganz oben folgendes (so sieht es bei mir unter W2k aus):

    Microsoft Windows 2000 [Version 5.00.2195]
    (C) Copyright 1985-2000 Microsoft Corp.

    Evtl. hängt es damit zusammen.
    Aber schau dir auch mal die Parameter von cmd.exe mit /? an. Du kannst den Befehl nicht einfach direkt anhängen - ich denke du bräuchtest /c.

    Aber warum nimmst du nicht einfach direkt CreateFile 😕


Anmelden zum Antworten