Reece Wilson
433898709e
[*] _beginthreadex returns null, nonex returns -1, and it doesnt fucking work with affinity but seems to work with name updates. i dont care to fix this yet. fuck microsoft. [*] NT: preempt process watch thread of leaders instead of syncing to the process under a watch guard on free (evil, we should use a builtin nt threadpool. also cant be arsed to resolve)
80 lines
2.2 KiB
C++
80 lines
2.2 KiB
C++
/***
|
|
Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
|
|
|
File: Process.NT.hpp
|
|
Date: 2022-1-29
|
|
Author: Reece
|
|
***/
|
|
#pragma once
|
|
|
|
#include <Source/IO/FS/Async.NT.hpp>
|
|
|
|
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<Threading::IWaitable> AsWaitable() override;
|
|
AuSPtr<AuLoop::ILoopSource> AsLoopSource() override;
|
|
AuSInt GetExitCode() override;
|
|
|
|
void ShutdownPipes();
|
|
|
|
bool Read(EStandardHandle stream, const AuMemoryViewStreamWrite &destination, bool nonblock) override;
|
|
bool Write(const AuMemoryViewStreamRead &source) override;
|
|
|
|
AuSPtr<IO::IAsyncTransaction> NewAsyncTransaction() override;
|
|
AuSPtr<IO::IAsyncTransaction> 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<AuLoop::ILoopSource> loopSource_;
|
|
|
|
AuSPtr<IO::FS::FileHandle> fsHandle_;
|
|
AuSPtr<IO::FS::NtAsyncFileStream> fsStream_;
|
|
|
|
AuSPtr<IO::FS::FileHandle> fsErrorHandle_;
|
|
AuSPtr<IO::FS::NtAsyncFileStream> fsErrorStream_;
|
|
|
|
StartupParmaters startup_;
|
|
ESpawnType type_;
|
|
|
|
AuList<const char *> cargs_;
|
|
AuString windowsCli_;
|
|
|
|
AuThreads::ThreadUnique_t thread_;
|
|
HANDLE poke_ {INVALID_HANDLE_VALUE};
|
|
HANDLE process_ {INVALID_HANDLE_VALUE};
|
|
HANDLE hthread_ {INVALID_HANDLE_VALUE};
|
|
AuSInt exitCode_;
|
|
};
|
|
} |