1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
 * PROJECT:     ReactOS Automatic Testing Utility
 * LICENSE:     GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
 * PURPOSE:     Class that creates a process and redirects its output to a pipe
 * COPYRIGHT:   Copyright 2015 Thomas Faber (thomas.faber@reactos.org)
 */

#include "precomp.h"

/**
 * Constructs a CPipedProcess object and starts the process with redirected output.
 *
 * @param CommandLine
 * A std::wstring containing the command line to run.
 *
 * @param Pipe
 * The CPipe instance to redirect the process's output to.
 * Note that only the read pipe is usable after the pipe was passed to this object.
 */
CPipedProcess::CPipedProcess(const wstring& CommandLine, CPipe& Pipe)
    : CProcess(CommandLine, InitStartupInfo(Pipe))
{
    Pipe.CloseWritePipe();
}

/**
 * Initializes the STARTUPINFO structure for use in CreateProcessW.
 *
 * @param Pipe
 * The CPipe instance to redirect the process's output to.
 */
LPSTARTUPINFOW
CPipedProcess::InitStartupInfo(CPipe& Pipe)<--- Parameter 'Pipe' can be declared with const
{
    ZeroMemory(&m_StartupInfo, sizeof(m_StartupInfo));
    m_StartupInfo.cb = sizeof(m_StartupInfo);
    m_StartupInfo.dwFlags = STARTF_USESTDHANDLES;
    m_StartupInfo.hStdInput  = GetStdHandle(STD_INPUT_HANDLE);
    m_StartupInfo.hStdOutput = Pipe.m_hWritePipe;
    m_StartupInfo.hStdError  = Pipe.m_hWritePipe;
    return &m_StartupInfo;
}