此错误出现时,我试图做两件事情,访问被拒绝。Win32异常:尝试使用OpenProcess
尝试这个(代码块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()的外进程类,我几乎总是得到异常,如果我这样做,然后再执行代码块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);
也值得注意的是,有时候所有这些代码都会在没有任何错误的情况下执行,并且只要我没有打开此应用程序,或者如果我不重新启动目标应用程序。
请帮我在这一个,如果我是不是对一些事情很明显 - 这是我的第一个问题,我还没有真的想知道这个人之前,先问一个......所以,我将解释什么必要事后
也许有些上下文会有帮助吗?什么是您在此尝试完成的*高级*任务。从表面上看,上面的东西看起来过于复杂。通常不需要直接导入内核并使用内存来操作子进程。像C#这样的安全语言的全部意义在于避免这种情况。 –
@modal_dialog我想改变一些属于另一个与我的进程无关的进程。就我所知,这是这样做的唯一途径。 –