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未通过检测???