r5sdk/r5dev/thirdparty/cppnet/cppkore/ProcessStream.h
Kawe Mazidjatari 04bee896be Fix string/wstring type conflict
cppkore uses string/wstring as StringBase while we use std::string/std::wstring as string/wstring. Changed all types in cppkore to String/WString instead.
2022-05-21 21:51:35 +02:00

52 lines
1.5 KiB
C++

#pragma once
#include <memory>
#include <Windows.h>
#include "Stream.h"
#include "StringBase.h"
namespace IO
{
// ProcessStream supports reading and writing from processes
class ProcessStream : public Stream
{
public:
ProcessStream();
ProcessStream(uint32_t PID);
ProcessStream(const String& ProcessName);
ProcessStream(HANDLE ProcessHandle);
ProcessStream(HANDLE ProcessHandle, bool LeaveOpen);
virtual ~ProcessStream();
// Implement Getters and Setters
virtual bool CanRead();
virtual bool CanWrite();
virtual bool CanSeek();
virtual bool GetIsEndOfFile();
virtual uint64_t GetLength();
virtual uint64_t GetPosition();
virtual void SetLength(uint64_t Length);
virtual void SetPosition(uint64_t Position);
// Implement functions
virtual void Close();
virtual void Flush();
virtual void Seek(uint64_t Offset, SeekOrigin Origin);
virtual uint64_t Read(uint8_t* Buffer, uint64_t Offset, uint64_t Count);
virtual uint64_t Read(uint8_t* Buffer, uint64_t Offset, uint64_t Count, uint64_t Position);
virtual void Write(uint8_t* Buffer, uint64_t Offset, uint64_t Count);
virtual void Write(uint8_t* Buffer, uint64_t Offset, uint64_t Count, uint64_t Position);
// Retreive the internal process handle
virtual HANDLE GetProcessHandle() const;
private:
// Process flags cached
bool _KeepOpen;
HANDLE _ProcessHandle;
uint64_t _Position;
// Sets up the ProcessStream
void SetupStream(HANDLE ProcessHandle, bool LeaveOpen);
};
}