private unsafe int Read(SafeProcessHandle handle, uint offset, uint size, byte *pBuffer)
{
if (Address == IntPtr.Zero)
{
throw new ObjectDisposedException("RemoteMemoryRegion");
}
if ((offset + size) > Size)
{
throw new ArgumentException("Size too large for region");
}
int bytesRead = 0, result;
result = Win32.ReadProcessMemory(
handle.DangerousGetHandle(),
(uint)(Address.ToInt64() + offset),
new IntPtr(pBuffer), size, out bytesRead
);
if (result == 0 || bytesRead != size)
{
var error = Win32.GetLastError();
throw new Exception(String.Format("Read failed: Error {0:x8}", error));
}
return(bytesRead);
}