VC++ 2008,OpenProcess 总是返回错误 5(拒绝访问)

Posted

技术标签:

【中文标题】VC++ 2008,OpenProcess 总是返回错误 5(拒绝访问)【英文标题】:VC++ 2008, OpenProcess always returning error 5 (Access Denied) 【发布时间】:2008-10-03 23:49:32 【问题描述】:

当我尝试使用 PROCESS_ALL_ACCESS 作为我想要的访问权限调用 OpenProcess 时,有谁知道为什么 MSVC++ 2008 总是在 GetLastError() 上返回错误 5? PROCESS_VM_READ 工作得很好。我是这台计算机的管理员,它在 Dev C++ 中运行良好。

我需要在某处设置选项吗?

【问题讨论】:

【参考方案1】:

如果不是在您的凭据下或在您的登录会话中运行的进程,则打开具有完全访问权限的进程可能是一项高特权操作 - 您需要遵循 MSDN 中的以下文档:

打开另一个进程的句柄 并获得完全访问权限,您 必须启用 SeDebugPrivilege 特权。有关详细信息,请参阅 更改令牌中的权限。

请记住,即使您拥有特权,但在大多数情况下,该特权并未启用 - 必须在尝试使用该特权的代码中专门启用它。

【讨论】:

【参考方案2】:

另一个可能导致此问题的原因是 Vista 的新功能:

Windows Vista 引入了受保护的 加强支持的流程 数字版权管理。系统 限制访问受保护的 进程和受保护的线程 进程。

以下标准访问权限 不允许从一个进程到一个 受保护的进程:

DELETE READ_CONTROL WRITE_DAC WRITE_OWNER

【讨论】:

【参考方案3】:

是哪个进程?在另一个用户会话中打开服务或进程可能会返回拒绝访问 (5)。另一个会话中的进程将打开以供读取,但您将无法调试它。这是 Windbg 具有非侵入式附加功能的原因之一。它适用于用户会话。你实际上并没有调试。它暂停所有线程并正在读取内存。

【讨论】:

以上是关于VC++ 2008,OpenProcess 总是返回错误 5(拒绝访问)的主要内容,如果未能解决你的问题,请参考以下文章

win7系统,Visual C++ 2008 redistributable 总是安装不上,

VS08 总是出现 fatal error LNK1104: 无法打开文件“kernel32.lib”

装Kingbase ES V7时为啥依赖检测时,总是提示我说Microsoft Visual C++ 2008未通过检测???

为啥 isset($this->var) 在我的 Codeigniter 模型中总是返​​回 false?

从命令行将 vc++6 项目升级到 vc++ 2008

使用 VS 2013 构建 VC++ 2008 项目