эта ошибка появляется, когда я пытаюсь сделать две вещи.
при попытке этого (блок кода 1):
_class = new Proc(Process.GetProcessesByName("procname")[0]);
то в классе Proc происходит следующее:
public Proc(Process _SelectedProcess)
{
Process = _SelectedProcess;
}
public Process Process
{
get
{
return SelectedProcess;
}
set
{
SelectedProcess = value;
if (SelectedProcess != null)
{
Process.EnterDebugMode();
_Reader = new Win32_Memory(value.Handle, value.MainModule.BaseAddress.ToInt32(), value.Id);
}
}
}
Это один из способов, которыми я получаю исключение, иногда это проходит без каких-либо исключений без видимой причины, насколько я понимаю.
Примечание: он никогда не проходит в Windows 7, я использую Windows 10 и иногда бывает, что функция работает
но если это произойдет, в следующий раз, когда мне понадобится использовать OpenProcess () вне класса Process, я почти всегда получаю исключение, и если я это сделаю, то впоследствии он не сможет выполнить блок кода 1, если я попытаюсь сделать это снова.
this (блок кода 2) также получает ту же ошибку отказа в доступе, а иногда и не ...
if (_Reader.ReadInt(_addr) == 1) _Reader.Write(_addr, 0);
public bool Write(int address, long value)
{
hProc = OpenProcess(ProcessAccessFlags.VMWrite, false, ID);
byte[] val = BitConverter.GetBytes(value);
bool worked = WriteProcessMemory(hProc, new IntPtr(address), val, (uint)val.LongLength, 0);
CloseHandle(hProc);
return worked;
}
флаги доступа:
[Flags]
public enum ProcessAccessFlags : uint
{
All = 0x001F0FFF,
Terminate = 0x00000001,
CreateThread = 0x00000002,
VMOperation = 0x00000008,
VMRead = 0x00000010,
VMWrite = 0x00000020,
DupHandle = 0x00000040,
SetInformation = 0x00000200,
QueryInformation = 0x00000400,
Synchronize = 0x00100000
}
импорт:
[DllImport("kernel32.dll")]
private static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, int unused);
Также стоит отметить, что иногда весь этот код выполняется без ЛЮБОЙ ошибки и будет работать до тех пор, пока я не открою это приложение повторно или не перезапущу целевое приложение.
пожалуйста, помогите мне в этом, если я не совсем понял некоторые вещи - это мой первый вопрос, и мне действительно никогда не приходилось задавать его перед этим ... так что я объясню все необходимое позже