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

C# Usage Snippet:

   public bool Wpm<T>(IntPtr lpBaseAddress, T value) where T : struct
    {
        var buffer = new T[SizeOf<T>()];
        buffer[0] = value;
        return WriteProcessMemory(_gameProcess.Process.Handle, lpBaseAddress, buffer, 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);
    }