繁体   English   中英

Win32 异常:尝试使用 OpenProcess 时拒绝访问

[英]Win32 Exception: Access is denied while attempting to use 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,有时该功能会起作用

但是如果它确实通过了,下次我需要在 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);

还值得注意的是,有时所有这些代码都会在没有任何错误的情况下执行,并且只要我不重新打开此应用程序或不重新启动目标应用程序,它就会起作用。

请帮我解决这个问题,如果我对某些事情不清楚 - 这是我的第一个问题,我真的不需要在这个问题之前问一个......所以我会在之后解释任何必要的

如果正如您的最后一条评论所表明的那样,这些进程之间确实没有任何关系,那么这恰好解释了 AccessDeniedException。 您不能随意修改任何随机进程的内存。 那将是一个安全漏洞。

必须设置两个进程并同意彼此共享内存。 有很多方法可以在协作进程之间进行进程间通信:这里有一个开始: 2个进程(应用程序)之间的共享内存

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM