3

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

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

4

3 回答 3

7

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

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

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

于 2008-10-04T00:05:27.693 回答
4

可能导致这种情况的另一件事对 Vista 来说是新的:

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

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

DELETE READ_CONTROL WRITE_DAC WRITE_OWNER

于 2008-10-04T00:10:25.030 回答
0

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

于 2008-10-04T00:00:53.380 回答