当我尝试使用PROCESS_ALL_ACCESS作为我所需的访问权限调用OpenProcess时,有谁知道为什么MSVC ++ 2008总是在GetLastError()上返回错误5? PROCESS_VM_READ工作正常。我是这台计算机的管理员,它在Dev C ++中运行良好。
我需要在某处设置选项吗?
答案 0 :(得分:7)
如果不是在您的凭据下或登录会话中运行的进程,则打开具有完全访问权限的进程可能是一项高权限操作 - 您需要按照MSDN中的这些文档进行操作:
打开另一个进程的句柄 并获得完全访问权限 必须启用SeDebugPrivilege 特权。有关更多信息,请参阅 更改令牌中的权限。
请记住,即使您有权限,在大多数情况下也不会启用该权限 - 必须在尝试使用该权限的代码中专门启用该权限。
答案 1 :(得分:3)
可能造成这种情况的另一件事是Vista新手:
Windows Vista引入了受保护的版本 加强支持的流程 数字版权管理。系统 限制对受保护的访问 进程和受保护的线程 过程
以下标准访问权限 不允许从进程到 受保护的过程:
DELETE
READ_CONTROL
WRITE_DAC
WRITE_OWNER
答案 2 :(得分:0)
是哪个过程?在另一个用户会话中打开服务或进程可能会返回拒绝访问(5)。另一个会话中的进程将打开以供读取,但您将无法对其进行调试。这是Windbg具有非侵入性附着的一个原因。它适用于用户会话。你实际上没有调试。它挂起所有线程并正在读取内存。