Как избавится от System.AccessViolationException, возникающего в ReadProcessMemory? C#

Я пытаюсь прочесть значение, записанное в области памяти по адресу 1AD98845170. Там лежит символ 'd', соответственно значение, записанное в этой области - это 64. Эту информацию я взял из Cheat Engine. Но прочесть эту же область памяти в моём приложении на C# я не могу. Оно падает с исключением System.AccessViolationException. В качестве процесса выступает стандартный Блокнот Windows 10. Я совершенно не могу понять в чём проблема. Прошу помочь. P.S.: На англоязычном stack'е ссылались на топик: https://stackoverflow.com/questions/46431860/how-to-use-readprocessmemory , но он мне не помог.

[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);

[DllImport("kernel32.dll")]
public static extern bool ReadProcessMemory(IntPtr hProcess, Int64 lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead);

public void button_Click(object sender, EventArgs e)
{
        Process process = Process.GetProcessesByName("notepad")[0];
        IntPtr processHandle = OpenProcess(0x0010, false, process.Id);
        int bytesRead = 0;
        byte[] buffer = new byte[12];
        ReadProcessMemory(processHandle, 0x1AD98845170, buffer, buffer.Length, ref bytesRead); // problem is here
        string res = Encoding.Unicode.GetString(buffer) + " (" + bytesRead.ToString() + "bytes)";
        textBox.Text = res.ToString();
}

Ответы (1 шт):

Автор решения: unit8379

ReadProcessMemory объявлена для 64-разрядного процесса, а сама программа, была 32-разрядная, отсюда и падение. По ссылке находится рабочий пример для 32-разрядного процесса, но он бы всё равно не помог, так как адрес 0x1AD98845170 не подходит для 32-разрядного адресного пространства.

→ Ссылка