/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: ProcessSectionFileMapView.NT.cpp Date: 2022-08-09 Author: Reece ***/ #include #include "ProcessSectionFileMapView.NT.hpp" #include "ProcessSectionView.NT.hpp" namespace Aurora::Process { ProcessSectionFileMapView::~ProcessSectionFileMapView() { Unmap(); } ProcessSectionFileMapView::ProcessSectionFileMapView(AuUInt uAddress, HANDLE hSection) : uAddress(uAddress), hFileSection(hSection) { } void ProcessSectionFileMapView::Unmap() { if (AuExchange(this->bIsDead_, true)) { return; } if (this->uAddress) { ::UnmapViewOfFile((PVOID)this->uAddress); this->uAddress = 0; } AuWin32CloseHandle(this->hFileSection); } bool ProcessSectionFileMapView::Flush(AuUInt offset, AuUInt length) { return ::FlushViewOfFile(this->GetPointer(offset), length); } AuUInt ProcessSectionFileMapView::GetBaseAddress() { return this->uAddress; } AuUInt ProcessSectionFileMapView::GetAddress(AuUInt offset) { return this->uAddress ? this->uAddress + offset : 0; } AuUInt8 *ProcessSectionFileMapView::GetBasePointer() { return AuReinterpretCast(this->uAddress); } AuUInt8 *ProcessSectionFileMapView::GetPointer(AuUInt offset) { return this->uAddress ? AuReinterpretCast(this->uAddress) + offset : 0; } }