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