OpenProcess error code 5
Пытаюсь записать байты в память но не могу открыть процесс. handle возвращает 0, а Marshal.GetLastWin32Error() возвращает 5. Из System Error Codes (0-499) следует, что 5 это
ERROR_ACCESS_DENIED
5 (0x5)
Access is denied.
но пользователь является администратором, и владельцем указан администратор этого компьютера:
internal Process _process { get; private set; }
[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr OpenProcess(
ProcessAccessFlags processAccess,
bool bInheritHandle,
int processId
);
[DllImport("kernel32.dll", SetLastError = true)]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[SuppressUnmanagedCodeSecurity]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CloseHandle(IntPtr hObject);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(
IntPtr hProcess,
UIntPtr lpBaseAddress,
byte[] lpBuffer,
UIntPtr nSize,
out UIntPtr lpNumberOfBytesWritten
);
[Flags]
public enum ProcessAccessFlags : uint
{
All = 0x001F0FFF,
Terminate = 0x00000001,
CreateThread = 0x00000002,
VirtualMemoryOperation = 0x00000008,
VirtualMemoryRead = 0x00000010,
VirtualMemoryWrite = 0x00000020,
DuplicateHandle = 0x00000040,
CreateProcess = 0x000000080,
SetQuota = 0x00000100,
SetInformation = 0x00000200,
QueryInformation = 0x00000400,
QueryLimitedInformation = 0x00001000,
Synchronize = 0x00100000
}
private IntPtr OpenProcess(Process proc, ProcessAccessFlags flags)
{
return OpenProcess(flags, false, proc.Id);
}
private void WriteBytes()
{
var adress = (UIntPtr) 0x88406F0C;
byte[] bytes = { 0x74, 0x27, 0x00, 0x00 };
var size = (UIntPtr) 4;
var writtenBytes = new UIntPtr();
var handle = OpenProcess(_process, ProcessAccessFlags.All);
if (handle == IntPtr.Zero)
{
MessageBox.Show(Marshal.GetLastWin32Error().ToString());
}
WriteProcessMemory(handle, adress, bytes, size, out writtenBytes);
CloseHandle(handle);
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Привелегия администратора означает, что вы можете запускать софт в привелигированном режиме, а не всегда запусааете.
Попробуйте запуститься "от имени Администратора", или студию перезапустите от имени администратора для отладки.
Альтернативно можно полностью отключить Контроль учетных записей (UAC).

