当我尝试做两件事时,出现了这个错误。
尝试此操作时(代码块1):
_class = new Proc(Process.GetProcessesByName("procname")[0]);
然后在课程中发生了什么
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,有时它会发生功能
但是如果它确实通过了,下次我需要在Process类之外使用OpenProcess()时,我几乎总是得到异常,如果我这样做,那么之后如果我尝试做的话它会无法执行代码块1再一次。
这个(代码块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);
还值得注意的是,有时所有这些代码都会在没有任何错误的情况下执行,只要我不重新打开此应用程序或者我没有重新启动目标应用程序,它就会起作用。
请帮我解决这个问题,如果我不清楚某些事情 - 这是我的第一个问题,我真的不需要在此之前问一个......所以我会在事后解释任何必要的事情
答案 0 :(得分:0)
如果您的上一条评论表明,这些过程确实与彼此无关,那么这就完全解释了AccessDeniedException。您不能仅修改任何随机进程的内存。那将是一个安全漏洞。
必须设置两个进程并同意以彼此共享内存。有很多方法可以在合作流程之间进行进程间通信:这里是一个开始:Shared memory between 2 processes (applications)