我尝试使用该OpenProcess
函数获取正在运行的进程的句柄。但是,当检查错误代码时,我得到一个错误代码 6 (ERROR_INVALID_HANDLE)。
这是一个简化的示例:
using System;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace Test
{
class TestClass
{
[DllImport("kernel32.dll")]
static extern uint GetLastError();
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess,
bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(int hProcess, int lpBaseAddress,
byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesWritten);
static void Main()
{
var process = Process.GetProcessesByName("Sample")[0];
var processHandle = OpenProcess(0x001F0FFF, false, process.Id);
Console.WriteLine(GetLastError());
int bytesRead = 0;
byte[] buffer = BitConverter.GetBytes(1095090201);
WriteProcessMemory(
(int)processHandle,
0x21F3CAAC,
buffer,
buffer.Length,
ref bytesRead);
Console.ReadKey();
}
}
}
}
我不确定为什么它不起作用。它只返回错误代码 6。有什么建议吗?
我不知何故感觉这是因为我正在访问的程序,但其他一切都运行良好并且没有返回任何其他错误。