Можно с помощью WinApi писать в память процесса. Для этого необходимо узнать Id процесса. По-моему, самый удобный способ это сделать, зная название процесса (имя исполняемого файла без расширения EXE или пути).
public static uint GetProcessID(string name)
{
return (uint)Process.GetProcessesByName(name)[0].Id;
}
После того, как найден Id процесса его нужно открыть для чтения/записи. Для этого нужно использовать функцию WinApi OpenProcess. dwDesiredAccess- модификатор доступа к процессу( 0x001F0FFF - полный доступ к процессу) dwProcessId- id процесса
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32 bInheritHandle, UInt32 dwProcessId);
IntPtr process_handle = OpenProcess(0x001F0FFF,1,process_id);
Функция открытия процесса возвращает handle процесса (как я понял указатель на него). process_handle далее нужно использовать для функция чтения и записи данных в память процесса.
Чтобы записать данные в память процесса можно использовать функцию WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte [] lpBuffer, uint nSize, out int lpNumberOfBytesWritten);
hProcess - handle процесса, lpBaseAddress - это адрес памяти, начиная с которого нужно записывать данные, lpBuffer - данные для записи, nSize - количество байтов для записи, lpNumberOfBytesWritten - точно не знаю, что означает, его можно оставить в значение UIntPtr.Zero
После работы с процессом нужно закрыть подключение к нему. hObject - handle процесса.
[DllImport("kernel32.dll")]
public static extern Int32 CloseHandle(IntPtr hObject);