40 lines
1.0 KiB
C++
40 lines
1.0 KiB
C++
#include "MemorySaver.h"
|
|
|
|
void* MemorySaver::operator new(size_t sz)
|
|
{
|
|
void* p = MemAllocLocal(sz);
|
|
return p;
|
|
}
|
|
|
|
void MemorySaver::operator delete(void* p) noexcept
|
|
{
|
|
MemFreeLocal(&p, sizeof(MemorySaver));
|
|
}
|
|
|
|
MemorySaver::MemorySaver(){}
|
|
|
|
void MemorySaver::WriteMemoryData(ULONG memoryId, ULONG totalSize, ULONG dataSize, PBYTE data)
|
|
{
|
|
if ( !chunks.contains(memoryId) ) {
|
|
MemoryData memoryData = { 0 };
|
|
memoryData.memoryId = memoryId;
|
|
memoryData.totalSize = totalSize;
|
|
memoryData.buffer = (PBYTE) MemAllocLocal(totalSize);
|
|
|
|
chunks[memoryId] = memoryData;
|
|
}
|
|
|
|
memcpy( chunks[memoryId].buffer + chunks[memoryId].currentSize, data, dataSize );
|
|
chunks[memoryId].currentSize += dataSize;
|
|
|
|
if (chunks[memoryId].currentSize == chunks[memoryId].totalSize)
|
|
chunks[memoryId].complete = true;
|
|
}
|
|
|
|
void MemorySaver::RemoveMemoryData(ULONG memoryId)
|
|
{
|
|
if (chunks[memoryId].buffer)
|
|
MemFreeLocal((LPVOID*)(&chunks[memoryId].buffer), chunks[memoryId].totalSize);
|
|
chunks[memoryId] = { 0 };
|
|
chunks.remove(memoryId);
|
|
} |