/* * 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) { 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; }