C#OpenProcess返回为0的问题

同样的代码,只修改进程名字和内存地址,植物大战僵尸可以正常取值,暗黑2无法取出,代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace 读内存地址
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImportAttribute("kernel32.dll", EntryPoint = "ReadProcessMemory")]
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int nSize, IntPtr lpNumberOfBytesRead);
[DllImportAttribute("kernel32.dll", EntryPoint = "WriteProcessMemory")]
public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, int[] lpBuffer, int nSize, IntPtr lpNumberOfBytesWritten);
[DllImportAttribute("kernel32.dll", EntryPoint = "OpenProcess")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll")]
private static extern void CloseHandle(IntPtr hObject);
public static int GetPidByProcessName(string processName)
{
Process[] arrayProcess = Process.GetProcessesByName(processName);

        foreach (Process p in arrayProcess)
        {
            return p.Id;
        }
        return 0;
    }
    public static int ReadMemoryValue(int baseAddress, string processName)
    {
        try
        {
            byte[] buffer = new byte[4];
            IntPtr byteAddress = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0);
            IntPtr hProcess = OpenProcess(0x1F0FFF, false, GetPidByProcessName(processName));
            ReadProcessMemory(hProcess, (IntPtr)baseAddress, byteAddress, 4, IntPtr.Zero);//这里断点hProcess为0,但植物大战僵尸是1,是不是OpenProcess这里错了
            CloseHandle(hProcess);
            return Marshal.ReadInt32(byteAddress);//是不是这里的方法不对
        }
        catch
        {
            return 1;
        }
    }
    private int baseAddress = 0x049F076C;  
    private string processName = "Game";  
    private void button1_Click(object sender, EventArgs e)
    {
        if (GetPidByProcessName(processName) == 0)
        {
            MessageBox.Show("游戏没有运行!");
            return;
        }
        if (button1.Text == "开启")
        {
            button1.Text = "关闭";
            timer1.Enabled = true;
        }
        else
        {
            button1.Text = "开启";
            int address = ReadMemoryValue(baseAddress, processName);
            label1.Text = address.ToString();
        }

    }

}

}