<DllImport("kernel32.dll", SetLastError:=True)> _
Public Shared Function WriteProcessMemory(
ByVal hProcess As IntPtr,
ByVal lpBaseAddress As IntPtr,
ByVal lpBuffer As Byte(),
ByVal nSize As Int32,
<Out()> ByRef lpNumberOfBytesWritten As IntPtr) As Boolean
End Function
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool WriteProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
byte[] lpBuffer,
Int32 nSize,
out IntPtr lpNumberOfBytesWritten);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool WriteProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
[MarshalAs(UnmanagedType.AsAny)] object lpBuffer,
int dwSize,
out IntPtr lpNumberOfBytesWritten);
[DllImport("kernel32.dll")]
def WriteProcessMemory(hProcess as IntPtr, lpBaseAddress as IntPtr, lpBuffer as (byte), nSize as int, ref lpNumberOfBytesWritten as int) as bool:
pass
public bool Wpm<T>(IntPtr lpBaseAddress, T value) where T : struct
{
var buffer = new T[Marshal.SizeOf<T>()];
buffer[0] = value;
return WriteProcessMemory(_gameProcess.Process.Handle, lpBaseAddress, buffer, Marshal.SizeOf<T>(), out var bytesread);
}
public bool Wpm<T>(IntPtr lpBaseAddress, T value, List<int> offsets) where T : struct
{
IntPtr address = lpBaseAddress;
var lastOffset = offsets.Last();
offsets.RemoveAt(offsets.Count - 1);
foreach (var offset in offsets)
{
address = Rpm<IntPtr>(IntPtr.Add(address, offset));
}
return Wpm<T>(IntPtr.Add(address, lastOffset), value);
}