public byte[] ReadBytes(Int64 Address, int BytesCount) { var Buffer = new byte[BytesCount]; var lpNumberOfBytesRead = IntPtr.Zero; var AddressAsIntPtr = CastToIntPtrAvoidOverflow(Address); if (!AddressAsIntPtr.HasValue) { return(null); } var Error = Kernel32.ReadProcessMemory(ProcessHandle, AddressAsIntPtr.Value, Buffer, (IntPtr)Buffer.Length, out lpNumberOfBytesRead); var NumberOfBytesRead = (int)lpNumberOfBytesRead; if (NumberOfBytesRead < 1) { return(null); } if (Buffer.Length == NumberOfBytesRead) { return(Buffer); } return(Buffer.Take(NumberOfBytesRead).ToArray()); }
public ProcessMemoryReader( int ProcessId) { this.ProcessId = ProcessId; ProcessHandle = Kernel32.OpenProcess(Kernel32.PROCESS_ACCESS_RIGHT.PROCESS_VM_READ, 0, (uint)ProcessId); ModulesCache = ModulesOfProcess(ProcessId); }
public void Dispose() { Kernel32.CloseHandle(ProcessHandle); }