関数を使用して、実行中のプロセスへのハンドルを取得しようとしてい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 が返されるだけです。
アクセスしているプログラムが原因であると感じていますが、他のすべては正常に実行されており、他のエラーは返されません。