gpt4 book ai didi

c++ - 从编译器运行时和作为独立 exe 运行时,进程访问权限似乎有所不同

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:46 26 4
gpt4 key购买 nike

我正在为我正在编写的程序使用 WINAPI。该程序具有另一个进程的 ProcessId,需要获取它的句柄(以便稍后能够终止它,并定期检查该进程是否存在并使用 WaitForSingleObject 进行响应)。当我编译我的程序时(在 Embarcadero RAD Studio 2010 C++ Builder 中),它运行良好;该程序似乎成功获得句柄并且通常按预期工作。但是,如果我从文件夹中将它作为独立的 exe 启动,它似乎无法正确获取句柄。我通过比较检查了它(Companion 是一个 HANDLE,Companion_PID 是一个 DWORD):

GetProcessId(Companion)

Companion_PID

在前面几行中,Companion 取自以下代码中的 Companion_PID:

Companion = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Companion_PID);

“GetProcessId(Companion)”结果为 0(这是 OpenProcess 未能返回正确句柄的好兆头。

令我惊讶的是,这段代码在从编译器运行时和作为独立 exe 运行时的工作方式不同;我假设在第一种情况下安全属性是从编译器本身继承的,但我想听听在 WINAPI 尤其是安全属性方面更有经验的人对这种行为的可能更好的解释。

小更新:是的,就像我想的那样,OpenProcess 导致错误 0x5 = ERROR_ACCESS_DENIED。

最佳答案

来自 OpenProcess function page在 MSDN 中:

To open a handle to another local process and obtain full access rights, you must enable the SeDebugPrivilege privilege.

我相信您的 IDE(您正在从 IDE 而不是 编译器 运行您的应用程序)默认启用了 SeDebugPrivilege。当您运行您的应用程序时,您的 IDE(进程)正在创建一个新进程,该进程从 IDE 继承特权,包括 SeDebugPrivilege,这就是从 IDE 运行时函数成功的原因。

您的应用程序应该检查它是否启用了SeDebugPrivilege,如果没有,enable it .

关于c++ - 从编译器运行时和作为独立 exe 运行时,进程访问权限似乎有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9213982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com