/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuProcess.NT.hpp Date: 2022-1-29 Author: Reece ***/ #pragma once #include namespace Aurora::Processes { struct ProcessImpl : IProcess { ProcessImpl(const StartupParmaters ¶ms); ~ProcessImpl(); bool TermWinEnumProcesses(); bool TryKill() override; bool HasExited(); AuUInt GetProcessId() override; bool Terminate() override; AuSPtr AsWaitable() override; AuSPtr AsLoopSource() override; AuSInt GetExitCode() override; void ShutdownPipes(); bool Read(EStandardHandle stream, const AuMemoryViewStreamWrite &destination, bool nonblock) override; bool Write(const AuMemoryViewStreamRead &source) override; AuSPtr NewAsyncTransaction() override; AuSPtr NewErrorStreamAsyncTransaction() override; bool Start() override; bool Init(); void RelOtherHandles(); private: HANDLE pipeStdOutRead_ {INVALID_HANDLE_VALUE}; HANDLE pipeStdOutWrite_ {INVALID_HANDLE_VALUE}; HANDLE pipeStdErrRead_ {INVALID_HANDLE_VALUE}; HANDLE pipeStdErrWrite_ {INVALID_HANDLE_VALUE}; HANDLE pipeStdInRead_ {INVALID_HANDLE_VALUE}; HANDLE pipeStdInWrite_ {INVALID_HANDLE_VALUE}; bool bDontRelOut_ {}; bool bDontRelIn_ {}; bool bDontRelErr_ {}; AuSPtr loopSource_; AuSPtr fsHandle_; AuSPtr fsStream_; AuSPtr fsErrorHandle_; AuSPtr fsErrorStream_; StartupParmaters startup_; ESpawnType type_; AuList cargs_; AuString windowsCli_; AuThreads::ThreadUnique_t thread_; HANDLE poke_ {INVALID_HANDLE_VALUE}; HANDLE process_ {INVALID_HANDLE_VALUE}; HANDLE hthread_ {INVALID_HANDLE_VALUE}; AuSInt exitCode_; }; }