WriteProcessMemory (kernel32)
Last changed: 109.202.69.200

.

VB.NET Signature:

<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

C# Signature:

[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);

Boo Signature:

[DllImport("kernel32.dll")]
def WriteProcessMemory(hProcess as IntPtr, lpBaseAddress as IntPtr, lpBuffer as (byte), nSize as int, ref lpNumberOfBytesWritten as int) as bool:
     pass

C# Generic Usage Snippet: (Also added RPM-> ReadProcessMemory example)

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);
    }