All pastes #344950 Raw Edit

dfadsfasdf

public c v1 · immutable
·published 2007-02-08 03:42 UTC
rendered paste body
BOOL ProcessCommandLine(char * pcCommandLine, SOCKET s){    STARTUPINFO si;    PROCESS_INFORMATION pi;    SECURITY_ATTRIBUTES sa;    HANDLE hReadPipe, hWritePipe;    DWORD dwWaitResult = WAIT_TIMEOUT, dwBytesRead, dwExitCode, dwSizeLow, dwSizeHigh, dwError;    char cReadLine[MAX_LINE_LENGTH];    BOOL bDoRead = TRUE, bOK = TRUE;    MSG AppMsg;    ZeroMemory(&si, sizeof(si));    si.cb = sizeof(si);    //Pipes erzeugen    sa.nLength=sizeof(sa);    sa.bInheritHandle=TRUE;    sa.lpSecurityDescriptor=NULL;    bOK = CreatePipe(&hReadPipe, &hWritePipe, &sa, 1048576);    if(!bOK)    {        //FEHLER        dwError = GetLastError();        bOK = FALSE;        goto PROCESS_END_NOPIPE;    }    //Pipes eintragen    si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;    si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);    si.hStdOutput = hWritePipe;                        //Schreib-Ende der Pipe an Prozess übergeben    si.hStdError = hWritePipe;                        //Schreib-Ende der Pipe an Prozess übergeben    si.wShowWindow = SW_SHOWMINNOACTIVE;	//Prozess starten    bOK = CreateProcess(NULL,                        pcCommandLine,                        NULL,                        NULL,                        TRUE,                        NORMAL_PRIORITY_CLASS,                        NULL,                        NULL,                        &si,                        &pi);    if(!bOK)    {        //FEHLER        dwError = GetLastError();        goto PROCESS_END_NOPROC;    }    //Auf Ende warten und Messages lesen    while(dwWaitResult != WAIT_OBJECT_0)    {        dwWaitResult = WaitForSingleObject(pi.hProcess, 10);        while(dwSizeLow = GetFileSize(hReadPipe, &dwSizeHigh))        {            ZeroMemory(cReadLine, MAX_LINE_LENGTH);            //Aus dem Leseende der Pipe die Progzessausgaben lesen            if(bDoRead = ReadFile(hReadPipe, cReadLine, MAX_LINE_LENGTH - 1, &dwBytesRead, NULL))            {                if(dwBytesRead)                {                    //**** hier Programmausgabe verarbeiten (z.B. send) *******					send(s, cReadLine, 1023, 0);                }            }            else            {                bOK = FALSE;                dwError = GetLastError();            }        }        //Applikations-Messagequeue verarbeiten        if(PeekMessage(&AppMsg, 0, 0, 0, PM_NOREMOVE))        {            GetMessage(&AppMsg, 0, 0, 0);            TranslateMessage(&AppMsg);            DispatchMessage(&AppMsg);        }    }    if(bOK)    {        bOK = GetExitCodeProcess(pi.hProcess, &dwExitCode);        if(bOK)        {            if(dwExitCode != 0)            {                //Prozess kehrt mit Ergebnis != 0 zurück                bOK = FALSE;            }        }        else        {            //FEHLER im GetExitCodeProcess            dwError = GetLastError();            bOK = FALSE;        }    }    //Close handles    CloseHandle(pi.hProcess);    CloseHandle(pi.hThread);PROCESS_END_NOPROC:    CloseHandle(hWritePipe);    CloseHandle(hReadPipe);PROCESS_END_NOPIPE:    return bOK;}